elasticsearch,Algorithm,elasticsearch" /> elasticsearch,Algorithm,elasticsearch" />

Algorithm 弹性搜索滤波算法

Algorithm 弹性搜索滤波算法,algorithm,elasticsearch,Algorithm,elasticsearch,通过弹性搜索GeoPolygonFilter源代码,我遇到了pointInPolygon方法。我真的不明白这个算法为什么有效,或者它是如何工作的。这如何确定给定(纬度、经度)对位于点定义的多边形内 private static boolean pointInPolygon(Point[] points, double lat, double lon) { int i; int j = points.length - 1; boolean inPoly = false;

通过弹性搜索
GeoPolygonFilter
源代码,我遇到了
pointInPolygon
方法。我真的不明白这个算法为什么有效,或者它是如何工作的。这如何确定给定(纬度、经度)对位于点定义的多边形内

private static boolean pointInPolygon(Point[] points, double lat, double lon) {
    int i;
    int j = points.length - 1;
    boolean inPoly = false;

    for (i = 0; i < points.length; i++) {
        if (points[i].lon < lon && points[j].lon >= lon
                || points[j].lon < lon && points[i].lon >= lon) {
            if (points[i].lat + (lon - points[i].lon) /
                    (points[j].lon - points[i].lon) * (points[j].lat - points[i].lat) < lat) {
                inPoly = !inPoly;
            }
        }
        j = i;
    }
    return inPoly;
}
私有静态布尔点多边形(点[]点,双lat,双lon){
int i;
int j=点。长度-1;
布尔inPoly=false;
对于(i=0;i=lon
||点[j].lon=lon){
if(点[i].lat+(lon-点[i].lon)/
(点[j].lon-点[i].lon)*(点[j].lat-点[i].lat)
方法实现了。如果您对关于此功能的完整初始讨论感兴趣,您可以找到它

基本思想(如上面的第一个链接所示)是检查从测试点开始的直线在每个方向上穿过多边形边界的次数。如果该点位于多边形内部,则会得到奇数个交叉,如果该点位于多边形外部,则会得到偶数个交叉。

使用
pointInPolygon()
方法实现。如果您对关于此功能的完整初始讨论感兴趣,您可以找到它


基本思想(如上面的第一个链接所示)是检查从测试点开始的直线在每个方向上穿过多边形边界的次数。如果该点位于多边形内,您将获得奇数个交叉,如果该点位于多边形外,您将获得偶数个交叉。

太棒了,很高兴它有帮助!太棒了,很高兴它有帮助!