在日常的開發中,可能會遇到這種需求:從數據庫裏查出商家店鋪的位置後,需要根據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);
}
}
看下輸出的結果:
可以看到已經輸出兩者之間的距離了,單位是米。
算出距離後,可能會要求按照不同的方式進行排序,比如按照距離、評分、訂單數排序,也比較簡單,可以參考我另一篇博客: