OnlineMapMaker logo

対称差ツール:GeoJSON・Shapefile対応

2つのポリゴンレイヤーを描画またはアップロードし、互いに重ならない部分だけを残します。 全画面で開く ↗

Rate this tool:
広告
広告
Loading map…
GISプロジェクトでお困りですか?サービスを見る

GISにおける対称差(Symmetric Difference)とは

対称差(XOR、排他的論理和とも呼ばれます)は、2つのポリゴンレイヤーのうち重ならない部分だけを残し、共有部分は完全に取り除くベクターオーバーレイ処理です。古いゾーニング境界線と新しい境界線を比べたい場合や、2つのカバレッジエリアを比較したい場合など、2つの境界の間で何が変わったかを知りたいときに、このツールが答えを出してくれます。このツールは計算をすべてブラウザ内でローカルに実行します。地図上に直接2つの図形を描くか、GeoJSONファイルまたはZIP圧縮されたShapefileをアップロードすれば、データをどこにも送信することなく、独立したGeoJSON・Shapefile対応の対称差ツールとして動作します。地図自体は初期状態でベースマップなしで読み込まれるため、ツールは軽快に起動します。レイヤーの下に道路や衛星写真の背景が欲しい場合のみ、サイドバーからベースマップをオンにしてください。

レイヤーのスタイルを設定する

結果を含むすべてのレイヤーは個別にスタイルを変更でき、ベースマップ自体も完全に任意です。

  • カラーピッカー: サイドバーの任意のレイヤーの横にある色見本をクリックすると、塗りつぶしと輪郭の色をその場で変更できます。
  • 表示切り替え: レイヤーのチェックを外すと、削除せずに地図上で非表示にできます。レイヤーAとレイヤーBをそれぞれ単独で結果と比較したいときに便利です。
  • ベースマップ切り替え: 地図はツールを軽快に保ち、図形に集中できるよう、初期状態ではベースマップなしで読み込まれます。サイドバーの「ベースマップを表示」をいつでもチェックすれば、レイヤーの下に道路または衛星写真のベースマップを追加でき、同じくらい簡単にオフにできます。

これらのスタイル設定はセッション外には一切保存されず、作業中の地図の見た目を制御するだけです。

複数のレイヤーを管理する

サイドバーのレイヤーマネージャーは、追加したすべてのポリゴンレイヤーと、生成したすべての対称差の結果を1つのリストにまとめて保持します。異なるレイヤーの組み合わせでツールを何度も実行し、すべての結果を同時に地図上に残しておくことができ、不要になったレイヤーは他に影響を与えずに削除できます。複数の候補境界がそれぞれ1つの基準レイヤーからどう異なるかを順番に確認する際に便利です。

対称差を支えるGISライブラリ

対称差は非常に一般的な処理であるため、ほとんどのGISソフトウェアが単一の名前付きツールとして提供していますが、その内部は多くの場合、このページで説明した和集合と差分の基本演算から構築されています。

  • Turf.js(difference + union): このツール自体のエンジンです。Turf.jsには単一のsymmetricDifference関数はないため、このツールは@turf/differenceを2回、複数フィーチャーのレイヤーをディゾルブするために@turf/unionを呼び出しており、すべて純粋なJavaScriptとしてブラウザのタブ内で直接実行されます。
  • PostGIS ST_SymDifference: PostgreSQLの空間拡張機能は、ST_SymDifferenceを単一のSQL関数として提供しており、ST_IntersectionやST_Differenceを計算するのと同じC++エンジンであるGEOSライブラリに支えられています。
  • QGIS 対称差: QGISのプロセシングツールボックスには、ベクターオーバーレイの下に専用の「対称差」アルゴリズムがあり、これもインターフェースの裏側でGEOSを呼び出しています。
  • ArcGIS 対称差: EsriのArcGIS Proには、2つのレイヤーを入力してXORを得るという同じ動作をするSymmetrical Differenceジオプロセシングツールがありますが、GEOSではなくEsri独自のジオメトリエンジンで実装されています。
  • Shapely(symmetric_difference): PythonのShapelyライブラリは、そのジオメトリオブジェクトに直接.symmetric_difference()メソッドを公開しており、Shapelyのほぼすべての機能と同様、内部ではGEOSに処理を委譲しています。

対称差には特定のジオメトリのペアに対して正しい答えが一つしかないため、これら5つのツールはすべて同じ基礎数学に基づいています。実際の違いは、このサイトの他のオーバーレイツールと同様、計算がどこで実行されるかにあります。GEOSベースのツールはPostgreSQL、QGIS、またはPython環境のインストールを必要としますが、このツールのTurf.jsエンジンは、ポリゴンXORファインダーとしてお使いの端末上で直接動作するため、ファイルがどこにもアップロードされることはありません。

よくある質問

GeoJSONやShapefileをアップロードできますか、それとも描画だけですか?
どちらも可能です。地図上に直接描画するか、.geojsonファイルをドロップするか、ZIP圧縮されたShapefile(.shp、.dbf、.shxを含む.zip)をドロップできます。レイヤーAとレイヤーBには、これら3つの入力方法を組み合わせて使うこともできます。
通常の差分(消去)とはどう違いますか?
通常の差分は一方向です。レイヤーBをレイヤーAから差し引き、Aの残った部分だけを保持します。対称差は双方向で、Aの排他的な部分とBの排他的な部分の両方を保持するため、片側だけでなく両側で何が変わったかを確認できます。
1つのレイヤーに複数のポリゴンがある場合でも使えますか?
はい。レイヤーに複数のフィーチャーがある場合、まずブール和集合によって1つの形状に統合されるため、対称差は2つのレイヤーをフィーチャーごとではなく全体として比較して計算されます。
2つのポリゴンの重ならない部分はどうやって見つけますか?
2つのポリゴンレイヤーを描画またはアップロードし、このツールでレイヤーAとレイヤーBとして選択して、「対称差を計算」をクリックしてください。重なっている領域は完全に取り除かれ、結果には重ならない2つの部分だけが残ります。
なぜ地図はベースマップなしで開始し、どうすればオンにできますか?
ツールがすばやく開き、ポリゴンに集中できるよう、地図は初期状態では道路や衛星写真のタイルなしで読み込まれます。地理的な文脈が必要になったら、サイドバーの「ベースマップを表示」のチェックボックスをオンにし、オンになったら道路または衛星写真を選んでください。
対称差を計算するアルゴリズムは何で、精度は正確ですか?
このツールは、Martinez-Rueda方式のスイープラインによるブール差分アルゴリズムを、AマイナスBとBマイナスAの2回実行します。これは、このサイトのポリゴン差分ツールおよびポリゴン交差ツールで使われているのと同じエンジンです。凹型ポリゴンや穴のあるポリゴンも正しく処理します。
対称差機能が組み込まれているGISソフトウェアには何がありますか?
PostGISにはSQL関数としてST_SymDifferenceがあり、QGISのプロセシングツールボックスには「対称差」アルゴリズムがあり、ArcGIS ProにはSymmetrical Differenceジオプロセシングツールがあり、PythonのShapelyには.symmetric_difference()メソッドがあります。いずれもこのツールと同じ結果を計算します。
GISにおける対称差とは何ですか?
対称差は、2つのポリゴンレイヤーのうちどちらか一方だけに属する領域を残し、両方に属する領域は残さないベクターオーバーレイ処理です。A ⊕ B = (A ∪ B) − (A ∩ B) と表され、どちらかの形状に含まれるすべてから、両方が共有する部分を引いたものです。
自分のデータはどこかにアップロードされますか?
いいえ。描画、ファイルの読み込み、ディゾルブ処理、2回の差分計算、最終的な面積計算は、すべてブラウザ内でJavaScriptによりローカルに実行されます。サーバーには何も送信されません。
このツールは重なっている領域も表示しますか、それとも重ならない部分だけですか?
重ならない部分だけです。共有する重なり領域は意図的に取り除かれます。それが対称差の目的そのものです。重なり領域自体が必要な場合は、このサイトのポリゴン交差ツールがちょうどそれを計算します。
広告
広告

結果をエクスポートする

各レイヤーは個別にエクスポートすることも、まとめてすべてエクスポートすることもできます。

  • 単一レイヤーのエクスポート: 任意のレイヤーの横にあるダウンロードアイコンをクリックすると、そのレイヤーのフィーチャーだけを独立した.geojsonファイルとしてエクスポートします。
  • すべてをエクスポート: 「全レイヤーをダウンロード」ボタンは、レイヤーA、レイヤーB、対称差の結果を1つのGeoJSON FeatureCollectionにまとめ、各フィーチャーにどのレイヤー由来かのタグを付けます。
  • GeoJSON形式: 出力ファイルはRFC 7946準拠の標準GeoJSONで、QGIS、ArcGIS、Google Earth、Mapboxなど、ほぼすべてのGISツールで直接開くことができます。

出力は純粋なGeoJSONであるため、後でこの同じツールに問題なく再インポートしたり、デスクトップGISソフトウェアで実行する他のGeoJSON・Shapefileワークフローに取り込んだりできます。

ステップバイステップ:対称差を求める

ベースマップが読み込まれていない、レイヤー追加前の対称差ツールの空の地図。描画、アップロード、サンプルポリゴンの各ボタンが表示されている
1
ステップ 1: ツールを開いて最初のレイヤーを追加する
空のツールはベースマップなしで開始します。ポリゴンを描画するか、ファイルをアップロードするか、サンプルポリゴンをクリックしてください。
ベースマップのないシンプルな背景の上に重なった2つのサンプルポリゴンレイヤーが表示され、サイドバーにレイヤー一覧が見えている
2
ステップ 2: 重なり合う2つ目のレイヤーを追加する
2つのレイヤーが読み込まれた状態で、まだベースマップはありません。レイヤーAとレイヤーBはすでに選択済みです。
レイヤーAとレイヤーBのドロップダウン選択と、対称差を計算ボタンを示すサイドバーのクローズアップ
3
ステップ 3: レイヤーAとレイヤーBを選ぶ
レイヤーAとレイヤーBを確認してから、対称差を計算をクリックしてオーバーレイを実行します。
地図上で2つの別々の強調表示された形状として計算された対称差が表示され、サイドバーに合計面積が示されている。ベースマップは現在オンになっている
4
ステップ 4: 重ならない部分の結果を確認する
結果:正確な重ならない領域と、その合計サイズです。ここでは文脈をつかむためにベースマップをオンにしています。
レイヤーA、レイヤーB、対称差レイヤーを一覧表示し、エクスポートとダウンロードの操作ができるレイヤーマネージャーパネル
5
ステップ 5: 結果レイヤーをエクスポートする
結果だけをエクスポートするか、3つのレイヤーすべてをまとめてGeoJSONとしてエクスポートできます。

ポリゴンレイヤーの追加方法

対称差を計算する前にポリゴンをツールに取り込む方法は2つあり、どちらもGeoJSONまたはZIP圧縮されたShapefileに対応しています。

  • 地図上に描画する: 「ポリゴンを描画」をクリックし、地図をクリックして頂点を配置し、ダブルクリック、Enterキー、または「完了」をクリックして図形を閉じます。2つ目のポリゴンを追加する場合はこれを繰り返します。
  • ファイルをアップロードする: .geojsonファイル、またはZIP圧縮されたShapefile(.shp/.dbf/.shxを含む.zip)を地図上のどこかにドラッグ&ドロップするか、アップロードボタンを使用します。読み込まれるのはPolygonとMultiPolygonのフィーチャーのみで、ポイントとラインはスキップされます。

ポリゴンレイヤーが2つ以上そろったら、サイドバーで一方をレイヤーA、もう一方をレイヤーBとして選び、「対称差を計算」をクリックすると、重ならない部分だけが残ります。

実際の活用例

🛰️
衛星画像による土地被覆変化の検出
ある年の土地分類ポリゴンレイヤーと後年の同じエリアを比較し、どの区画が分類変更されたかを、各ポリゴンを手作業で確認することなく正確に切り分けます。
📐
測量・登記境界の紛争調査
プロによる測量済みの敷地境界と登記上の境界を重ね合わせ、両者が食い違う正確な係争地の帯を切り分けます。
🗳️
選挙区の再編と境界見直し
現在の選挙区境界と提案された再編案を読み込み、どのエリアと、どの有権者が、選挙区間を移動することになるかを正確に確認します。
🗺️
ゾーニングと境界変更の検出
古いゾーニング境界をレイヤーA、新しく提案された境界をレイヤーBとして読み込むことで、2つの地図を目視で比較する代わりに、どのエリアが追加され、どのエリアが削除されたかを1つの結合結果として正確に確認できます。
🌊
洪水ハザードマップの更新
FEMA方式などの古い洪水ゾーン境界と更新後の境界を比較し、どの物件が洪水リスクエリアに新たに含まれた、または除外されたかを正確に強調表示します。
📡
通信キャリアのカバレッジ比較
2つの通信キャリアのカバレッジポリゴンを比較し、一方のネットワークだけがカバーしていて他方はカバーしていないエリアを切り分けます。これは競合カバレッジ分析で最も重要になる部分です。
広告
広告

対称差アルゴリズムの仕組み

対称差には単純な集合論的な定義があります。ポリゴンAまたはポリゴンBのどちらかに属するが、両方には属さないすべての点です。数式で書くと、A ⊕ B = (A ∪ B) − (A ∩ B)、つまり2つの形状の和集合から共通部分を引いたものです。同じ演算を書く、実際にはより確実に計算しやすい、もう一つの同値な方法があります。A ⊕ B = (A − B) ∪ (B − A)、つまりBを取り除いたAの部分と、Aを取り除いたBの部分を組み合わせたものです。このツールは後者の方式を使用します。

この選択が重要な理由は、先に完全な和集合を計算してから共通部分を引くと、2つの別々のブール演算オーバーレイを連続して実行することになり、最初の演算での丸め誤差が2番目の演算に伝播してしまうためです。代わりに、AマイナスBとBマイナスAという2つの独立した差分演算を実行し、両方の結果を単に同じ出力レイヤーに配置する方式では、共有の中間ジオメトリがまったく不要になり、それぞれの半分が互いに影響を与えることなく独立して失敗できます。実際のデータセットに不正な形のリングが1つあっても、このツールは成功した方の半分をどちらかわかるようにラベル付けして返します。

このツールが実行するパイプライン

  1. 各入力レイヤーをディゾルブする: レイヤーに複数のフィーチャーがある場合、まずブール和集合によってその中のすべてのポリゴンを1つのジオメトリに統合し、レイヤーが個別のパーツのリストではなく1つの形状として扱われるようにします。
  2. AマイナスBを計算する: ディゾルブされたレイヤーAのジオメトリとレイヤーBのジオメトリを、このサイトのポリゴン差分ツールと同じスイープライン方式のブール差分アルゴリズムに渡し、Bの外側にあるAの部分だけを残します。
  3. BマイナスAを計算する: 同じアルゴリズムをレイヤーを入れ替えてもう一度実行し、Aの外側にあるBの部分だけを残します。
  4. 両方の結果にタグを付けて結合する: 残った各部分はプロパティ内で「Aのみ」または「Bのみ」とラベル付けされ、1つの出力レイヤーにまとめられるため、結果は常に2つの入力がどこで異なるかを正確に示します。
  5. 排他的な面積を合計する: 出力される各フィーチャーの面積は球面積の公式で合計され、ヘクタール、平方キロメートル、エーカーで表示されるため、形状に加えて数値も得られます。

2回の差分計算はそれぞれ、Martinez-Rueda方式のスイープラインによるブールクリッピングアルゴリズムです。すべてのエッジの端点を左から右へソートし、垂直な線でデータを走査しながら、ワインディングルールを使って生成された各セグメントがもう一方のポリゴンの内側か外側かを分類します。これは、このサイトのポリゴン交差ツールおよびポリゴン差分ツールで使われているのとまったく同じエンジン、まったく同じ数学です。対称差には新しいクリッピングアルゴリズムは必要なく、既存のものをオペランドを入れ替えて2回呼び出すだけで済みます。

広告
広告

関連するジオプロセシングツール

地図タイル © OpenStreetMap の貢献者、Protomapsで描画(ホスティング:KONAKTIVE)、予備としてCARTO。 衛星画像:Esri。 ジオメトリの計算:Turf.js。 シェープファイルの読み込み:shpjs。 地図の描画:Leaflet。 計算はすべてブラウザーの中で行われ、入力した内容がサーバーに保存されることはありません。

Muhammad Gulraiz Khan、GIS専門家、KONAKTIVEおよびOnlineMapMaker.comの創業者

著者について

Muhammad Gulraiz Khan

GIS専門家・コンサルタント、KONAKTIVE創業者

Muhammad Gulraiz Khanは、エネルギー分野向けに地理空間ソリューションを提供してきた10年以上のプロフェッショナル経験を持つGIS専門家です。世界銀行、国際金融公社(IFC)、USAIDのプロジェクトにも携わってきました。彼はプロフェッショナル品質の地図作成ツールを誰もが無料で利用できるようにするため、OnlineMapMaker.comを立ち上げました。

広告
広告