PythonでのGIS多角形処理:面積、重心、内接点の判定をShapelyで実装

PythonでのGIS多角形処理:面積、重心、内接点の判定をShapelyで実装 GISでよく使う数学
PythonでのGIS多角形処理:面積、重心、内接点の判定をShapelyで実装

PythonでのGIS多角形処理:面積、重心、内接点の判定をShapelyで実装

このチュートリアルでは、PythonのGIS関連ライブラリであるShapelyを使用して、多角形の面積、重心、および内接点の判定を行う方法について解説します。

Shapelyとは?

Shapelyは、Pythonで地理空間の幾何学的操作を行うための強力なライブラリです。多角形、点、線、そしてその間の関係を扱う機能を提供します。

使用するライブラリのインストール

pip install shapely

サンプルコード:面積と重心の計算

まず、多角形の面積と重心を計算する基本的なコードを示します。


from shapely.geometry import Polygon

# 多角形の座標点 (x, y)
points = [(1, 0), (4, 0), (4, 3), (1, 3)]

# Polygonオブジェクトを作成
polygon = Polygon(points)

# 面積を計算
area = polygon.area

# 重心(センテロイド)を計算
centroid = polygon.centroid

# 結果の表示
print(f"多角形の面積: {area}")
print(f"多角形の重心: ({centroid.x}, {centroid.y})")
    

内接点と境界点の判定

次に、指定した点が多角形の内部にあるか、または境界にあるかを確認します。


from shapely.geometry import Point

# 内接する点を作成
inside_point = Point(2, 1)

# 点が多角形の内部にあるかどうかを確認
is_inside = polygon.contains(inside_point)

# 境界にあるかどうかを確認
is_on_boundary = polygon.touches(inside_point)

print(f"内接点 (2, 1) が内部にあるか: {is_inside}")
print(f"内接点 (2, 1) が境界にあるか: {is_on_boundary}")
    

凸包の計算

Shapelyを使用して、与えられた多角形の凸包(外接する最小の凸形状)を計算することも可能です。


# 多角形の凸包を計算
convex_hull = polygon.convex_hull

# 凸包の座標を表示
print(f"多角形の凸包の座標: {list(convex_hull.exterior.coords)}")
    

まとめ

  • Shapelyを使うと、PythonでGISに関する多くの幾何学的な操作を簡単に行うことができます。
  • このチュートリアルでは、面積、重心の計算、点の内接/境界判定、そして凸包の計算を行いました。
  • さらに、Shapelyは他の多くの幾何学操作(例えば、図形の交差判定など)をサポートしています。

これらの手法を活用して、より高度なGIS分析や空間データの処理が可能になります。

🆕【2025年6月追記】
本記事で紹介した多角形処理のスクリプトは、その後、GitHubにてパッケージ化して公開しました。CSV形式の座標データを用いた自動解析やバッチ処理の仕組みなど、より実践的な運用に対応した内容となっています。

詳しくは以下の記事をご覧ください👇
👉 Pythonで多角形解析!GitHubで公開したスクリプトパッケージのご紹介

コメント

タイトルとURLをコピーしました