3

メンバーリストの皆様

まず、この質問を以前の投稿から修正および改善して投稿することをお詫びします。最近、基本的な輪郭の特徴を計算するために、シェープファイルのポリゴンに取り組んでいます:

  1. 領域、
  2. 周囲、
  3. 面積凸包、
  4. 外周凸包、
  5. 長軸の長さ = 長軸の長さを与える、
  6. 短軸の長さ = 短軸の長さを与える、

長軸と短軸の長さは、図に従って計算されます。

ここに画像の説明を入力

osgeo.gdal、ogr、およびshapelyを使用すると、すべてのインデックスを読み込んで計算できますが、長軸と短軸の長さは計算できません。オンラインソリューションを読むことができます

  1. scikit-image = 領域のプロパティを測定する
  2. OpenCV

コードを簡単かつエレガントにするための簡単なソリューションを探しています。一部のブログでは、長軸と短軸の長さを取得するために、ポリゴンに楕円近似を作成することを提案しています。それは最善の解決策ですか?

どんな参考文献も非常に役に立ちます。前もって感謝します


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
4

1 に答える 1