呵呵,一開始我寫了這個:
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)),)
這樣一個不知名的方法,節省了一天。謝謝。 如果MultiLineString具有多於1個LineString,則convex_hull將返回1包含它們的所有多邊形。如果你想讓每個LineString作爲一個單獨的Polygon,你仍然必須在MultiLineString中循環並將convex_hull應用到每個LineString。 – omat 2010-06-04 16:00:10
誠然,你從未提到過你想爲每一行分開一個多邊形。 :-) – drozzy 2010-06-04 19:27:27
多行的凸包可能不是您所需要的。凸包定義了包含形狀的最小多邊形,並且可能不如您所需要的那麼精確,因爲它不包括形狀邊界上「內部」的任何點。也就是說,如果你有一個從中取出塊的形狀,你可能看不到它的邊界有塊。 – ianmjones 2010-06-17 09:04:58