java地图距离计算:java如何实现地图两点之间的距离计算
出处:互联网  更新时间:2022-04-24
距离计算方法工具类:
import java.math.BigDecimal;
 
/**
 * @author lovelyhedong
 * @date 2020年8月21日 22:49:53
 */
public class LngLatUtils {
    // 赤道半径
    private static final double EARTH_RADIUS = 6378137;
 
    /**
     * 根据经纬度获取两点的距离(单位米)
     */
    public static Double getDistance(double lng1, double lat1, double lng2, double lat2) {
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;
        double b = rad(lng1) - rad(lng2);
        double s = 2 * Math.asin(Math.sqrt(
                Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
        s = s * EARTH_RADIUS;
        return s;
    }
 
    private static double rad(double d) {
        return d * Math.PI / 180.0;
    }
    /**
     * 根据经纬度获取两点的距离(单位米)
     */
    public static Double getDistance(BigDecimal lng1, BigDecimal lat1, BigDecimal lng2, BigDecimal lat2) {
        return getDistance(lng1.doubleValue(), lat1.doubleValue(), lng2.doubleValue(), lat2.doubleValue());
    }
 
    /**
     * 根据经纬度获取两点的距离(单位公里/千米)
     */
    public static Double getKilometer(double lng1, double lat1, double lng2, double lat2) {
        return Math.round(getDistance(lng1, lat1, lng2, lat2)) / 1000d;
    }
 
    /**
     * 根据经纬度获取两点的距离(单位公里/千米)
     */
    public static Double getKilometer(BigDecimal lng1, BigDecimal lat1, BigDecimal lng2, BigDecimal lat2) {
        return Math.round(getDistance(lng1.doubleValue(), lat1.doubleValue(), lng2.doubleValue(), lat2.doubleValue())) / 1000d;
    }
 
}

导入依赖包计算方式:

import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GlobalCoordinates;
 
/**
 * 需要的依赖
 * <dependency>
 *   <groupId>org.gavaghan</groupId>
 *   <artifactId>geodesy</artifactId>
 *   <version>1.1.3</version>
 * </dependency>
 */
public class MapTest {
 
    public static void main(String[] args) {
        //相差25米 大约等于0.024公里
        Double fristLng = 104.02436160776520;//第一个经度
        Double fristLat = 30.75109533912993;//第一个纬度
        Double secoundLng = 104.02270936701203;//第二个经度
        Double secoundLat = 30.75073113557945;//第二个纬度
        System.out.println(Math.round(getDistance(fristLng,
                fristLat,
                secoundLng,
                secoundLat)) / 1000d);//这里除以1000,换算成了公里,如果不除以1000就是米数
    }
 
    public static double getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
        return new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
    }
}

原文链接:https://blog.csdn.net/MiaodXindng/article/details/108160926
网站申明:系本文编辑转载,来源于网络,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,所有权归属原作者。如内容、图片有任何版权问题,可联系我们删除
正在被浏览的文章
物流案例  互联网  2024-01-24
物流知识  互联网  2024-01-24
IT编程技术  互联网  2022-04-24
热点文章
物流问答  互联网  2017-01-08
物流问答  互联网  2017-01-08
更多精彩文章点此进入
长按下图选择“设别图中二维码”关注公众号
微信公众号