最近需要完成一个效果,就是在高德地图中心处设置图标,然后随意拖动地图,实时的获取中心图标的详细位置,这其中,需要先获取到中心图标的经纬度,然后通过逆地理编码获取到详细的位置,下面先附上图片。
现在就开始实现上图的效果,第一步,需要在地图中心点设置图标,下面是代码
//这里是初始化地图,以及对地图移动后、地图家在完成后的监听
if (aMap == null) {
aMap = mapView.getMap();
setUp(aMap);
aMap.setOnCameraChangeListener(this);
aMap.setOnMapLoadedListener(this);
}
@Override
public void onMapLoaded() {
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.setFlat(true);
markerOptions.anchor(0.5f, 0.5f);
markerOptions.position(new LatLng(0, 0));
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.electricize_icon)));
Marker mPositionMark = aMap.addMarker(markerOptions);
mPositionMark.showInfoWindow();//主动显示indowindow
mPositionMark.setPositionByPixels(mapView.getWidth() / 2,mapView.getHeight() / 2);
}
上面代码你需要设置那些监听后才可以设置中心点图标
第二步就是获取中心点图标的经纬度,下面的代码块就是地图移动后的监听方法
@Override
public void onCameraChange(CameraPosition cameraPosition) {
}
@Override
public void onCameraChangeFinish(CameraPosition cameraPosition) {
//这个target 就是地图移动过后中心点的经纬度
target = cameraPosition.target;
//这个方法是逆地理编码解析出详细位置
Geo(target);
}
第三步就是逆地理编码获取地图中心点坐标的详细位置
//先要执行逆地理编码的搜索
public void Geo(LatLng latlng) {
geocoderSearch = new GeocodeSearch(this);
geocoderSearch.setOnGeocodeSearchListener(this);//和上面一样
// 第一个参数表示一个Latlng(经纬度),第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
RegeocodeQuery query = new RegeocodeQuery(new LatLonPoint(target.latitude,target.longitude), 200,GeocodeSearch.AMAP);
geocoderSearch.getFromLocationAsyn(query);
}
//在这个方法里面获取到详细位置
@Override
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
//如果逆地理编码成功,就获取到中心点的详细位置,并且在TextView中进行显示,就如同一开始的那张图片所示。
if (i == AMapException.CODE_AMAP_SUCCESS) {
if (regeocodeResult != null && regeocodeResult.getRegeocodeAddress() != null
&& regeocodeResult.getRegeocodeAddress().getFormatAddress() != null) {
String addressName = regeocodeResult.getRegeocodeAddress().getFormatAddress();
addressEdit.setText(addressName);
Log.d("address",addressName);
}
}
}
@Override
public void onGeocodeSearched(GeocodeResult result, int i) {
}
到此,整个功能就完成了,如果有不明白的可以下面留言,我会做出解答,后续会整理出一个demo,以供参考,写的太菜,勿喷,其中设置中心点图标的代码块,其中的参数也是不太懂,如果有想了解的,自行百度,共勉。
版权声明:本文为yu19931202原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。