高德地图使用小结

前言

高德地图的api使用方法和百度地图差不多,照着Demo写也并不难,前段时间做的高德地图如今已经忘的差不多了,我的记性真是差,而且最近在重构代码,我才现以前理解的还是不够透彻有问题,希望写下来常常可以看看。

最简单的定位

定位基本上都是一个LocationClient类开始定位,LocationListener进行定位监听拿到定位结果,百度地图中也是这样的。

实例化对象

 private void initLocation() {

        if(locationClient ==null)
        {
            locationClient = new AMapLocationClient(this);
        }
        if(option == null)
        {
            option = new AMapLocationClientOption();
            option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        }

        //定位监听
        locationClient.setLocationListener(this);
        locationClient.setLocationOption(option);
        locationClient.startLocation();
    }

定位结果的回调方法

  @Override
    public void onLocationChanged(AMapLocation aMapLocation) {
        if(aMapLocation!=null)
        {
            if(aMapLocation.getErrorCode()==0)

                Log.d(TAG, "onLocationChanged: "+aMapLocation.getAddress());
            }
            else {
                Log.d(TAG, "onLocationChanged: "+aMapLocation.getErrorCode()+aMapLocation.getErrorInfo());
            }
        }
    }

从AmapLocation对象中可以拿到相关的地理位置信息。
定位结果:onLocationChanged: 江苏省南京市浦口区

定位并且在地图上显示出我的位置

有的时候不仅仅希望能拿到城市经纬度,还希望可以直接在地图上看到,怎么办呢?
不是刚刚已经说了,拿到经纬度了吗,那么在地图上放个Marker,再把地图移到这个经纬度上,我们不就可以看到了吗?
对,这是一种方法,可是看高德地图Demo中还有一种更简单的方法。

直接看代码

//定位
    private void initLocation() {
      //地图监听定位
        mAmap.setLocationSource(this);
 /**
    设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
    不设置true定位定不出来(一个大坑)
**/
        mAmap.setMyLocationEnabled(true);

    }

setLocationSource主要有两个方法

  • void activate(LocationSource.OnLocationChangedListener onLocationChangedListener) //激活定位,实例化对象,设置监听等
  • void deactivate() 释放资源 如停止定位

具体代码:


//定位回调接口
 @Override
    public void onLocationChanged(AMapLocation aMapLocation) {
        if (aMapLocation != null&&mlistener!=null) {
            if (aMapLocation.getErrorCode() == 0)
              //这行直接显示我的位置,并且给出一个默认的图标标位置
                mlistener.onLocationChanged(aMapLocation);
                Log.d(TAG, "onLocationChanged: " + aMapLocation.getAddress());
        } else {
            Log.d(TAG, "onLocationChanged: " + aMapLocation.getErrorCode() + aMapLocation.getErrorInfo());
        }
    }


//激活定位 
    @Override
    public void activate(LocationSource.OnLocationChangedListener onLocationChangedListener) {
        mlistener = onLocationChangedListener;

        if(locationClient ==null)
        {
            locationClient = new AMapLocationClient(this);
        }
        if(option == null)
        {
            option = new AMapLocationClientOption();
            设置GPS定位优先,即使设置高精度定位模式,它也会优先GPS在室内定位很差,最好不要设置,就默认的也就是false;
            option.setGpsFirst(true);
            //高精度定位模式
            option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        }
        //设置定位,onLocationChanged就是这个接口的方法
        locationClient.setLocationListener(this);
        locationClient.setLocationOption(option);
        //开始定位 
        locationClient.startLocation();
    }

    @Override
    public void deactivate() {
        if(locationClient.isStarted())
            locationClient.stopLocation();
        locationClient = null;
        mlistener=null;
    }
高德地图使用小结_第1张图片
搜索结果.png

Poi搜索

poi,point of interset,也就是兴趣点搜索,区别于正向地址解析。.
一般就是为搜索设置查询条件,然后异步搜索。

// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
 query = new PoiSearch.Query(keyWord,"",aMapLocation.getCity());
        // 设置query为poiSearch的查询条件
        poiSearch  = new PoiSearch(mContext,query);
        //  搜索回调接口
        poiSearch.setOnPoiSearchListener(this);
        //  设置异步搜索
        poiSearch.searchPOIAsyn();

搜索结果

 @Override
    public void onPoiSearched(PoiResult poiResult, int i) {
        view.hideProgress();

        if(i==1000)
        {
            if(null != poiResult&&poiResult.getQuery()!=null)
            {
              //判断返回的结果和想要查询的结果是否一致
                if(poiResult.getQuery().equals(query))
                {
                    List poiItem = poiResult.getPois();
                    if(null!= poiItem&&poiItem.size()>0)
                    {
                        //aMap.clear();
                        //添加覆盖物
                        PoiOverlay poiOverlay = new PoiOverlay(aMap,poiItem);
                        poiOverlay.removeFromMap();
                        poiOverlay.addToMap();
                        poiOverlay.zoomToSpan();
                    }
                }
            }
        }
  
    }
高德地图使用小结_第2张图片
poi搜索.png

最后说一个高等地图的一个坑


        
        
        
        

"com.amap.api.v2.apikey"这个不能改是固定死的,和百度地图一样,不然定位失败。


注意:高德地图并不是比较密钥“08c9b26d3ce86fb2159bb8b233960c88”,而是比较申请key的时候填写的sha1加密值和包名。一台机器上运行的项目放到另一台机器上地图就定位不出结果了,显示key配置有问题,这里就是你本地机器sha1加密和高德服务器上的不一样,所以才会这样。

你可能感兴趣的:(高德地图使用小结)