当前位置: 首页 > 知识库问答 >
问题:

使用LineString拆分多多边形后对多边形分组

屠昌胤
2023-03-14

我希望通过一条线串拆分一个多多边形(代表一个有岛屿的国家),从而将该县一分为二。

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

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

使现代化

问题:确定分裂形状几何的“左”和“右”侧提供了一个很好的解决方案,其中从结果中的每个多边形中提取一个点,看看当与分裂的LineString结合时,它是否形成顺时针或逆时针线串。但是我想为每个多边形使用形心,因为它保证不在分裂线上。

共有1个答案

周和安
2023-03-14

因此,首先要创建多多边形,然后拆分多边形:

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)

然后,将国家/地区的原始边界绘制为多边形,并使用直线执行相同的分割:

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)

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

group_multi1 = MultiPolygon(group1)
group_multi2 = MultiPolygon(group2)
 类似资料:
  • 我有一个“SpatialPolygons”对象,我想在@hole==FALSE处对多边形进行子集,并创建一个新对象。 使用下面的代码,一次可以预测得到1个多边形(如果@hole==TRUE,则没有),但我无法从对象中分割多个多边形。 我认为我的问题在于我不知道如何“一般”引用第二个列表,即从列表(Polygon)中获取项目,其中@孔==FALSE。将第二个[[]]留空不起作用。 附言:抱歉,没有可

  • 我正在寻找一种方法来创建一组多边形(rechtangles),沿着一条线在多个多边形中创建一组多边形(rechtangles),并将其水平隔开,如图所示。 我尝试生成点并将其用作多边形的中点,但问题是,通过创建等间距的点光栅,除了180度之外,不可能以任何其他方向旋转。 例子 给出了一个多多边形形状的对象和由宽度和高度以及每个多边形之间的垂直和水平间距定义的多边形。多边形应仅放置在多多边形内,且不

  • 返回顶点的输入数组,并且附有一些其他方法,如下面所描述 polygon.area() 返回此多边形的标定区域。如果顶点是逆时针顺序,面积为正,否则为负。 polygon.centroid() 返回一个表示此多边形的质心的两元素数组。 polygon.clip(subject) 对这个多边形剪切主题多边形。换句话说,返回一个多边形表示这个多边形和主题多边形的交集。假定剪切的多边形是逆时针方向以及凸多

  • 我有一个包含多边形的json,这些多边形表示一个国家中所有城市(总共78个)的分隔符。例如: 有没有什么方法可以用一个查询将所有城市的结果分组,或者我必须查询数据库78次才能获得每个城市的计数?

  • 问题内容: 我正在使用MongoDB开发地理空间网络应用程序。我在具有不同类别(,等)的集合上有很多多边形,我想知道哪个是某个多边形,但是在某些情况下,邻居的边界碰到了多边形的边界,所以当我查询十字路口,我有2个国家。 我想计算该州与两个国家之间的重叠百分比,以了解哪个是父级。我一直在寻找,但是我没有找到具有这种操作的任何库,并且我做这种算法不是很好。 编辑:添加更多上下文 这是我正在使用的模型

  • 基础示例 <vuep template="#example"></vuep> <script v-pre type="text/x-template" id="example"> <template> <div class="amap-page-container"> <el-amap vid="amap" :zoom="zoom" :amap-manager="ama