判断某个坐标是否在一组坐标构建的多边形范围内

文章讲述了使用射线法检查点在多边形内的方法,涉及经纬度比较及代码实现。
摘要由CSDN通过智能技术生成

判断给定的GPS坐标点(point)是否在一个给定的多边形(polygon)内。
步骤可以分为以下几个部分:

1. 首先,我们定义一个布尔类型的变量 isInside ,让其初始值为 false,这个变量用于存储结果,表示点是否在多边形内。
2. 然后通过一个循环来遍历多边形的每条边。对于多边形中的每一条边,都看这条边是否与点和正无穷远点的连线相交,我们创建两个变量 i 和 j,一个表示当前顶点,一个表示顶点的上一个顶点。
3. 在循环中,首先检查当前顶点和上一个顶点的纬度是否在给定点的纬度的两侧(也就是给定点是否在这条边的水平方向的投影范围内)。
4. 如果符合上述条件,然后检查给定点的经度是否在这条边在同一纬度下的投影点的左边,这通过计算相对于当前边在同一纬度下的投影点的经度进行判断。
5. 如果上述两个条件都满足,则说明点和正无穷远点的连线与当前边交点,此时,更新 isInside 的值。
6. 循环结束后, isInside 的值即为结果,true 表示点在多边形内,false 表示点不在多边形内。

根据射线法的原理,如果点在多边形内,射线会和多边形交点为奇数次,如果点在多边形外,射线会和多边形交点为偶数次(或 0次)。所以通过这种方式可以准确地判断点是否在多边形内。

代码部分:

 public boolean isPointInsidePolygon(Gps point, Gps[] polygon) {
        int polygonLength = polygon.length;
        boolean isInside = false;

        for (int i = 0, j = polygonLength - 1; i < polygonLength; j = i++) {
            if ((polygon[i].getLat() > point.getLat()) != (polygon[j].getLat() > point.getLat()) &&
                    point.getLon() < (polygon[j].getLon() - polygon[i].getLon()) * (point.getLat() - polygon[i].getLat()) / (polygon[j].getLat() - polygon[i].getLat()) + polygon[i].getLon()) {
                isInside = !isInside;
            }
        }

        return isInside;
    }

Gps类:

public class Gps {

    private double lon;

    private double lat;

    public Gps(double lon, double lat) {
        this.setLon(lon);
        this.setLat(lat);
    }
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

儿时可乖了

混口饭吃,大佬们,赏点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值