尊敬的会员名单,
首先,我很抱歉发布这个从以前的帖子修改和改进的问题。最近我正在研究 shapefiles 多边形以计算基本轮廓特征:
- 区域,
- 周长,
- 面积凸包,
- 周边凸包,
- 主轴长度 = 给出主轴的长度,
- 短轴长度 = 给出短轴的长度,
其中长轴和短轴长度是根据下图计算的:
使用 osgeo.gdal、ogr 和 shapely可以加载和计算所有索引,但不能加载和计算长轴和短轴长度。在线阅读解决方案可以使用
- scikit-image = 测量区域属性
- 开放式CV
我正在寻找一个简单的解决方案,以使我的代码简单而优雅。一些博客建议对我的多边形进行椭圆近似,以检索长轴和短轴长度。这是最好的解决方案吗?
任何参考资料都会很有帮助。提前致谢
import osgeo.gdal, ogr
from shapely.geometry import Polygon
shp = osgeo.ogr.Open('../examples/mypoly.shp')
layer = shp.GetLayer()
feature = layer.GetFeature(0)
geometry = feature.GetGeometryRef()
# get area
Area = geometry.GetArea()
pts = geometry.GetGeometryRef(0)
points = []
for p in range(pts.GetPointCount()):
points.append((pts.GetX(p), pts.GetY(p)))
polygon = Polygon(points)
# get Perimeter
Perimeter = polygon.length
# convex Hull
ConvexHull = polygon.convex_hull
# get Perimeter convex Hull
PerimeterConvexHull = ConvexHull.length
# get Area convex Hull
AreaConvexHull = ConvexHull.area
这些是我的多边形的坐标顶点
polygon = Polygon([(560023.4495758876400000 6362057.3904932579000000),(560023.4495758876400000 6362060.3904932579000000),(560024.4495758876400000 6362063.3904932579000000),(560026.9495758876400000 6362068.3904932579000000),(560028.4495758876400000 6362069.8904932579000000),(560034.9495758876400000 6362071.8904932579000000),(560036.4495758876400000 6362071.8904932579000000),(560037.4495758876400000 6362070.3904932579000000),(560037.4495758876400000 6362064.8904932579000000),(560036.4495758876400000 6362063.3904932579000000),(560034.9495758876400000 6362061.3904932579000000),(560026.9495758876400000 6362057.8904932579000000),(560025.4495758876400000 6362057.3904932579000000),(560023.4495758876400000 6362057.3904932579000000)])
为了从这里测试我的代码:
polygon = Polygon(points)
# get Perimeter
Perimeter = polygon.length
# convex Hull
ConvexHull = polygon.convex_hull
# get Perimeter convex Hull
PerimeterConvexHull = ConvexHull.length
# get Area convex Hull
AreaConvexHull = ConvexHull.area