百度地图,百度定位。

百度地图

百度地图是第三方的东西,由百度提供接口,我们只要用他的接口就可以了。

环境搭配

在百度地图的API中下载相关的实例,在实例中的libs中粘贴1)baidumapapi_v3_5_0.jarhe和locSDK_5.2.jar这两个jar包到我们的libs中。将所有的so文件粘贴过来,在我们的main中建立一个jniLibs文件夹,将so文件拷入这个文件夹中。
2)将jar包导入。

申请密钥

具体的过程在百度中说的非常清楚,这里不再讨论,只是注意包名一定要是你的工程的文件,debug码在copy的时候前后不要有空格。
当我们按照百度的提示写好代码后就可以出现百度地图了,有关百度地图的其他功能都在demo中有提及,这里我们主要讲search地点,在我们输入地址的名称后,可以在地图中显示出来。还可以在两点之间画直线。在demo的GeoCoderDemo中是有关地理编码功能的例子。
反Geo搜索是什么我也不知道。这里理顺一下思路:

地理编码

1)获得GeoCoder的实例mSearch。

GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
mSearch = GeoCoder.newInstance();

2)设置mSearch 的监听事件,在监听事件中有两个方法onGetGeoCodeResult()是获得Geo搜索的结果,另一个onGetReverseGeoCodeResult()获得反Geo搜索的结果。

通过:

mBaiduMap.addOverlay(new MarkerOptions().position(result.getLocation())
                .icon(BitmapDescriptorFactory
                        .fromResource(R.mipmap.icon_marka)));
        mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(result
                .getLocation()));

在所寻找的点上标有图标,R.mipmap.icon_marka,就是那个图标。

通过:

result.getLocation().latitude, result.getLocation().longitude

获得维度和经度。

完整的代码如下:

//对mSearch加入监听事件。
        mSearch.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
            @Override
            public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
                if (geoCodeResult == null || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
                    Toast.makeText(MainActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG)
                            .show();
                    return;
                }
                mbaidu.clear();
                mbaidu.addOverlay(new MarkerOptions().position(geoCodeResult.getLocation())
                        .icon(BitmapDescriptorFactory
                                .fromResource(R.mipmap.pp)));
                mbaidu.setMapStatus(MapStatusUpdateFactory.newLatLng(geoCodeResult
                        .getLocation()));
                String strInfo = String.format("纬度:%f 经度:%f",
                        geoCodeResult.getLocation().latitude, geoCodeResult.getLocation().longitude);
                Toast.makeText(MainActivity.this, strInfo, Toast.LENGTH_LONG).show();
                if(count==1){

                   LatLng point1 = new LatLng(geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);
                    points.add(point1);
                }else if(count==2){

                    LatLng point2 = new LatLng(geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);
                    points.add(point2);
                }

            }

            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {

            }
        });
    }

这里的 mbaidu = mMapView.getMap();//会的map实例。
通过mMapView.getMap()获得百度地图的实例。
这里的 LatLng point2 = new LatLng(geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);是LatLng 是以经纬度确定的点。在画线的时候会用到。

在button的点击事件中输入地址就可以找到我们想找的结果了。

 mSearch.geocode(new GeoCodeOption().city("北京").address("中关村"));

当点击的时候会定位到我们需要的点。

在地图中划线

demo中GeometryDemo是换各种图形的示例:

public void addCustomElementsDemo() {
        // 添加折线
        LatLng p1 = new LatLng(39.97923, 116.357428);
        LatLng p2 = new LatLng(39.94923, 116.397428);
        LatLng p3 = new LatLng(39.97923, 116.437428);
        List<LatLng> points = new ArrayList<LatLng>();
        points.add(p1);
        points.add(p2);
        points.add(p3);
        OverlayOptions ooPolyline = new PolylineOptions().width(10)
                .color(0xAAFF0000).points(points);
        mBaiduMap.addOverlay(ooPolyline);

从上面的代码可以看到是非常清晰的,
1)将要连接的点通过LatLng 实例获得经纬度点,
2)将这些点add到list中,剩下的代码就不是我们关心的问题了。

定位

定位并不是百度地图的功能必须另外下载SDK;
注意当地图鱼定位同时在一个项目中的时候,注意libs的SDKjar只需要最新的就可以了。比如说6.02.so文件也是这样删掉5.0的保留6.0的不可以都存在。

具体的就不写了,可以看百度的SDK,这里只说一下思路:

1)获得LocationClient的实例,并对实例进行注册监听:

 mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类
        mLocationClient.registerLocationListener( myListener );    //注册监听函数

我们再myListener 的实例中可以得到我们的位置:

public BDLocationListener myListener = new MyLocationListener();
 class MyLocationListener implements BDLocationListener {
         @Override
         public void onReceiveLocation(BDLocation location) {
           mytextview.setText(location.getAddress().address);
            array[4]= location.getLatitude();
             array[5]= location.getLongitude();
             LatLng point = new LatLng(location.getLatitude(),location.getLongitude());
             points.add(point);
             mbaidu.addOverlay(new MarkerOptions().position(point)
                     .icon(BitmapDescriptorFactory
                             .fromResource(R.mipmap.pp)));
             mbaidu.setMapStatus(MapStatusUpdateFactory.newLatLng(point));

             StringBuffer sb = new StringBuffer(256);
             sb.append("time : ");
             sb.append(location.getTime());
             sb.append("\nerror code : ");
             sb.append(location.getLocType());
             sb.append("\nlatitude : ");
             sb.append(location.getLatitude());
             sb.append("\nlontitude : ");
             sb.append(location.getLongitude());
             sb.append("\nradius : ");
             sb.append(location.getRadius());
             if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
                 sb.append("\nspeed : ");
                 sb.append(location.getSpeed());// 单位:公里每小时
                 sb.append("\nsatellite : ");
                 sb.append(location.getSatelliteNumber());
                 sb.append("\nheight : ");
                 sb.append(location.getAltitude());// 单位:米
                 sb.append("\ndirection : ");
                 sb.append(location.getDirection());// 单位度
                 sb.append("\naddr : ");
                 sb.append(location.getAddrStr());
                 sb.append("\ndescribe : ");
                 sb.append("gps定位成功");

             } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
                 sb.append("\naddr : ");
                 sb.append(location.getAddrStr());
                 //运营商信息
                 sb.append("\noperationers : ");
                 sb.append(location.getOperators());
                 sb.append("\ndescribe : ");
                 sb.append("网络定位成功");
             } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
                 sb.append("\ndescribe : ");
                 sb.append("离线定位成功,离线定位结果也是有效的");
             } else if (location.getLocType() == BDLocation.TypeServerError) {
                 sb.append("\ndescribe : ");
                 sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");
             } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
                 sb.append("\ndescribe : ");
                 sb.append("网络不同导致定位失败,请检查网络是否通畅");
             } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
                 sb.append("\ndescribe : ");
                 sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");
             }
             sb.append("\nlocationdescribe : ");
             sb.append(location.getLocationDescribe());// 位置语义化信息
             List<Poi> list = location.getPoiList();// POI数据
             if (list != null) {
                 sb.append("\npoilist size = : ");
                 sb.append(list.size());
                 for (Poi p : list) {
                     sb.append("\npoi= : ");
                     sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
                 }
             }
             Log.i("BaiduLocationApiDem", sb.toString());
             mLocationClient.stop();

         }
     }

这里location.getAddress().address就可以获得我们的地理位置的名称。

2)初始化
initLocation();
3)start:

 mLocationClient.start();

这样就结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值