同一坐标系下 地图任意两点间 基于经纬度计算距离 java代码实现
public class MapUtil {
public static final double EARTH_RADIUS = 6378.137;
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 两点间的距离
* @param loc1
* @param loc2
* @return 返回距离值 精确到米
*/
public static double distance(LngLat loc1, LngLat loc2) {
double radLat1 = rad(loc1.getLatitude().doubleValue());
double radLat2 = rad(loc2.getLatitude().doubleValue());
double a = radLat1 - radLat2;
double b = rad(loc1.getLongitude().doubleValue()) - rad(loc2.getLongitude().doubleValue());
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)));
return Math.round(s * EARTH_RADIUS * 10000d) / 10d;
}
}
public class LngLat {
private BigDecimal longitude;
private BigDecimal latitude;
public static LngLat from(Number lng, Number lat) {
return lng instanceof BigDecimal && lat instanceof BigDecimal ? new LngLat((BigDecimal) lng, (BigDecimal) lat) : new LngLat(BigDecimal.valueOf(lng.doubleValue()), BigDecimal.valueOf(lat.doubleValue()));
}
public String toString() {
return this.toString(6, 4);
}
public String toString(int scale, int mode) {
return this.longitude.setScale(scale, mode).toString() + "," + this.latitude.setScale(scale, mode).toString();
}
public BigDecimal getLongitude() {
return this.longitude;
}
public BigDecimal getLatitude() {
return this.latitude;
}
public LngLat(BigDecimal longitude, BigDecimal latitude) {
this.longitude = longitude;
this.latitude = latitude;
}
}
本文介绍了一段Java代码,用于在地图同一坐标系下计算任意两点间的距离,基于经纬度的公式实现,适合地理信息系统开发者参考。
6069

被折叠的 条评论
为什么被折叠?



