百度地图使用

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

百度地图使用_第1张图片
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,如下

 
   






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

你可能感兴趣的:(百度地图使用)