高德地图使用小结

作者: 想入飞飞___ | 来源:发表于2016-11-14 16:07 被阅读3173次

前言

高德地图的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;
    }
搜索结果.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> poiItem = poiResult.getPois();
                    if(null!= poiItem&&poiItem.size()>0)
                    {
                        //aMap.clear();
                        //添加覆盖物
                        PoiOverlay poiOverlay = new PoiOverlay(aMap,poiItem);
                        poiOverlay.removeFromMap();
                        poiOverlay.addToMap();
                        poiOverlay.zoomToSpan();
                    }
                }
            }
        }
  
    }
poi搜索.png

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


        <!-- 高德地图配置 -->
        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="08c9b26d3ce86fb2159bb8b233960c88" />
        <!-- 高德地图定位 -->
        <service android:name="com.amap.api.location.APSService" />

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


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

相关文章

  • 高德地图使用小结

    前言 高德地图的api使用方法和百度地图差不多,照着Demo写也并不难,前段时间做的高德地图如今已经忘的差不多了,...

  • swift原生地图与高德地图

    可以使用原生地图,也可以使用高德地图或者其他,高德开发者网站会教你如何在各个平台使用高德地图。 原生地图 记得im...

  • iOS地图导航功能实现

    最简单快捷的方法使用高德地图uri,高德地图uri的具体使用可在高德地图官方网站看,使用非常简单 简单贴下部分代码...

  • 高的地图

    分享 高德地图的使用 地图产品有: 谷歌 百度 高德 腾讯 ArcGis 超图 天地图 ...

  • 高德地图-始终获取屏幕中心点的地址(或经纬度)

    在使用高德地图之前需要现在高德地图开放平台创建一个APP,会自动生成一个appKey,在工程中使用高德地图sdk时...

  • 地图打点

    实现效果如下: 地图打点主要常用的地图分两类: 百度地图 高德地图 高德地图 高德地图可以使用自定义内容标记,通过...

  • iOS 使用高德地图正确姿势(三)

    iOS 使用高德地图正确姿势(一)iOS 使用高德地图正确姿势(二) 实现大头针始终在地图中心,拖动地图实时poi...

  • js实现当前位置定位(获取当前位置地理位置信息)

    1.确定要接入哪家地图平台的api(百度地图,高德地图),本案例中使用的是高德地图2.注册高德地图账号--到个人中...

  • 高德地图导航使用指南

    高德地图是我们常用的导航地图之一,其强大性就不说了,直接开始主题,高德地图导航功能的使用方法。 概览 高德地图导航...

  • 关于高德地图的MAMapView踩坑

    关于高德地图的MAMapView踩坑 在使用高德地图的MAMapView地图的时候碰到无法设置size的情况: 地...

网友评论

    本文标题:高德地图使用小结

    本文链接:https://www.haomeiwen.com/subject/tvyhpttx.html