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()
方法实现。如果您对关于此功能的完整初始讨论感兴趣,您可以找到它
基本思想(如上面的第一个链接所示)是检查从测试点开始的直线在每个方向上穿过多边形边界的次数。如果该点位于多边形内,您将获得奇数个交叉,如果该点位于多边形外,您将获得偶数个交叉。太棒了,很高兴它有帮助!太棒了,很高兴它有帮助!