点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部

 点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部:

function isInPolygon(checkPoint, polygonPoints) {
    var counter = 0;
    var i;
    var xinters;
    var p1, p2;
    var pointCount = polygonPoints.length;
    p1 = polygonPoints[0];

    for (i = 1; i <= pointCount; i++) {
        p2 = polygonPoints[i % pointCount];
        if (
            checkPoint[0] > Math.min(p1[0], p2[0]) &&
            checkPoint[0] <= Math.max(p1[0], p2[0])
        ) {
            if (checkPoint[1] <= Math.max(p1[1], p2[1])) {
                if (p1[0] != p2[0]) {
                    xinters =
                        (checkPoint[0] - p1[0]) *
                            (p2[1] - p1[1]) /
                            (p2[0] - p1[0]) +
                        p1[1];
                    if (p1[1] == p2[1] || checkPoint[1] <= xinters) {
                        counter++;
                    }
                }
            }
        }
        p1 = p2;
    }
    if (counter % 2 == 0) {
        return false;
    } else {
        return true;
    }
}
测试:

先选取一个范围:http://geojson.io/#map=15/31.1422/121.6617
点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部_第1张图片

1. 选取一点再这个范围内进行测试:

点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部_第2张图片

测试再浏览器控制台加载方法和调用,验证这一点在范围中

点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部_第3张图片

点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部_第4张图片

2:测试某一点不在这个范围之内

点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部_第5张图片点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部_第6张图片

你可能感兴趣的:([38],geojson,[24],JavaScript)