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




    不和别人一样,不复制只真正理解
  • 相关阅读:
    java处理高并发高负载类网站的优化方法
    谈谈Memcached与Redis
    php中const与define的使用区别 详解
    ecshop添加模板与库文件
    ECShop 2.5.1 的结构图及各文件相应功能介绍
    Uva10972(RevolC FaeLoN)
    交叉染色法判断二分图
    边双联通问题求解(构造边双连通图)POJ3352(Road Construction)
    POI1999(仓库管理员)
    ZOJ1311(Network)
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12746011.html
Copyright © 2011-2022 走看看