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、依賴
<dependency>
<groupId>org.gavaghan</groupId>
<artifactId>geodesy</artifactId>
<version>1.1.3</version>
</dependency>
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 + "米");
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/204799.html
標籤:AI
上一篇:面試官:你手寫過堵塞佇列嗎?
