同一坐标系下 地图任意两点间 基于经纬度计算距离 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; } }