python之如何使用Shapely提取内部多边形坐标

lori 阅读:37 2024-02-27 23:08:18 评论:0

我是 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) 

请您参考如下方法:

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

因此,查看几何结构的结构,exterior 是一个 LinearRing 对象,而 interiors 是零个或多个 LinearRing 对象的列表。任何 LinearRing 对象都有 coords ,您可以将其切片以查看 coords[:] 的坐标列表。

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

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) 


标签:Python
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号