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

注意事项:

一、①当打开百度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() {
						@Override
						public void onClick() {
							// TODO Auto-generated method stub
							OpenClientUtil.getLatestBaiduMapApp(getActivity());
						}
					}, new OnCustomDialogConfirmListener() {
						@Override
						public 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() {

			@Override
			public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
				// TODO Auto-generated method stub
				if (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);
			}

			@Override
			public void onGetGeoCodeResult(GeoCodeResult result) {
				// TODO Auto-generated method stub
				if (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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值