百度地图的一些方法及常见问题

来源:互联网 发布:火车网络票实名认证 编辑:程序博客网 时间:2024/05/21 14:43

注意事项:

一、①当打开百度demo不能定位时,考虑是否更换了key。

        <meta-data            android:name="com.baidu.lbsapi.API_KEY"            android:value="Mbg6oV5kPFG2CcYU3q1zFV7jePZlcGOz" />

②自定义一个MyApplication继承自Application,在onCreate()方法中初始化全局SDKInitializer.initialize(getApplicationContext());

③尤其需要在mainfest中添加权限

    <!-- 这个权限用于进行网络定位 -->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>    <!-- 这个权限用于访问GPS定位 -->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>    <!-- 用于读取手机当前的状态 -->    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>    <!-- 访问网络,网络定位需要上网 -->    <uses-permission android:name="android.permission.INTERNET" />    <!-- SD卡读取权限,用户写入离线定位数据 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>    <!-- 允许应用读取低级别的系统日志文件 -->    <uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
        <service            android:name="com.baidu.location.f"            android:enabled="true"            android:process=":remote"></service>


1、计算两点间的距离

public boolean isLocation(LatLng latLng, LatLng latLng2, Integer r) {double R = 6371;// 地球半径double distance = 0.0;double dLat = Double.valueOf(new BigDecimal(String.valueOf((latLng.latitude - latLng2.latitude))).multiply(new BigDecimal(String.valueOf(Math.PI))).divide(new BigDecimal(String.valueOf(180)), 10,BigDecimal.ROUND_HALF_EVEN).toString());double dLon = Double.valueOf(new BigDecimal(String.valueOf((latLng.longitude - latLng2.longitude))).multiply(new BigDecimal(String.valueOf(Math.PI))).divide(new BigDecimal(String.valueOf(180)), 10,BigDecimal.ROUND_HALF_EVEN).toString());double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)+ Math.cos(latLng.latitude * Math.PI / 180)* Math.cos(latLng2.latitude * Math.PI / 180)* Math.sin(dLon / 2) * Math.sin(dLon / 2);distance = (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))) * R * 1000;System.out.println(distance);// distance两个坐标点之间的直线距离if (distance > Double.valueOf(String.valueOf(r))) {//r为设置的半径return true;}return false;}
2、调用外部百度地图导航

public void startNavi(LatLng pt1, LatLng pt2) {// 构建导航参数/** * endName(java.lang.String endName):导航终点名称 endPoint(LatLng * endPoint):导航终点, 百度经纬度坐标 startName(java.lang.String startName):导航起点名称 * startPoint(LatLng startPoint):导航起点, 百度经纬度坐标 * */NaviParaOption para = new NaviParaOption().startPoint(pt1).endPoint(pt2).startName("天安门").endName("百度大厦");try {/** * openBaiduMapNavi(NaviParaOption para, Context context) 调起百度地图导航页面 * */BaiduMapNavigation.openBaiduMapNavi(para, getActivity());} catch (BaiduMapAppNotSupportNaviException e) {e.printStackTrace();showConfirmTip("您尚未安装百度地图app或app版本过低,点击确认安装?",new OnCustomDialogConfirmListener() {@Overridepublic void onClick() {// TODO Auto-generated method stubOpenClientUtil.getLatestBaiduMapApp(getActivity());}}, new OnCustomDialogConfirmListener() {@Overridepublic void onClick() {// TODO Auto-generated method stub}});}}

3、打开实时路况 / 打开热力地图

case R.id.traffic_map_btn:if (!mBaiduMap.isTrafficEnabled()) {mBaiduMap.setTrafficEnabled(true);trafficMapBtn.setText("关闭实时路况");} else {mBaiduMap.setTrafficEnabled(false);trafficMapBtn.setText("打开实时路况");}break;case R.id.heat_map_btn:if (!mBaiduMap.isBaiduHeatMapEnabled()) {mBaiduMap.setBaiduHeatMapEnabled(true);headMapBtn.setText("关闭热力图");} else {mBaiduMap.setBaiduHeatMapEnabled(false);headMapBtn.setText("打开热力图");}break;

4、反地理编码得到地址信息,需要定义一个全局变量,在该方法里赋值即可。

/** * 反地理编码得到地址信息 *  * @return */private void reverseGeoCode(LatLng latLng) {// 创建地理编码检索实例GeoCoder geoCoder = GeoCoder.newInstance();geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latLng));geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {@Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {// TODO Auto-generated method stubif (result == null|| result.error != SearchResult.ERRORNO.NO_ERROR) {// 没有检测到结果Toast.makeText(getActivity(), "抱歉,未能找到结果",Toast.LENGTH_LONG).show();}Toast.makeText(getActivity(), "位置:" + result.getAddress(),Toast.LENGTH_LONG).show();cenpt1Addr = result.getAddress();location.setText(cenpt1Addr);Log.e("ShiftFragment", cenpt1Addr);}@Overridepublic void onGetGeoCodeResult(GeoCodeResult result) {// TODO Auto-generated method stubif (result == null|| result.error != SearchResult.ERRORNO.NO_ERROR) {// 没有检测到结果}}});//geoCoder.destroy();// 释放地理编码检索实例    ,不知道为什么有这句话地址就解析不出来}

5、 根据经纬度获得车辆位置信息,给期设置定位图标

/** * 根据经纬度获得车辆位置信息 * * @param cenpt1 点1 * @param  */
private Marker mMarkerB;private Marker mMarkerC;BitmapDescriptor bdA = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);BitmapDescriptor bdB = BitmapDescriptorFactory.fromResource(R.drawable.gzcbus);BitmapDescriptor bdC = BitmapDescriptorFactory.fromResource(R.drawable.trailerbusy);public void initOverlay() {if(cenpt1!=null && cenpt2!=null){MarkerOptions ooB = new MarkerOptions().position(cenpt1).icon(bdB);mMarkerB = (Marker) (mBaiduMap.addOverlay(ooB));MarkerOptions ooC = new MarkerOptions().position(cenpt2).icon(bdC);mMarkerC = (Marker) (mBaiduMap.addOverlay(ooC));}else{linear1.setVisibility(View.GONE);linear2.setVisibility(View.GONE);return;}}





0 0
原创粉丝点击