首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python如何使用osgeo.ogr.Geometry对象计算多边形周长

Python如何使用osgeo.ogr.Geometry对象计算多边形周长
EN

Stack Overflow用户
提问于 2012-11-22 16:59:57
回答 3查看 5.3K关注 0票数 4

首先,我很抱歉发布了这个简单的问题。我需要计算一定数量的化学属性(面积,周长,圆周率,长轴和小轴等)。我使用GDAL/OGR读取多边形的shapefile格式。我想问的是:

  1. 有使用osgeo.ogr.Geometry计算周长的方法吗?
  2. 是否有模块构建来计算多边形上的度量?

提前感谢

代码语言:javascript
复制
    import osgeo.gdal, ogr
    poly="C:\\\myshape.shp"
    shp = osgeo.ogr.Open(poly)
    layer = shp.GetLayer()
    # For every polygon
    for index in xrange(len(allFID)):
        feature = layer.GetFeature(index)
        # get "FID" (Feature ID)
        FID = str(feature.GetFID())
        geometry = feature.GetGeometryRef()
        # get the area
        Area = geometry.GetArea()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-27 16:32:08

代码语言:javascript
复制
poly = [(0,10),(10,10),(10,0),(0,0)]


def segments(poly):
        """A sequence of (x,y) numeric coordinates pairs """
        return zip(poly, poly[1:] + [poly[0]])

def area(poly):
    """A sequence of (x,y) numeric coordinates pairs """
    return 0.5 * abs(sum(x0*y1 - x1*y0
        for ((x0, y0), (x1, y1)) in segments(poly)))

def perimeter(poly):
    """A sequence of (x,y) numeric coordinates pairs """
    return abs(sum(math.hypot(x0-x1,y0-y1) for ((x0, y0), (x1, y1)) in segments(poly)))
票数 2
EN

Stack Overflow用户

发布于 2013-02-25 15:28:50

代码语言:javascript
复制
        ref_geometry = ref_feature.GetGeometryRef()
        pts = ref_geometry.GetGeometryRef(0)
        points = []
        for p in xrange(pts.GetPointCount()):
            points.append((pts.GetX(p), pts.GetY(p)))

def edges_index(points):
    """
    compute edges index for a given 2D point set

    1- The number of edges which form the polygon
    2- Perimeter
    3- The length of the longest edge in a polygon
    4- The length of the shortest edge in a polygon
    5- The average length of all of edges in a polygon
    6- The lengths of edges deviate from their mean value
    """
    Nedges = len(points)-1
    length = []
    for i in xrange(Nedges):
        ax, ay = points[i]
        bx, by = points[i+1]
        length.append(math.hypot(bx-ax, by-ay))
    edges_perimeter = numpy.sum(length)
    edges_max = numpy.amax(length)
    edges_min = numpy.amin(length)
    edges_average = numpy.average(length)
    edges_std = numpy.std(length)
    return (Nedges,edges_perimeter,edges_max,edges_min,edges_average,edges_std)
票数 3
EN

Stack Overflow用户

发布于 2013-09-13 16:15:09

我可能在这个问题上迟到了,但我正在寻找一个解决同样问题的方法,而我碰巧发现了这个问题。我通过简单地找到几何学的边界,然后求出边界的长度来解决这个问题。下面的Python代码示例:

代码语言:javascript
复制
perimeter = feat.GetGeometryRef().Boundary().Length()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13517211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档