谷歌有專門的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類給定一個字段,這個字段顯示用戶到商家之間的距離。查詢出列表之后使用流遍歷,將兩個坐標之間的距離賦值給這個變量,最小的變量距離最近,最后根據變量升序返回。(如果不是很嚴謹的數據,這里可以忽略掉線程安全。)