Java實現傳入經緯度計算兩點之間距離

在日常的開發中,可能會遇到這種需求:從數據庫裏查出商家店鋪的位置後,需要根據APP端傳來用戶的位置經緯度來計算每個店鋪距離用戶當前位置的距離。

後臺用Java實現起來很簡單

1、導入依賴的jar

<!--計算距離依賴的jar-->
<dependency>
	<groupId>org.gavaghan</groupId>
	<artifactId>geodesy</artifactId>
	<version>1.1.3</version>
</dependency>

2、寫一個簡單的工具類

import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GeodeticCurve;
import org.gavaghan.geodesy.GlobalCoordinates;

/**
 * 計算經緯度直線距離
 * @author: caoju
 */
public class DistanceUtil {

    public static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid) {
        //創建GeodeticCalculator,調用計算方法,傳入座標系、經緯度用於計算距離
        GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo);
        return geoCurve.getEllipsoidalDistance();
    }

}

3、傳入經緯度進行測試

import com.cj.test.mytestproject.utils.DistanceUtil;
import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GlobalCoordinates;

public class MeterTest {

    public static void main(String[] args) {
        //用戶當前座標
        GlobalCoordinates userSource = new GlobalCoordinates(39.939557, 116.409515);
        //店鋪位置座標
        GlobalCoordinates businessTarget = new GlobalCoordinates(39.939668, 116.393058);
        double meterDouble = DistanceUtil.getDistanceMeter(userSource, businessTarget, Ellipsoid.Sphere);
        int meter = (int) meterDouble;
        System.out.println(meter);
    }

}

看下輸出的結果:

可以看到已經輸出兩者之間的距離了,單位是米。

算出距離後,可能會要求按照不同的方式進行排序,比如按照距離、評分、訂單數排序,也比較簡單,可以參考我另一篇博客:

Java代碼實現按照距離、評分、訂單數排序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章