经纬度和高德地图计算两点距离面积

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wxz1179503422/article/details/82222464

关于经纬度,可以看huanhuan的博客根据两点经纬度计算距离
文章详细介绍了经纬度以及根据经纬度,计算两点直接的距离。
高德地图中,计算两点直线距离的公式如下:

//根据经纬度获取两点距离
  public static int calculateDistance(double x1, double y1, double x2, double y2) {
        final double NF_pi = 0.01745329251994329; // 弧度 PI/180
        x1 *= NF_pi;
        y1 *= NF_pi;
        x2 *= NF_pi;
        y2 *= NF_pi;
        double sinx1 = Math.sin(x1);
        double siny1 = Math.sin(y1);
        double cosx1 = Math.cos(x1);
        double cosy1 = Math.cos(y1);
        double sinx2 = Math.sin(x2);
        double siny2 = Math.sin(y2);
        double cosx2 = Math.cos(x2);
        double cosy2 = Math.cos(y2);
        double[] v1 = new double[3];
        v1[0] = cosy1 * cosx1 - cosy2 * cosx2;
        v1[1] = cosy1 * sinx1 - cosy2 * sinx2;
        v1[2] = siny1 - siny2;
        double dist = Math.sqrt(v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2]);

        return (int) (Math.asin(dist / 2) * 12742001.5798544);
    }

获取指定两点间固定距离的点

  //获取指定两点之间固定距离点
    public static LatLng getPointForDis(LatLng sPt, LatLng ePt, double dis) {
        double lSegLength = calculateDistance(sPt, ePt);
        double preResult = dis / lSegLength;
        return new LatLng((ePt.latitude - sPt.latitude) * preResult + sPt.latitude, (ePt.longitude - sPt.longitude) * preResult + sPt.longitude);
    }

计算两点之间的矩形面积

 public static float calculateArea(LatLng leftTop, LatLng rightBottom) {
        try {
            double var2 = Math.sin(leftTop.latitude * 3.141592653589793D / 180.0D) - Math.sin(rightBottom.latitude * 3.141592653589793D / 180.0D);
            double var4 = (rightBottom.longitude - leftTop.longitude) / 360.0D;
            if (var4 < 0.0D) {
                ++var4;
            }

            return (float) (2.5560394669790553E14D * var2 * var4);
        } catch (Throwable t) {
            t.printStackTrace();
            return 0.0F;
        }
    }

计算多点围成的面积

 public static float calculateArea(List<LatLng> points) {
        byte i3 = 3;
        if (points != null && points.size() >= i3) {
            double var2 = 0.0D;
            double var4 = 111319.49079327357D;
            int size = points.size();

            for(int i = 0; i < size; ++i) {
                LatLng var8 = points.get(i);
                LatLng var9 = points.get((i + 1) % size);
                double var10 = var8.longitude * var4 * Math.cos(var8.latitude * 0.017453292519943295D);
                double var12 = var8.latitude * var4;
                double var14 = var9.longitude * var4 * Math.cos(var9.latitude * 0.017453292519943295D);
                double var16 = var9.latitude * var4;
                var2 += var10 * var16 - var14 * var12;
            }

            return (float)Math.abs(var2 / 2.0D);
        } else {
            return 0.0F;
        }
    }

猜你喜欢

转载自blog.csdn.net/wxz1179503422/article/details/82222464