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类给定一个字段,这个字段显示用户到商家之间的距离。查询出列表之后使用流遍历,将两个坐标之间的距离赋值给这个变量,最小的变量距离最近,最后根据变量升序返回。(如果不是很严谨的数据,这里可以忽略掉线程安全。)




不和别人一样,不复制只真正理解
原文地址:https://www.cnblogs.com/Vinlen/p/12746011.html