java版谷歌地图计算两经纬度坐标点的距离

本文介绍了一种基于Haversine公式的球面两点距离计算方法,适用于地球表面两点间距离的精确测量。提供了Java实现代码,包括地球半径定义、角度转弧度函数及核心计算函数,展示了计算效率和精度,适用于地图应用中坐标点距离计算。
球面上两点间大圆劣弧的距离
public class GoogleMapHelper {

	private static double EARTH_RADIUS = 6378.137;	//地球半径
	//将用角度表示的角转换为近似相等的用弧度表示的角 Math.toRadians
	private static double rad(double d)
	{
	    return d * Math.PI / 180.0;
	}

	/**
	 * 谷歌地图计算两个坐标点的距离
	 * @param lng1	经度1
	 * @param lat1	纬度1
	 * @param lng2	经度2
	 * @param lat2	纬度2
	 * @return 距离(千米)
	 */
	public static double getDistance(double lng1, double lat1, double lng2, double lat2)
	{
	    double radLat1 = Math.toRadians(lat1);
	    double radLat2 = Math.toRadians(lat2);
	    double a = radLat1 - radLat2;
	    double b = Math.toRadians(lng1) - Math.toRadians(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;
	}
	
	public static void main(String[] args) {
		long b = System.currentTimeMillis();
		for(int i=0; i<1000000; i++){
			getDistance(116.403933,39.914147, 116.403237,39.927919);
		}
		System.out.println("耗时:"+(System.currentTimeMillis()-b)+"毫秒"); //耗时:461毫秒
		double dist = getDistance(116.403933,39.914147, 116.403237,39.927919);
		System.out.println("两点相距:" + dist + "千米");	//两点相距:1.0千米

	}
}

js版谷歌地图计算两经纬度坐标点的距离_躁动的青年的博客-优快云博客

参考:

球面上两点间距离的求法
球面上两点间距离的求法 - 百度文库

两点间的球面距离公式
http://blog.163.com/scuqifuguang@126/blog/static/1713700862011217114939980/

计算两个经纬度之间的距离
计算两个经纬度之间的距离_musicrabbit的博客-优快云博客

根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离)
根据2个经纬度点,计算这2个经纬度点之间的距离(通过经度纬度得到距离) - softfair - 博客园

球面上任意两点之间的距离计算公式可以参考维基百科上的下述文章。

值得一提的是,维基百科推荐使用Haversine公式,理由是Great-circle distance公式用到了大量余弦函数, 而两点间距离很短时(比如地球表面上相距几百米的两点),余弦函数会得出0.999...的结果, 会导致较大的舍入误差。而Haversine公式采用了正弦函数,即使距离很小,也能保持足够的有效数字。 以前采用三角函数表计算时的确会有这个问题,但经过实际验证,采用计算机来计算时,两个公式的区别不大。 稳妥起见,这里还是采用Haversine公式。

任何 Google 地图 API 应用程序中的基础元素都是“地图”本身。 大量应用js,访问Google 的API。 在此之前较为麻烦的事申请Google 的key,相比都知道,Google 在中国市场的地位,因此Google 的key较难申请, .Google Maps API 申请方式变更在Google Maps API 的部份,官方网站目前是建议使用新本(v3)的API 进行开发,若您仍希望继续使用v2 的本进行开发,您可能需要进行部份设定的修改,底下是设定的流程:   1.使用Google帐号登入APIs Console (https://code.google.com/apis/console),并将Google Maps API v2的选项打开,如下图所示: Google Maps API v2设置   2.依据您的需求产生对应的Google Maps API Key ,若您是要继续采用v2 本的方式使用Google Maps API ,请选择「Create new Browser Key」,之后将产生的Key 依据过去的方式填入对应的位置即可 注意V2本对应的选项   需要注意的是:   1.依目前观察,已经在使用中的Google Maps API Key 是可以继续使用,并不会因为产生Key 的方式改变而有所变更。   2.新的方式会统计并限制使用量(目前是限制每天25,000 次查询),若超过用量则需给付相关费用才可继续使用。 最近发现好多google的域名不能访问了!包括Android开发SDK都不能更新了!解决方法: 修改hosts文件 添加: 74.125.71.99 code.google.com 74.125.71.99 encrypted.google.com 74.125.71.99 suggestqueries.google.com 74.125.71.99 mail.google.com 74.125.71.99 groups.google.com 74.125.71.99 groups.google.com.hk 74.125.71.99 docs.google.com 74.125.71.99 docs0.google.com 74.125.71.99 docs1.google.com 74.125.71.99 spreadsheets.google.com 74.125.71.99 spreadsheets0.google.com 74.125.71.99 webcache.googleusercontent.com 74.125.71.99 sites.google.com 74.125.71.99 talkgadget.google.com 74.125.71.99 clients1.google.com 74.125.71.99 clients2.google.com 74.125.71.99 clients3.google.com 74.125.71.99 clients4.google.com 整个开发有些事情较做只可意会,不可言传,当然纯属的代码并不是最大的效益,需要文档的可以找我,工程部署不了的可以联系我。 email:lcyangmi@163.com MSN:yummy@chinaclick.com.cn
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值