Python 从OpenStreetMap数据创建形状多边形/多多边形

Python 从OpenStreetMap数据创建形状多边形/多多边形,python,gis,shapely,Python,Gis,Shapely,我正在尝试使用OpenStreetMap数据制作一个分析GPX文件的工具,用于识别位置。我已成功地从GPX文件中提取所有航路点,并创建为多点对象,并使用立交桥包装器提取OpenStreetMap边界关系(边界数据)。问题是将500多个对象的关系转化为多边形或多多边形。我已经成功地将边界的所有部分创建为LineString对象,并且所有圆形部分(LinearRings)都成功地创建为多边形对象。问题是连接所有非圆形对象 newLines = [] for line in lines

我正在尝试使用OpenStreetMap数据制作一个分析GPX文件的工具,用于识别位置。我已成功地从GPX文件中提取所有航路点,并创建为多点对象,并使用立交桥包装器提取OpenStreetMap边界关系(边界数据)。问题是将500多个对象的关系转化为多边形或多多边形。我已经成功地将边界的所有部分创建为LineString对象,并且所有圆形部分(LinearRings)都成功地创建为多边形对象。问题是连接所有非圆形对象

    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

出了什么问题?

linemerge没有执行此操作。使用
polygons.append(line.buffer(meter2deg(1.0)))
cascade\u union(polygons)
将每个路径段转换为多边形成功。

linemerge没有完成此工作。使用
polygons.append(line.buffer(meter2deg(1.0)))
cascade\u union(polygons)
将每个路径段转换为多边形是可行的。

如果您想直接从osm文件转换为shapely数据,可以提供帮助。它是一个用于读取osm文件的库,并具有用于从区域创建WKB(众所周知的二进制)格式对象的帮助器类,然后可以将这些对象加载到shapely中

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)
如果您想直接从osm文件转换到shapely数据,可以提供帮助。它是一个用于读取osm文件的库,并具有用于从区域创建WKB(众所周知的二进制)格式对象的帮助器类,然后可以将这些对象加载到shapely中

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合并外部边界,linemerge没有合并线,并且在不引发异常的情况下结束了任务,当我跳过这一点并使用buffer()创建每个路径段的多边形时,我能够用级联的U联合连接所有多边形化的路径段,然后删除内部孔。问题已由我自己解决。异常的追溯是什么?问题中没有捕获/记录这一点。我正在努力用linemerge合并外部边界,linemerge没有合并线,并且在不引发异常的情况下结束了任务,当我跳过这一点并使用buffer()创建每个路径段的多边形时,我能够用级联的U联合连接所有多边形化的路径段,然后删除内部孔。问题是我自己解决的。