300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 通过百度地图api实现简单经纬度输入定位(安卓端)

通过百度地图api实现简单经纬度输入定位(安卓端)

时间:2019-07-29 02:23:28

相关推荐

通过百度地图api实现简单经纬度输入定位(安卓端)

老师居然检查作业了!因为之前做过一点,熬夜做了一下,太久没搞安卓了,感觉之前学的全忘了:(。

功能演示

老师的要求是实现输入经纬度,在地图中显示该坐标位置信息

通过网上经纬度查询系统查得桥楼餐厅经纬度为(30.481074,114.393158)

通过在app中输入经纬度,显示位置

实现方法

百度地图api服务

要使用百度地图服务,首先当然要在百度地图开发平台申请账号,然后按步骤在控制台创建应用,获取应用key

注意两个版本SHA1值的获取方法和区别,包名也要与你AS里工程包名一致

按照百度地图开发指南实现AS配置

主要为导入jar包和.so文件,并在AndroidManifest文件中添加key和所需权限。

<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="nCo1q2jVq0p54bV02CXZTy04aCbri8NR" />

实现百度地图的基础显示

创首先需要创建一个AS工程,并新建一个基础活动(activity),在活动的布局文件中添加百度地图控件,用于显示地图

<com.baidu.mapapi.map.MapViewandroid:id="@+id/mmap"android:layout_width="match_parent"android:layout_height="match_parent" ></com.baidu.mapapi.map.MapView>

然后在java文件中引用该地图控件,并通过mapview.getmap()方法实现地图的显示

别忘了通过.initialize方法实现初始化

private MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext());SDKInitializer.setCoordType(CoordType.BD09LL); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); }

通过marker实现简单的点标记

在百度地图开发指南中详细介绍了如何通过marker实现点标记,使用实例如下

//定义Maker坐标点 LatLng point = new LatLng(39.963175, 116.400244); //构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); //构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions() .position(point) .icon(bitmap); //在地图上添加Marker,并显示

为了显示更加清晰,通过以下方法修改地图缩放级别和中心点

MapStatus mMapStatus = new MapStatus.Builder().target(point).zoom(20).build();MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);mBaiduMap.setMapStatus(mapStatusUpdate);

因为老师要求坐标通过自己输入,所以带来两个问题,一是如何将输入坐标edittext类型数据转换成double型,二是如何将输入活动中的坐标数据传到显示活动(另一个activity)中,以实现演示的那种效果

数据类型转换

final double a = Double.parseDouble(lat.getText().toString());final double b = Double.parseDouble(lng.getText().toString());

数据传递

intent.putExtra("a",a);intent.putExtra("b",b);startActivity(intent);

数据接收

Bundle bundle = this.getIntent().getExtras();a = bundle.getDouble("a",a);b = bundle.getDouble("b",b);

需要注意的问题

对不同cpu架构兼容问题

由于不同虚拟机或真机的CPU架构会有区别,在调试时可能会出现CPU架构不兼容的问题,在app包下的build.gradle文件中添加以下设置可解决

splits {abi {enable truereset()include 'x86', 'armeabi-v7a', 'x86_64'universalApk true}}

新建Application类实现context统一初始化

==在SDK各功能组件使用之前都需要调用

SDKInitializer.initialize(getApplicationContext());,建议该方法放在Application的初始化方法中 ==

public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate(); SDKInitializer.initialize(this);SDKInitializer.setCoordType(CoordType.BD09LL);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。