GISにおけるポリゴン交差(インターセクション)とは
ポリゴン交差は、GISジオプロセシングの交差ワークフローにおける中心的なベクターオーバーレイ操作です。2つのポリゴンレイヤーから、両方の入力に共通する部分だけを含む新しいジオメトリを生成します。2つのゾーニング地区、氾濫原と地番レイヤー、あるいは2つのサービスエリア境界など、重なり合うポリゴンをオンラインで見つけたい場面ではどこでも、この操作が答えになります。このツールはすべての計算をブラウザ内でローカルに実行します。地図上で直接2つの図形を描画するか、GeoJSONファイルやZIP化されたShapefileをアップロードするだけで、データをどこにも送信しない独立したGeoJSON KMLオーバーラップツールとして機能します。
複数レイヤーの管理
サイドバーのレイヤーマネージャーは、追加したすべてのポリゴンレイヤーと、生成したすべての交差結果を1つのリストにまとめて保持します。異なるレイヤーの組み合わせで何度でも交差処理を実行でき、すべての結果を同時に地図上に残すことができ、他のレイヤーに影響を与えることなく不要なレイヤーを削除できます。1つの基準レイヤーと複数の候補レイヤーとの重なりを順番に確認する際に便利です。
ポリゴンオーバーレイを支えるGISライブラリ
本格的なGISオーバーレイツールはすべて、計算幾何学エンジンのごく少数のいずれかの上に構築されています。プロフェッショナルなワークフローで2つのポリゴンの共通areaを抽出する際、どのエンジンが実際の計算を担っているかを知っておく価値があります。
- Turf.js / polygon-clipping: このツール自体のエンジンです。Turfの@turf/intersect関数は、Martinez–Ruedaスイープラインアルゴリズムを純粋なJavaScriptで実装したnpmパッケージpolygon-clippingを利用しています。純粋なJavaScriptであるため、サーバーとの往復なしにブラウザタブ内で完全に実行されます。
- GEOS(Geometry Engine, Open Source): PostGISのST_Intersectionを計算し、QGISのProcessing ToolboxのネイティブなIntersectionアルゴリズムを支えるC/C++ライブラリです。QGIS側でベクターレイヤーの交差を実行したことがあれば、その裏側の幾何計算を行っていたのはGEOSです。
- JTS(Java Topology Suite): GEOSの移植元となったオリジナルのJava実装です。JTSはGeoToolsやGeoServer WPSのIntersectionプロセスを支えており、他の多くのライブラリが検証対象とするリファレンス実装でもあります。
- Shapely: GEOSにバインドされたPythonのジオメトリライブラリです。geopandasで空間オーバーラップ分析を行うデータサイエンティストは、一段下では、QGISやPostGISと同じGEOSルーチンを呼び出していることになります。
- shpjs: 幾何計算ではなくファイル側を担当します。アップロードされたZIP化Shapefile(.shp/.dbf/.shx)をクライアント側だけでGeoJSONにデコードし、これによりこのツールはサーバーへのアップロードなしにShapefile交差エクスポートを入力として受け付けられます。
これら5つのツールはすべて同じブール型オーバーレイ問題を解いているため、根底にある数学的手法は一致しています。実務上の違いは計算がどこで行われるかにあります。GEOS/JTS/Shapelyはサーバーやデスクトップ版GISのインストール環境上で動作しますが、このツールのTurf.jsベースのエンジンは、地図上のポリゴン重なり検索ツールとしてお使いの端末上で直接動作します。そのため、リモートサーバーへのファイルアップロードは一切必要ありません。
レイヤーのスタイルを設定する
交差結果を含め、すべてのレイヤーは個別にスタイルを変更できます。
- カラーピッカー: サイドバーの任意のレイヤーの色見本をクリックすると、塗りつぶしと輪郭の色を即座に変更できます。
- 表示/非表示の切り替え: レイヤーのチェックを外すと、削除せずに地図上で非表示にできます。Layer AとLayer Bをそれぞれ単独で交差結果と比較したいときに便利です。
- レイヤーへズーム: レイヤーの横にあるターゲットアイコンをクリックすると、地図表示をそのレイヤーの範囲に合わせます。
これらのスタイル設定はセッションの外部には一切保存されません。作業中の地図の見た目を制御するだけです。
よくある質問
結果をエクスポートする
各レイヤーは個別にエクスポートできるほか、まとめてエクスポートすることもできます。
- 単一レイヤーのエクスポート: 任意のレイヤーの横にあるダウンロードアイコンで、そのレイヤーの地物だけを単独の.geojsonファイルとしてエクスポートします。
- すべてをエクスポート: 「Download All Layers」ボタンは、Layer A、Layer B、そしてすべての交差結果を1つのGeoJSON FeatureCollectionにまとめ、各地物にどのレイヤー由来かのタグを付けます。
- GeoJSON形式: 出力ファイルはRFC 7946準拠の標準GeoJSONであり、QGIS、ArcGIS、Google Earth、Mapbox、その他ほぼすべてのGISツールで直接開くことができます。
出力は単純なGeoJSONであるため、後でこのツールに再度読み込むことも、デスクトップGISソフトウェアで実行するShapefile交差エクスポートのワークフローに取り込むこともスムーズに行えます。
ポリゴンレイヤーの追加方法
交差処理を実行する前に、ポリゴンをツールに取り込む方法は2通りあります。
- 地図上に描画する: 「Draw Polygon」をクリックし、地図をクリックして頂点を配置してから、ダブルクリック、Enterキー、または「Finish」のクリックで図形を閉じます。2つ目のポリゴンを追加するには繰り返してください。
- ファイルをアップロードする: .geojsonファイル、または(.shp/.dbf/.shxを含む).zip化されたShapefileを地図上のどこにでもドラッグ&ドロップするか、アップロードボタンを使用してください。読み込まれるのはPolygonとMultiPolygonの地物のみで、点と線はスキップされます。
ポリゴンレイヤーが2つ以上そろったら、サイドバーで一方をLayer A、もう一方をLayer Bとして選び、「Find Intersection」をクリックして共有面積を計算します。
実際のユースケース
ステップバイステップ:ポリゴンの重なりを見つける





交差アルゴリズムの仕組み
内部的には、ポリゴン交差は2つの閉じたリングに対するブール集合演算です。出力にはポリゴンAの内側「かつ」ポリゴンBの内側にあるすべての点だけが残り、それ以外はすべて破棄されます。2つの凸形状であればこれは単純に聞こえますが、実際の行政境界、流域の輪郭、地番はほとんど常に凹形であり、しばしば穴(ホール)を含みます。そのため、本格的なトポロジー・オーバーラップ・チェックGISツールには、単純な凸ポリゴンだけでなく、任意のポリゴン形状を正しく処理できるアルゴリズムが必要です。
初期のクリッピングアルゴリズムはこれを確実に行うことができませんでした。Sutherland–Hodgman法(1974年)はクリップ側のポリゴンが凸である場合にのみ正しい結果を生成するため、実際の地図データのほとんどが対象外になります。Weiler–Atherton法(1977年)は両方のポリゴンの境界をたどり、各交点で切り替えることでこれを改善し、凹形状や複数の出力片を正しく処理できますが、共有エッジや自己接触するリングといった特定の縮退ケースでは苦戦します。Vattiのアルゴリズム(1992年)は、水平方向のスキャンラインに沿ったアクティブエッジテーブルを用いてクリッピングをさらに一般化し、Angus JohnsonのClipperなど広く使われるクリッピングライブラリの基礎となりました。
このツールが使用するスイープライン方式
- イベントキューを構築する: 両方のポリゴンのすべての頂点とエッジの端点をキューに集め、X座標に基づいて左から右へ並べ替えます。
- 垂直線でスイープする: 仮想の線がキューを左から右へ走査し、そのX位置でポリゴンAとポリゴンBのどのエッジが現在アクティブかを状態構造で追跡します。
- エッジの交差を検出する: AのエッジがBのエッジと交差するたびに、スイープは正確な交点を計算し、その位置で両方のエッジを分割します。これが空間オーバーラップ分析の数学的な核心部分です。
- 各セグメントを分類する: 巻き数規則(ワインディングルール)を使い、生成された各エッジセグメントを、もう一方のポリゴンの内側か外側かでラベル付けし、AとBの両方の内側にあるセグメントだけを残します。
- 出力リングを再構築する: 残されたセグメントを閉じたリングへと再接続し、複数の分離した重なり領域や穴を1回のパスで正しく処理します。
このツールのエンジンは、Martinez–Rueda方式のブール・スイープラインアルゴリズムを実装しており、入力頂点数n、交差数kに対しておおよそO((n + k) log n)で動作し、単純なクリッパーでは失敗しがちな縮退ケース(共有エッジ、接触する頂点、自己交差するリング)に対しても堅牢です。すべてのペアで完全なスイープを実行する前に、このツールは安価なバウンディングボックスの事前チェックも行うため、数十の地物にわたるGISジオプロセシング交差処理で、明らかに重なり得ないペアのテストに時間を浪費しません。
関連するジオプロセシングツール
Map tiles © OpenStreetMap contributors and CARTO, Esri (satellite). Intersection math powered by Turf.js. Shapefile parsing by shpjs. Map rendering by Leaflet. All drawing, file reading and intersection calculation is local — no data is uploaded to any server.
