[英]Creating Shapely Polygon/MultiPolygon from OpenStreetMap data
我正在嘗試制作一個使用OpenStreetMap數據分析GPX文件以識別位置的工具。 我已經成功地從GPX文件中提取了所有航路點並創建為MultiPoint對象,並使用立交包裝器提取了OpenStreetMap邊界關系(邊界數據)。 問題是要處理與500多個對象的關系,並將它們轉換為“多邊形”或“多多邊形”。 我已經成功地將邊框的所有部分創建為LineString對象,並且所有圓形的部分(LinearRings)都成功地制成了Polygon對象。 問題是連接所有非圓形對象。
newLines = []
for line in lines:
if isinstance(line, MultiLineString):
newLines.extend(line)
else:
newLines.append(line)
try:
polygons.append(Polygon(linemerge(newLines)))
logger.debug("Created Polygon from sum of lines")
except:
try:
polygons.append(MultiPolygon(linemerge(newLines)))
logger.debug("Created MultiPolygon from sum of lines")
except:
logger.debug("Failed to create Polygon from sum of lines")
raise
...從日志文件中,未引發任何異常
2016/03/17 21:43:59: gpxupload.py DEBUG - Failed to create Polygon from sum of lines
怎么了?
如果您想直接從osm文件轉換為整齊的數據,pyosmium可以提供幫助。 它是一個讀取osm文件的庫,並且具有幫助程序類,可以從區域創建WKB(眾所周知的二進制)格式的對象,然后可以將其加載到整形文件中。
import osmium
import shapely.wkb
wkbfab = osmium.geom.WKBFactory()
class WayMerger(osmium.SimpleHandler):
def area(self, a):
wkbshape = wkbfab.create_multipolygon(a)
shapely_obj = shapely.wkb.loads(wkbshape, hex=True)
linemerge沒有完成這項工作。 使用polygons.append(line.buffer(meter2deg(1.0)))
將每個路段轉換為多邊形, polygons.append(line.buffer(meter2deg(1.0)))
cascade_union(polygons)
起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.