mysql
点1(lon1,lat1) 点2(lon2,lat2) (经度,纬度)
SELECT
ROUND(
6378.138 * 2 * ASIN(
SQRT(
POW(
SIN(
(
lat1 * PI() / 180 - lat2 * PI() / 180
) / 2
),
2
) + COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180) * POW(
SIN(
(
lon1 * PI() / 180 - lon2 * PI() / 180
) / 2
),
2
)
)
) * 1000
) AS distance
java
1、依赖
org.gavaghan
geodesy
1.1.3
2、工具类
package com.dy.utils;
import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GeodeticCurve;
import org.gavaghan.geodesy.GlobalCoordinates;
/**
* @program: xiudo-ota
* @description: 经纬度计算工具类
* @author: zhang yi
* @create: 2020-10-22 14:37
*/
public class LonLatUtil {
/**
* 创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离
* @param gpsFrom 当前位置
* @param gpsTo 目标位置
* @param ellipsoid 坐标系
* @return
*/
public static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo,
Ellipsoid ellipsoid){
GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo);
return geoCurve.getEllipsoidalDistance();
}
}
3、使用
public static void main(String[] args) {
GlobalCoordinates source = new GlobalCoordinates(30.299766, 108.03805);
GlobalCoordinates target = new GlobalCoordinates(29.465956, 107.169763);
double meter1 = LonLatUtil.getDistanceMeter(source, target, Ellipsoid.Sphere);
double meter2 = LonLatUtil.getDistanceMeter(source, target, Ellipsoid.WGS84);
System.out.println("Sphere坐标系计算结果:"+meter1 + "米");
System.out.println("WGS84坐标系计算结果:"+meter2 + "米");
}