Android高德地图设置中心点图标,通过逆地理编码实时获取中心点的经纬度和详细位置

  • Post author:
  • Post category:其他


最近需要完成一个效果,就是在高德地图中心处设置图标,然后随意拖动地图,实时的获取中心图标的详细位置,这其中,需要先获取到中心图标的经纬度,然后通过逆地理编码获取到详细的位置,下面先附上图片。

这里写图片描述

现在就开始实现上图的效果,第一步,需要在地图中心点设置图标,下面是代码

//这里是初始化地图,以及对地图移动后、地图家在完成后的监听
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 版权协议,转载请附上原文出处链接和本声明。