【问题标题】:How to extract interior polygon coordinates using Shapely?如何使用 Shapely 提取内部多边形坐标?
【发布时间】:2014-03-16 11:00:09
【问题描述】:

我是 Shapely 的新手(但对它充满热情),最近我发现了一些障碍。

我有一个多边形 shapefile,我正在通过 Fiona 读取它。这个 shapefile 包含多边形和多多边形项目,我需要为其中所有坐标的每个特征(即外部和/或内部)构建一个数组。值得注意的是,其中两个多边形项目具有内环(并且它们是有效的)。

访问多边形/多多边形的外部坐标似乎没有问题......但我没有为内部坐标拉任何东西。

我是否需要在这里采用新方法(即 LinearRings)...?

def convert_polygons(inFile):

    for polys in fiona.open(inFile):
        myShape = shape(polys['geometry'])
        exterior_poly = 0
        interior_poly = 0
        if isinstance(myShape, Polygon):
            print "yes, I am a polygon"
            # count how many points for each interior polygon
            try:
                interior_poly += len(myShape.interior.coords)
            except:
                pass
            # count how many points for each exterior polygon
            exterior_poly += len(myShape.exterior.coords)
            geomArray = asarray(myShape.exterior)
            print geomArray
            print "number of interior points in polygon " + str(interior_poly)
            print "number of exterior points in polygon " + str(exterior_poly)
        elif isinstance(myShape, MultiPolygon):
            print "yes, I am a MultiPolygon"
            # count how many points for each interior polygon
            try:
                interior_poly += len(myShape.interior.coords)
            except:
                pass
            try:
                # count how many points for each exterior polygon
                exterior_poly += len(myShape.exterior.coords)
            except:
                pass
            try:
                geomArray = asarray(myShape.interior)
            except:
                pass
            try:
                geomArray = asarray(myShape.exterior)
            except:
                pass
            print geomArray
            print "number of interior points in polygon " + str(interior_poly)
            print "number of exterior points in polygon " + str(exterior_poly)

【问题讨论】:

    标签: python graph gis shapely fiona


    【解决方案1】:

    内环和外环的结构不同。对于任何多边形,总是有 1 个外环和零个或多个内环。

    所以看看几何的结构,exterior 是一个LinearRing 对象,interiors 是一个列表 零个或多个LinearRing 对象。任何LinearRing 对象都会有coords,您可以使用coords[:] 对其进行切片以查看坐标列表。

    以下是一个返回外部和内部坐标列表字典的函数:

    def extract_poly_coords(geom):
        if geom.type == 'Polygon':
            exterior_coords = geom.exterior.coords[:]
            interior_coords = []
            for interior in geom.interiors:
                interior_coords += interior.coords[:]
        elif geom.type == 'MultiPolygon':
            exterior_coords = []
            interior_coords = []
            for part in geom:
                epc = extract_poly_coords(part)  # Recursive call
                exterior_coords += epc['exterior_coords']
                interior_coords += epc['interior_coords']
        else:
            raise ValueError('Unhandled geometry type: ' + repr(geom.type))
        return {'exterior_coords': exterior_coords,
                'interior_coords': interior_coords}
    

    例如:

    extract_poly_coords(myShape)
    

    【讨论】:

    • 好的...好吧,我通过了那个块...但是我不能从 .coords 列表中删除坐标(即项目)?我不断得到:>>TypeError:'CoordinateSequence'对象不支持在>> for i in sorted(removeList,reverse = True)上删除项目:del ring.coords [i]
    猜你喜欢
    • 2022-01-22
    • 2013-12-26
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 2015-08-22
    相关资源
    最近更新 更多