您的位置:首页 > 其它

百度地图定位记录

2015-06-04 16:08 369 查看
百度地图是我们做开发要经常用到的,在天朝,我们望谷歌而兴叹!!!

首先我们需要从百度地图API下载对应的API JAR 以及SO文件,防止百度

官网抽风,俺机智的把里面的东西先全部下载出来给出下载链接如下:

百度地图API及工具下载地址



官网其实以及给出了完整的案列以及开发文档,但是如果照搬的话还是不能成功的。

前面配置啥的还是看官网吧。给出链接

http://developer.baidu.com/map/index.php 方便伸手党。



下面贴出我的代码:

点击下载百度地图定位源码



另外贴出计算两个经纬度点之间的距离:


public class Distance {

	private static final double EARTH_RADIUS = 6378137;// 地球的半径

	private static double rad(double d) {
		return d * Math.PI / 180.0;
	}

	/**
	 * 根据两点间经纬度坐标(double值),计算两点间距离,单位为米
	 * 
	 * @param lng1
	 * @param lat1
	 * @param lng2
	 * @param lat2
	 * @return
	 */
	public static double GetDistance(double lng1, double lat1, double lng2,
			double lat2) {
		double radLat1 = rad(lat1);
		double radLat2 = rad(lat2);
		double a = radLat1 - radLat2;
		double b = rad(lng1) - rad(lng2);
		double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
				+ Math.cos(radLat1) * Math.cos(radLat2)
				* Math.pow(Math.sin(b / 2), 2)));
		s = s * EARTH_RADIUS;
		s = Math.round(s * 10000) / 10000;
		return s;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		double distance = GetDistance(121.491909, 31.233234, 121.411994,
				31.206134);
		
		distance = StrUtil.get2Double(distance);
		
		System.out.println("Distance is:" + distance);

		double distance2 = getDistance(121.491909, 31.233234, 121.411994,
				31.206134);

		distance2 = StrUtil.get2Double(distance2);

		System.out.println("Distance2 is:" + distance2);
	}

	private final static double PI = Math.PI; // 圆周率
	private final static double R = 6371.229; // 地球的半径

	/**
	 * longitude 经度 latitude 维度
	 */
	public static double getDistance(double longt1, double lat1, double longt2,
			double lat2) {
		double x, y, distance;
		x = (longt2 - longt1) * PI * R
				* Math.cos(((lat1 + lat2) / 2) * PI / 180) / 180;
		y = (lat2 - lat1) * PI * R / 180;
		distance = Math.hypot(x, y);
		return distance;
	}

}




public class MainActivity extends Activity {
	MapView mMapView = null;// 定义
	BaiduMap mBaiduMap = null;//
	// 定位相关
	private LocationClient locationClient;// 百度地图定位管理器
	private MylocationListener mylocationListener;// 定位监听器
	private boolean isFirstOpen = true;// 判断是否是第一次进去
	private Context context;// 方便我做定位的时候判断并显示

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		SDKInitializer.initialize(getApplicationContext());// 加载百度地图
		setContentView(R.layout.activity_main);
		this.context = this;
		mMapView = (MapView) findViewById(R.id.bmapView);
		mBaiduMap = mMapView.getMap();
		// 普通地图
		mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
		// 卫星地图
		setPointLocal(1d, 2);
		initLoction();
	}

	/**
	 * 初始化定位
	 */
	private void initLoction() {
		locationClient = new LocationClient(getApplicationContext());// 创建定位的
		mylocationListener = new MylocationListener();// 创建监听器对象
		locationClient.registerLocationListener(mylocationListener);// 注册监听
		LocationClientOption option = new LocationClientOption();
		option.setCoorType("bd09ll");// 设置地图的类型
		option.setIsNeedAddress(true);// 设置是否需要地址
		option.setOpenGps(true);// 设置GPS打开
		option.setScanSpan(5000);// 设置扫描间隔时间
		locationClient.setLocOption(option);//
	}

	/**
	 * 创建定位的监听器
	 * 
	 * @author Administrator
	 *
	 */
	private class MylocationListener implements BDLocationListener {

		@Override
		public void onReceiveLocation(BDLocation location) {
			/**
			 * 换行输入编译 亮点 鸿洋大神教的
			 */
			MyLocationData data = new MyLocationData.Builder()//
					.accuracy(location.getRadius())//
					.latitude(location.getLatitude())//
					.longitude(location.getLongitude()).build();
			mBaiduMap.setMyLocationData(data);// 设置百度地图的数据

			Toast.makeText(context, "地点是:" + location.getAddrStr(), 1).show();

			//
			setPointLocal1(location.getLatitude(), location.getLongitude());
			if (isFirstOpen) {// 判断是否是第一次进来,免得跳来跳去的
				LatLng latLng = new LatLng(location.getLatitude(),
						location.getLongitude());
				MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
				mBaiduMap.animateMapStatus(msu);
				isFirstOpen = false;
			}
		}
	}

	@Override
	protected void onStart() {
		super.onStart();
		mBaiduMap.setMyLocationEnabled(true);// 设置开启定位
		if (locationClient.isStarted()) {

		} else {
			locationClient.start();
		}
	}

	/**
	 * 设置经纬度的坐标进去
	 * 
	 * @param j
	 * @param w
	 */
	public void setPointLocal(double j, double w) {
		// 定义Maker坐标点
		LatLng point = new LatLng(39.963175, 116.400244);// 北京市的经纬度
		LatLng point2 = new LatLng(114.172734, 22.274882);// 深圳市的经纬度
		// 构建Marker图标

		double ddi = Distance.GetDistance(point.longitude, point.latitude,
				point2.longitude, point2.latitude);

		Toast.makeText(MainActivity.this, "距离是:" + ddi / 2000 + "公里",
				Toast.LENGTH_LONG).show();

		BitmapDescriptor bitmap = BitmapDescriptorFactory
				.fromResource(R.drawable.ic_launcher);
		// 构建MarkerOption,用于在地图上添加Marker
		OverlayOptions option = new MarkerOptions().position(point)
				.icon(bitmap);
		OverlayOptions option2 = new MarkerOptions().position(point2).icon(
				bitmap);
		// 在地图上添加Marker,并显示
		mBaiduMap.addOverlay(option);
		mBaiduMap.addOverlay(option2);
	}

	public void setPointLocal1(double j, double w) {
		// 定义Maker坐标点
		LatLng point = new LatLng(j, w);// 北京市的经纬度
		// 构建Marker图标

		BitmapDescriptor bitmap = BitmapDescriptorFactory
				.fromResource(R.drawable.ic_launcher);
		// 构建MarkerOption,用于在地图上添加Marker
		OverlayOptions option = new MarkerOptions().position(point)
				.icon(bitmap);
		// 在地图上添加Marker,并显示
		mBaiduMap.addOverlay(option);
	}

	@Override
	protected void onStop() {
		super.onStop();

		mBaiduMap.setMyLocationEnabled(false);
		if (locationClient.isStarted()) {
			locationClient.stop();
		}

	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
		mMapView.onDestroy();
	}

	@Override
	protected void onResume() {
		super.onResume();
		// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
		mMapView.onResume();
	}

	@Override
	protected void onPause() {
		super.onPause();
		// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
		mMapView.onPause();
	}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: