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で公開したスクリプトパッケージのご紹介


コメント