zoukankan      html  css  js  c++  java
  • 根据两点的经纬度坐标计算两个坐标点之间的直线距离

    贴代码如下:

    import java.awt.*;
    
    /**
     * @author xulin
     * @date create in 9:06 2018/11/1
     * Description 根据提供的两个国标经纬度,计算两个点之间的距离
     */
    public class DistanceConsider {
        // 地球半径
        private static double EARTH_RADIUS = 6378.137;
    
        private static double rad(double d) {
            return d * Math.PI / 180.0;
        }
    
        /**
         * @author xulin
         * date 9:09 2018/11/1
         * Description 计算距离
         * 参数传入:所在位置的坐标  目标位置的坐标
         * 一个参数的经纬之前要求使用","英文的逗号进行分隔
         * 返回: 输入的两个坐标点之间的距离  精确到小数点后两位
         */
        public static double getDistance(String location, String target) {
            int locationCount = location.indexOf(",");
            // 源地点的经度
            double lngLocation = Double.parseDouble(location.substring(0, locationCount));
            // 源地点的维度
            double latLocation = Double.parseDouble(location.substring(locationCount + 1, location.length()));
            int targetCount = target.indexOf(",");
            // 目标地点的经度
            double lngTarget = Double.parseDouble(target.substring(0, targetCount));
            // 目标地点的维度
            double latTarget = Double.parseDouble(target.substring(targetCount + 1, target.length()));
    
            double lat1 = rad(latLocation);
            double lat2 = rad(latTarget);
            double lat = lat1 - lat2;
            double lng = rad(lngLocation) - rad(lngTarget);
            double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(lat / 2), 2)
                    + Math.cos(lat1) * Math.cos(lat2)
                    * Math.pow(Math.sin(lng / 2), 2)));
            distance = distance * EARTH_RADIUS;
            distance = Math.round(distance * 10000d) / 10000d;
            distance = distance * 1000;
            return distance;
        }
    
        public static void main(String args[]) {
            String location = "116.368904, 39.923423";
            String target = "116.387271, 39.922501";
            System.out.println(getDistance(location, target));
        }
    }

    刚开始一直计算错误,是自己没有区分经纬度,地理是硬伤,谷歌的公式是对的,网上的大部分方法也是对的, 如果计算之后发现了较大的误差,记得查看经纬度是否计算反了,避免低级错误~~~~

  • 相关阅读:
    openfl使用64位的ndk时,编译报错的问题!
    Haxe是何物?
    jsp中如何判断el表达式中的BigDecimal==0
    如何在springmvc的请求过程中获得地址栏的请求
    【原创】【滑块验证码】
    【原创】【aes加密】
    【原创】【qrcodejs2】生成二维码
    【原创】【ueditor】监听内容
    【原创】【ueditor】内容过多时 菜单控件遮挡页面
    js杂谈
  • 原文地址:https://www.cnblogs.com/cswxl/p/9888642.html
Copyright © 2011-2022 走看看