高德地图(二)之显示定位,比例尺和添加Marker

上一篇记录了高德地图的简单集成。只是初始化了地图,没有实现任何功能。这篇文章记录下定位功能和添加marker标记。

声明:本篇文章所以代码皆来自官方文档,我只是拼接了下。

效果图

效果图是这样的

定位

下面直接记录定位实现过程

在onCreate里添加下面代码,这里需要实现一个接口。

1
2
3
4
5
6
7

//初始化地图控制器对象
AMap aMap = mMapView.getMap();
// 设置定位监听
aMap.setLocationSource(this);
// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
aMap.setMyLocationEnabled(true);

实现的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
if (mlocationClient == null) {
//初始化定位
mlocationClient = new AMapLocationClient(this);
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位回调监听
mlocationClient.setLocationListener(this);
//设置为高精度定位模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位参数
mlocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
mlocationClient.startLocation();//启动定位
}
}

@Override
public void deactivate() {
mListener = null;
if (mlocationClient != null) {
mlocationClient.stopLocation();
mlocationClient.onDestroy();
}
mlocationClient = null;
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (mListener != null&&aMapLocation != null) {
if (aMapLocation != null
&&aMapLocation.getErrorCode() == 0) {
mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点
} else {
String errText = "定位失败," + aMapLocation.getErrorCode()+ ": " + aMapLocation.getErrorInfo();
Log.e("AmapErr",errText);
}
}
}

重写生命周期

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
if(null != mlocationClient){
mlocationClient.onDestroy();
}
}

@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}

@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}

至此,定位功能已经实现。但是并没有显示定位蓝点,也就是我们常见的那个定位标记。

显示定位蓝点

1
2

aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。

对定位蓝点进行自定义

你会发现效果图中的精度圈跟默认的不同,就是在这里自定义的。

1
2
3
4
5
6

MyLocationStyle myLocationStyle;
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类
// myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 //myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_map_location));//定位自定义图标
myLocationStyle.strokeColor(Color.CYAN); //精度圈自定义 myLocationStyle.radiusFillColor(Color.argb(50,38,165,153)) ;//精度圈自定义 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//只定位一次。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style

添加Marker

地图上往往有一些标记成为marker.
现在很多app地图里都有好多marker,最具代表性的就是共享单车app

示例代码如下:
你可以根据自己的需求进行自行添加,拿到经纬度即可。

1
2
3

aMap.addMarker(new MarkerOptions().position(new LatLng(31.238075,121.662691)).title("上海"));
aMap.addMarker(new MarkerOptions().position(new LatLng(31.238403,121.661902)).title("上海"));

设置缩放级别

1
2

aMap.moveCamera(CameraUpdateFactory.zoomTo(15));

设置比例尺和定位按钮

1
2
3
4

uiSettings = aMap.getUiSettings();
uiSettings.setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
uiSettings.setScaleControlsEnabled(true);//控制比例尺控件是否显示

个人集成的时候和大家一样,也是一点点扒官网代码来的。这里把这些给贴出来。有需求的可以复制。

比较推荐通过官方文档进行学习,可能有些不清楚的地方需要网上搜索。毕竟有时候真的在官方文档找不到。

这里我偷懒了,都是粘贴一堆代码,还望见谅。重在实现功能吧。^_^

Demo下载

github暂时未传,回头完善了再传