我有一个gridcoverage2d和一个多点的集合,因此不会重叠的多边形。两者都覆盖了相同的地理区域,我想知道每个点所在的哪个多边形。因此,这是一个问题。
使用Geotools做到这一点的天真方法是在所有700000点上迭代,并要求每260次,如果它位于多边形中。这有效,但很慢。...
在Geotools中有更快的方法吗?
在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;
}
}
}
我会做这样的事情:
for each polygon:
get bounding box
for x in bbox.minx,bbox.maxx
for y in bbox.miny,bbox.maxy
if check ig point(x,y) is in polygon is True
note point in poly.
,但是如果您有实际点而不是网格,那会更快。