如何获取经纬度之间两点间真实距离(适用于GoogleMap,BaiduMap,Amap等)

本文介绍了一种在Android和iOS等平台上计算两个经纬度之间实际距离的方法。通过数学公式实现,适用于各种地图版本。


看标题就会明白,两个经纬度之间真实距离这个一般的地图API有自带方法,直接调用便可得到结果,一般结果都是以米为单位。最近在做android版上的GoogleMap,找了半天API发现没有此类方法,看来只能自己实现了,接下来我就把如何计算两点之间(经纬度)的真实距离的算法写下来,原则上在各种地图版本上都通用,方便大家使用。


Google Map API:https://developers.google.com/maps/documentation/android/



【本文适用于android,ios等各种平台下的地图经纬度测距】


自己实现距离算法:

	/**
	 * 计算两点之间距离
	 * @param start
	 * @param end
	 * @return 米
	 */
	public double getDistance(LatLng start,LatLng end){
		double lat1 = (Math.PI/180)*start.latitude;
		double lat2 = (Math.PI/180)*end.latitude;
		
		double lon1 = (Math.PI/180)*start.longitude;
		double lon2 = (Math.PI/180)*end.longitude;
		
//      double Lat1r = (Math.PI/180)*(gp1.getLatitudeE6()/1E6);
//      double Lat2r = (Math.PI/180)*(gp2.getLatitudeE6()/1E6);
//      double Lon1r = (Math.PI/180)*(gp1.getLongitudeE6()/1E6);
//      double Lon2r = (Math.PI/180)*(gp2.getLongitudeE6()/1E6);
		
		//地球半径
		double R = 6371;
		
		//两点间距离 km,如果想要米的话,结果*1000就可以了
		double d =  Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon2-lon1))*R;
		
		return d*1000;
	}


举例:(我使用的百度地图的经纬度数据)

		LatLng start = new LatLng(39.95676, 116.401394);
		LatLng end = new LatLng(36.63014,114.499574);
		getDistance(start, end);

log日志结果为:402.21321(km)



害怕不准确的话,可以打开百度地图首页,使用测距工具:


看图应该知道,应该没什么问题吧。




Leaflet是一款轻量级的JavaScript库,用于创建交互式的Web地图。如果你想在Leaflet中集成百度地图,并使用自定义的地图样式(即`map-style-id`),首先你需要确保已经在百度地图API上注册并获取了地图样式ID。百度地图的样式ID通常是由百度提供的一组预设样式,或者你可以通过官方文档创建自定义样式。 以下是基本步骤: 1. **引用百度地图API**:在HTML文件中添加百度地图的JS链接,例如: ```html <script src="https://api.map.baidu.com/api?v=3.0&ak=<your_api_key>"></script> ``` 替换 `<your_api_key>` 为你实际的百度地图API密钥。 2. **初始化地图**:在 Leaflet 中,你可以创建一个 L.Map 实例,然后设置地图的 ID 和百度地图服务: ```javascript var map = L.map('mapid').setView([39.9042, 116.4074], 13); // 北京位置及初始缩放级别 var baiduLayer = L.tileLayer('http://{s}.api.map.baidu.com/tile/v2/map?style={map_style_id}', { maxZoom: 22, attribution: 'Map data © <a href="https://developers.google.com/maps/">Google</a> and ' + '<a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' + '| Map style by <a href="https://lbsyun.baidu.com/">Baidu Maps</a>' }); map.addLayer(baiduLayer); ``` `{map_style_id}` 需替换为你从百度地图获取的实际 `map-style-id`。 3. **加载地图样式**:如果你有预设的百度地图样式ID,可以在初始化时直接传递。如果没有,需要先在百度地图开发者平台上创建或选择一个样式。 注意:虽然Leaflet本身不支持百度地图的具体样式管理,但你可以借助其提供的基础地图层和其他第三方插件,如L.BaiduMap,来接实现。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值