Java中根據經緯度來判斷距離


 

谷歌有專門的Jar包,先導入包

 

<dependency>
   <groupId>com.google.guava</groupId>
   <artifactId>guava</artifactId>
   <version>22.0</version>
</dependency>

 


寫一個方法
public double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid) {

    //創建GeodeticCalculator,調用計算方法,傳入坐標系、經緯度用於計算距離
    GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo);

    return geoCurve.getEllipsoidalDistance();
}
可以看到參數是兩個經緯度和一個坐標系。
寫個方法實驗一下
   //此處可以傳入用戶經緯度

GlobalCoordinates source = new GlobalCoordinates(23.697775,112.991604);

//此處可以傳入另一個地址經緯度
GlobalCoordinates source2 = new GlobalCoordinates(23.758648,112.68745);
//調用方法算出距離

double meter1 = getDistanceMeter(source, source1, Ellipsoid.Sphere);

 


這里使用了Sphere的坐標系 比較出名的還有一個WGS84,坐標系不同距離可能有一點誤差。
最后返回的meter1就是兩個經緯度之間的距離了。
小建議:可以將Pojo類給定一個字段,這個字段顯示用戶到商家之間的距離。查詢出列表之后使用流遍歷,將兩個坐標之間的距離賦值給這個變量,最小的變量距離最近,最后根據變量升序返回。(如果不是很嚴謹的數據,這里可以忽略掉線程安全。)





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM