研究了一下Google Map上的根据经纬度求地球表面两点间距离的实现, 用java实现了一把,对我国境内的Beijing54, Xian80,WGS84三种坐标系的空间距离计算感觉这个实现是比较准确的。当然,这里只是个人的感觉而已。。。可能我还没有遇到那种对精度要求非常严格的地方,或许,本身我这个方式就是错误的。。。呵呵。。。这里只是作个记号先。。。各位达人多多指教
/**标签:java,经纬度,double,param,源码,lng1,lat1,lng2,Math From: https://blog.51cto.com/u_15955464/6041292
*
* <p>
* Title: GeoUtils.java
* </p>
* <p>
* Http: iaiai.iteye.com
* </p>
* <p>
* Create time: 2012-5-4 下午1:49:34
* </p>
*
* @author 丸子
* @version 0.0.1
*/
public class GeoUtils {
public enum GaussSphere {
Beijing54, // Krassovsky(北京54 采用)
Xian80, // IAG 75(西安80 采用)
WGS84, // WGS 84
}
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 计算经纬度之间的距离
*
* @param lat1
* @param lng1
* @param lat2
* @param lng2
* @return
*/
public static double getDistance(double lng1, double lat1, double lng2, double lat2, GaussSphere gs) {
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 * (gs == GaussSphere.WGS84 ? 6378137.0 : (gs == GaussSphere.Xian80 ? 6378140.0 : 6378245.0));
s = Math.round(s * 10000) / 10000;
return s;
}
/**
* 计算经纬度之间的距离
*
* @param lat1
* @param lng1
* @param lat2
* @param lng2
* @return
*/
public static double getDistance(double lng1, double lat1, double lng2, double lat2) {
return getDistance(lng1,lat1,lng2,lat2,GaussSphere.WGS84);
}
}