计算多边形围栏的面积

 /**
     * 计算多边形围栏的面积
     *
     * @param text 纬度 经度"39.919577748075305 116.39659531354242,39.914043815990176 116.39659531354242,39.914043815990176 116.40459978593587"
     * @return 面积 单位/平方米
     * <p>
     * 经纬度系数由计算距离的方法换算出来的,目的为了使经纬度的长度统一
     * 经度系数85382.48398929447
     * 纬度系数111319.49079327372
     * <p>
     * 多边形面积采用鞋带式或鞋带算法(也称为高斯的面积公式和测量员的式)是一种数学算法,
     * 以确定区域一个的简单多边形,其顶点由它们的描述笛卡尔坐标中的平面。用户交叉倍增相应的坐标,找到包含多边形的区域,
     * 并从周围的多边形中减去它,以找到其中的多边形区域。它被称为鞋带配方,因为构成多边形的坐标不断交叉倍增,就像绑鞋带一样
     */
    private double calculateArea(String text) {
        String[] points = text.split(",");
        int size = points.length;
        double area0 = 0;
        double area1 = 0;
        for (int i = 0; i < size; i++) {
            String[] point = points[i].split(" ");
            String[] point0 = points[0].split(" ");
            double x = Double.parseDouble(point[0]) * 111319.49079327372D;
            double y = i + 1 < size ? Double.parseDouble(points[i + 1].split(" ")[1]) * 85382.48398929447D : Double.parseDouble(point0[1]) * 85382.48398929447D;
            area0 += x * y;

            double lat = Double.parseDouble(point[1]) * 85382.48398929447D;
            double lon = i + 1 < size ? Double.parseDouble(points[i + 1].split(" ")[0]) * 111319.49079327372D : Double.parseDouble(point0[0]) * 111319.49079327372D;
            area1 += lat * lon;
        }
        return Math.round(Math.abs(0.5 * (area0 - area1)));
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值