У меня есть GridCoverage2D и набор MultiPoints, поэтому полигоны не перекрываются. Оба покрывают одну и ту же географическую область, и я хочу знать, в каком многоугольнике находится каждая точка. Итак, это проблема точки в многоугольнике.
Наивный способ сделать это с помощью геоинструментов - перебрать все 700000 точек и запросить каждую 260 раз, если она лежит в многоугольнике. Это работает, но ужасно медленно ....
Есть ли более быстрый способ сделать это в геоинструментах?
Выполнение чего-то подобного в R (с использованием функции «over») занимает пару секунд, в то время как мой наивный вложенный цикл выполнялся часами. Так же 700000 раз 100 звонков "внутри"
while(pointFeatures.hasNext()) {
SimpleFeature pointFeature = pointFeatures.next();
Geometry defaultGeometryPoint = (Geometry) pointFeature.getDefaultGeometry();
PreparedGeometry prep = PreparedGeometryFactory.prepare( defaultGeometryPoint );
SimpleFeatureIterator polygonFeatures = collection.features();
while(polygonFeatures.hasNext()) {
SimpleFeature polygonFeature = polygonFeatures.next();
Geometry polygonFeatureDefaultGeometry = (Geometry) polygonFeature.getDefaultGeometry();
if(prep.within(polygonFeatureDefaultGeometry)) {
System.out.println("polygonFeature = " + polygonFeature);
break;
}
}
}