oma*_*mat 5 python gis polygon geos multilinestring
我正在开发一个GeoDjango应用程序,用户可以在其中上传地图文件并执行一些基本的映射操作,例如查询多边形内的要素。
我认识到用户有时会上传“ MultiLineString”而不是“ Polygon”。这会导致期望封闭几何的查询失败。
在Python中将MultiLineString对象转换为Polygon的最佳方法是什么?
谢谢。
-oMat
呵呵,起初我是这样写的:
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
Run Code Online (Sandbox Code Playgroud)
但后来我发现有一个漂亮的小方法,名为「凸面船身」,可以自动为您进行多边形转换。
>>> 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)),)
Run Code Online (Sandbox Code Playgroud)