【问题标题】:Group Polygons after splitting MultiPolygon with LineString用 LineString 拆分 MultiPolygon 后对多边形进行分组
【发布时间】:2020-05-19 10:00:23
【问题描述】:

我希望通过 LineString 拆分 MultiPolygon(代表有岛屿的国家),从而将县一分为二。

from shapely.ops import split
collection_of_polyogns = split(country,line)

此结果是 GeometryCollection 对象中的一组多边形。您如何将结果分组为两个 MultiPolygon 对象,每个对象都包含各自一半的多边形?

更新

问题: Determine the "left" and "right" side of a split shapely geometry 提供了一个很好的解决方案,其中从结果中的每个多边形中获取一个点,以查看它在与分割线串组合时是否形成顺时针或逆时针线串。但是我正在考虑为每个多边形使用质心,因为它保证不在分割线上。

【问题讨论】:

标签: python polygon shapely


【解决方案1】:

所以首先你有你的国家多多边形,然后是你的分割多边形:

from shapely.ops import split
from shapely.geometry import Point, LineString, Polygon, MultiPolygon
#Somewhere you get your country and your line vars
collection_of_polygons = split(country,line)

然后你将你的国家的原始边界制作一个多边形 MutliPolygon,并用线执行相同的分割:

bounds = country.bounds
p1 = Point(bounds[0],bounds[-1])
p2 = Point(bounds[0],bounds[1])
p3 = Point(bounds[-2],bounds[1])
p4 = Point(bounds[-2],bounds[-1])

point_list = [p1, p2, p3, p4, p1]
bounds_poly = Polygon(point_list)

boundaries = shapely.ops.split(bounds_poly,line)

制作两个列表,并遍历分割的国家多边形以检查它们是否在边界分割多边形的第一个多边形内:

group1, group2 = [],[]
for x in collection_of_polygons:
    if x.within(boundaries[0]):
        group1.append(x)
    else:
        group2.append(x)

最后给两个列表分配两个不同的MultiPolygon:

group_multi1 = MultiPolygon(group1)
group_multi2 = MultiPolygon(group2)

【讨论】:

  • 我只有一个国家。它在 MultiPolygon 中,因为它有一些岛屿。
  • 您能否解释一下为什么在这种情况下只有一个国家是个问题?
猜你喜欢
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 2016-09-27
  • 1970-01-01
  • 2014-07-12
  • 2020-11-21
  • 2012-09-06
相关资源
最近更新 更多