请参阅以下示例代码:
#!/usr/bin/env python
from shapely.geometry import MultiPolygon, Point
# (1) Is valid
hulls = [[(0, 0), (10, 0), (10, 10), (0, 10)],
[(10.000001, 5), (20, 5), (20, 10), (10.000001, 10)]] #
area = MultiPolygon([(hulls[0], []),
(hulls[1], [])])
print(area.is_valid)
print(area.contains(Point(5, 5)))
# (2) Crashes
hulls = [[(0, 0), (10, 0), (10, 10), (0, 10)],
[(5, 5), (20, 5), (20, 10), (5, 10)]]
area = MultiPolygon([(hulls[0], []),
(hulls[1], [])])
print(area.is_valid)
print(area.contains(Point(5, 5)))
(2)崩溃和(1)工作的原因是因为(1)中的多个多边形是完全排他的;它们根本不重叠。在(2)中,它们重叠。
我并不关心潜在的表现形式。在这种情况下,是否可以自动使MultiPolygon有效?
simplify(self, tolerance, preserve_topology=True)
| Returns a simplified geometry produced by the Douglas-Peucker
| algorithm
这不起作用。我希望得到完全相同的包含结果......只是没有重叠的多边形。
答案 0 :(得分:0)
一个简单的工作解决方案是:
def is_point_in_multipolygon(point, multi):
for polygon in multi:
if polygon.contains(point):
return True
return False
它不是那么好,因为它可能比必要的计算密集程度更高,但可能对大多数情况并不重要。