百度地图使用

概述,为了满足项目的需求,在项目当中集成了百度map,除了简单的定位,还包含了poi搜索,地理编码、周边搜索等功能;
1.集成,首先要去百度地图开发者平台成为开发者,并申请appkey,规则是sha1 + packageName;
如果不知道怎么申请key,可以看说明,例如
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key 如果觉得太长不看也没关系,可以直接将baiduMap demo运行一遍,当然项目能运行,但并不能跑通,可以观察到在android monitor当中会告诉你的sha1以及包名,那么就直接用这个去申请创建自己项目即可;说点题外话,将其他的项目移植到自己的Android studio当中,那么需要改动的地方有几个,如图 :

image.png

将项目build.gradle的compile 改成自己项目中的compile版本,我这边是2.3.1那么直接改,其次就是在gredle文件下有个gradle-wrapper.properties文件,也改成自己的,我这边是3.3;好了转回正文,开始我们项目集成;
(1).下载demo,将libs库当中jar包以及.so文件移植到项目中jniLibs目录下;
(2).androidManifest.xml文件当中将必须的permission service copy;
(3).开始项目代码的编写;

private void initMap() {
    // 地图初始化
    mMapView = (MapView) findViewById(R.id.bmapView);
    mBaiduMap = mMapView.getMap();
    // 开启定位图层
    mBaiduMap.setMyLocationEnabled(true);
    // 定位初始化
    mLocClient = new LocationClient(this);
    mLocClient.registerLocationListener(myListener);
    LocationClientOption option = new LocationClientOption();
    option.setOpenGps(true); // 打开gps
    option.setCoorType("bd09ll"); // 设置坐标类型
    option.setScanSpan(1000);//设置扫描频率,值<1000ms将不执行
    option.setIsNeedLocationPoiList(true); //获取定位周边poi信息
    mLocClient.setLocOption(option);
    mLocClient.start();
}

这里的myListener需要去implement BDLocationListener并重写onReceiveLocation,重点是可以获取poi列表,我们一般定位是基于手机,不单单是wifi、gps、基站等;那么怎么能比较准确呢?

   /**
 * 定位SDK监听函数
 */
public class LocationListener implements BDLocationListener {

    @Override
    public void onReceiveLocation(BDLocation location) {
        // map view 销毁后不在处理新接收的位置
        if (location == null || mMapView == null) {
            return;
        }
        MyLocationData locData = new MyLocationData.Builder()
                /**周边范围*/
                .accuracy(location.getRadius())
                        // 此处设置开发者获取到的方向信息,顺时针0-360
                .direction(100).
                        latitude(location.getLatitude())
                .longitude(location.getLongitude()).build();
        mBaiduMap.setMyLocationData(locData);
        if (isFirstLoc) {
            isFirstLoc = false;
            /**latlng是经纬度坐标的类*/
            LatLng ll = new LatLng(location.getLatitude(),
                    location.getLongitude());
            MapStatus.Builder builder = new MapStatus.Builder();
            builder.target(ll).zoom(18.0f);
            mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

            List poiList = location.getPoiList();
            if(poiList != null && poiList.size() > 0) {
                for (int i = 0; i< poiList.size();i ++) {
                    Log.e(Tag,poiList.get(i).address);
                    Log.e(Tag,poiList.get(i).name);
                    //可以将address和name信息拼接成adapter的bean,并增加到列表供用户选择
                }
            }
        }
    }
  
}

我这边提供一个简单的layout,如下

 <?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">

<com.baidu.mapapi.map.MapView
    android:layout_width="match_parent"
    android:layout_height="260dp"
    android:id="@+id/map_view"/>

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler_view"/>

</LinearLayout>

当然我不是这么做的,因为还有一种更好的方法,可以提供更加准确的poi列表,这边是使用定位后的经纬度反地理编码后的poi列表,而且用户在移动mapView的同时,随时获取map中点附件poi列表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近仿照美团做了款应用,刚好用到百度地图,高德地图之前用的比较多,只是这个项目的后台服务器是另外一个公司做的,他们...
    奔跑的小蚂蚁_8b28阅读 1,198评论 0 1
  • 环境配置 1.首先要有一个百度账号,因为百度地图使用是免费的,所以可以直接注册就可以了2.区百度地图API首页创建...
    PlatonsDream阅读 818评论 0 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,213评论 25 708
  • 创建地图 创建开发者账号 创建应用 申请秘钥 在工程中将ViewController.mm 因为SDK有一部分是以...
    Karen_阅读 698评论 0 4
  • 文/小叶 一 你的泪 如星辰坠落 直沉海底 二 用尽一生打捞 也不能让你 笑魇如昨 三 多少的伤 才换来一生 没了...
    博土阅读 286评论 0 1