首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有可能“简化”MultiPolygon吗?

有可能“简化”MultiPolygon吗?
EN

Stack Overflow用户
提问于 2018-03-07 21:37:52
回答 1查看 1.3K关注 0票数 0

请参阅以下示例代码:

代码语言:javascript
复制
#!/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自动生效?

我发现了什么

代码语言:javascript
复制
simplify(self, tolerance, preserve_topology=True)
 |      Returns a simplified geometry produced by the Douglas-Peucker
 |      algorithm

这不管用。我想要得到与contains完全相同的结果。只是没有重叠的多边形。

EN

回答 1

Stack Overflow用户

发布于 2018-03-07 21:59:43

一个简单可行的解决方案是:

代码语言:javascript
复制
def is_point_in_multipolygon(point, multi):
    for polygon in multi:
        if polygon.contains(point):
            return True
    return False

它不是很好,因为它可能比必要的计算密集度更高,但对于大多数情况来说,这并不重要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49153299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档