python - 如何将 GEOS MultiLineString 转换为多边形?

标签 python gis polygon multilinestring geos

我正在开发一个 GeoDjango 应用程序,用户可以在其中上传 map 文件并执行一些基本的映射操作,例如查询多边形内的要素。

我发现用户有时会碰巧上传“MultiLineString”而不是“Polygon”。这会导致期望封闭几何的查询失败。

在 Python 中将 MultiLineString 对象转换为多边形的最佳方法是什么?

最佳答案

呵呵,一开始我是这样写的:

def close_geometry(self, geometry):
   if geometry.empty or geometry[0].empty:
       return geometry # empty

   if(geometry[-1][-1] == geometry[0][0]):
       return geometry  # already closed

   result = None
   for linestring in geom:
      if result is None:
          resultstring = linestring.clone()
      else:
          resultstring.extend(linestring.coords)

   geom = Polygon(resultstring)

   return geom

但后来我发现有一个名为 convex_hull 的漂亮小方法 自动为您进行多边形转换。

>>> s1 = LineString((0, 0), (1, 1), (1, 2), (0, 1))
>>> s1.convex_hull
<Polygon object at ...>
>>> s1.convex_hull.coords
(((0.0, 0.0), (0.0, 1.0), (1.0, 2.0), (1.0, 1.0), (0.0, 0.0)),)

>>> m1=MultiLineString(s1)
>>> m1.convex_hull
<Polygon object at...>
>>> m1.convex_hull.coords
(((0.0, 0.0), (0.0, 1.0), (1.0, 2.0), (1.0, 1.0), (0.0, 0.0)),)

关于python - 如何将 GEOS MultiLineString 转换为多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2964751/

相关文章:

javascript - 如何使用 Google-Maps-Api-3 绘制多个多边形?

Python/Django object.filter(pk__in=variable_list)

python - 使用 sympy 计算条件概率

python - 为什么 'matplotlib' 无法找到指定字体的某些字体粗细?

MySQL:提供给函数 st_geometryfromtext 的无效 GIS 数据

r - 如何让 spplot (lattice) 不在多边形周围绘制边框

Python3.7 rasterio库打不开jp2

python - 判断一个点是否在多边形内

python - 使用python opencv进行图像边界检测

r - 如何在 R 中用多边形剪辑 WorldMap?