Пройдя через эластичный поиск GeoPolygonFilter
Исходный код, я столкнулся с методом pointInPolygon
. Я не мог понять, почему работает алгоритм, или как он работает. Как это определяет, что данная (lat, lon) пара лежит внутри многоугольника, определенного точкой?эластичный поиск алгоритм GeoPolygonFilter
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;
}
Спасибо, что указал мне в сторону – Slain
Удивительный, рад, что это помогло! – Val