LRTKレフィクシア株式会社

GeoJSONをTurf.jsで解析する前に確認したい5項目

GeoJSONは、点、線、面などの地物情報と属性情報をJSONで表現する形式として、地図表示や位置情報処理の現場で広く使われています。座標値と属性情報をひとまとまりで扱えるため、区域判定、距離計算、交差判定、面積確認、範囲抽出など、実務で必要になる処理にもつなげやすい形式です。一方で、GeoJSONをTurf.jsで解析するときは、データを読み込めば常に正しい結果が得られるわけではありません。座標順序、座標参照、地物の形状、属性の持たせ方、処理対象の絞り込みなどを事前に確認しないと、見た目では問題がないデータでも解析結果がずれることがあります。

特に実務では、解析結果を面積集計、管理区域の判定、現地確認の優先順位づけ、報告資料の根拠に使う場面があります。そのため、処理前の確認を省くと、後工程で原因を探す時間が増えたり、現場で再確認が必要になったりします。この記事では、GeoJSONをTurf.jsで解析する前に確認したい5項目を、実務担当者が安全に作業を進めるための観点で整理します。

GeoJSONの座標順序と座標参照を確認する

GeoJSONをTurf.jsで解析する前に、最初に確認したいのが座標の並び順です。RFC 7946に準拠したGeoJSONでは、地理座標は経度、緯度の順で扱います。地図や測量、施設管理の資料では、緯度、経度の順で表記されることも多いため、元データを変換した段階で順序が入れ替わっていないかを確認する必要があります。座標順序の誤りは、表示位置が大きく外れるだけでなく、距離や面積、内外判定などの解析結果にも直接影響します。

たとえば、日本国内の位置を扱う場合、経度はおおむね120から150台、緯度は20から46前後の範囲に入ることが多くなります。これは厳密な判定基準ではありませんが、代表点の確認には有効な目安です。これが逆になっていると、数値としては一見成立していても、地物は想定外の場所に配置されます。処理画面に表示して初めて気づくこともありますが、解析だけを先に行う場合は見落としやすいポイントです。GeoJSONを受け取ったら、代表的な点をいくつか抜き出し、座標値の範囲が対象地域として自然かを確認しておくと安全です。

次に確認したいのが、座標参照の前提です。現在広く使われるGeoJSONでは、WGS 84の経度緯度を前提に扱うのが基本です。一方で、実務では平面直角座標系、施設管理用のローカル座標、CAD図面由来の座標などを変換してGeoJSON形式にしていることがあります。数値だけを見ると座標らしく見えても、単位が度なのかメートルなのかが混在していると、解析結果は意味を持たなくなります。

Turf.jsで距離や面積など地球上の位置を前提にした処理を行う場合、入力データがその前提に合っていることが重要です。特に、CAD系の図面や現場測量データをGeoJSON化した場合、元の座標がそのまま入っているケースがあります。この場合、画面上では地物の形状が保たれているように見えても、地理座標としての解析には向かないことがあります。地図上の位置を扱うのか、図面上の相対位置を扱うのかを分けて考える必要があります。

また、同じGeoJSONファイル内に複数の由来のデータが混在している場合も注意が必要です。現地取得データ、設計図由来データ、公開区域データ、手入力で補正したデータなどが一つにまとめられていると、座標の精度や前提が統一されていないことがあります。解析前には、どのデータがどの座標条件で作成されたかを確認し、必要であれば同じ基準に変換してから処理することが大切です。

座標の小数桁数も確認しておきたい項目です。桁数が極端に少ない場合、位置が丸められており、細かい境界判定や近接判定には適さないことがあります。反対に、小数桁が多くても、元データの精度が高いとは限りません。実務では、座標の桁数だけで精度を判断せず、取得方法や作成過程も合わせて見る必要があります。

GeoJSONを解析するときは、座標があることだけで安心せず、座標順序、座標参照、単位、変換履歴、精度の前提を確認することが重要です。ここを曖昧にしたまま処理を進めると、後から結果のずれに気づいても、原因がデータなのか処理方法なのか判断しにくくなります。解析前の座標確認は、作業全体の信頼性を支える最初のチェックです。

Point、LineString、Polygonなどの形状を整理する

GeoJSONでは、地物の形状をPoint、LineString、Polygonなどの種類で表します。Turf.jsで解析する前には、処理したい内容に対して、対象データの形状が合っているかを確認する必要があります。点として扱うべきデータ、線として扱うべきデータ、面として扱うべきデータが混在していると、同じ処理を一括でかけたときに期待どおりの結果にならないことがあります。

Pointは、施設位置、調査地点、看板、設備、撮影位置など、単一の場所を表すときに使われます。距離計算や近接検索、区域内に入っているかの判定ではよく使われます。ただし、点だけでは地物の大きさや範囲は表せません。たとえば、建物や敷地を代表点だけで管理している場合、その点が区域内に入っていても、建物全体が区域内に収まっているとは限りません。解析目的が代表位置の確認なのか、地物全体の確認なのかを区別する必要があります。

LineStringは、道路中心線、河川、管路、境界線、移動経路など、連続する線状の地物を表すときに使われます。長さの計算や交差確認、線に沿った距離の確認などに向いています。ただし、線は幅を持たないため、道路区域や管理幅を表すには不十分な場合があります。必要に応じて、線から一定範囲を持たせた面を作るなど、解析目的に合う形へ変換することを検討します。

Polygonは、敷地、行政区域、管理区域、危険区域、工区、調査範囲など、面として扱いたい地物に使われます。面積計算、点の内外判定、重なり確認、範囲抽出などで中心的に使われる形式です。一方で、Polygonは点や線よりも形状の整合性が結果に影響しやすい形式です。閉じていない外周、自己交差、穴の扱い、頂点の順序などが適切でないと、解析結果が不安定になることがあります。

また、GeoJSONには複数の点、線、面を一つの地物として表す形式もあります。たとえば、離れた複数の区域を一つの管理対象として扱う場合、一つの地物の中に複数の面が含まれることがあります。このようなデータは便利ですが、解析の種類によっては個別の面として処理したほうがわかりやすいこともあります。合計面積だけが必要なのか、区域ごとの判定が必要なのかによって、処理単位を決める必要があります。

実務でよく起きるのは、見た目は面のように見えるのに、データとしては線になっているケースです。境界線を閉じた形で描いていても、GeoJSON上ではPolygonではなくLineStringとして保存されていることがあります。この場合、面積計算や内外判定の対象にはなりません。表示上の見た目だけで判断せず、GeoJSONのtypeを確認し、処理に必要な形式になっているかを見ておくことが大切です。

逆に、点で十分な解析に対して、必要以上に細かいPolygonを使っているケースもあります。施設の存在確認や近接検索が目的であれば、代表点のほうが処理が軽く、結果も扱いやすい場合があります。すべてを詳細な面で持つことが正解ではなく、解析目的に対して必要な形状を選ぶことが大切です。

GeoJSONをTurf.jsで解析するときは、処理対象がFeatureなのかFeatureCollectionなのかも確認しておきます。一つの地物だけを処理するつもりなのか、複数の地物をまとめて処理するのかによって、前処理や繰り返し処理の設計が変わります。データ構造を曖昧にしたまま進めると、特定の地物だけ処理から漏れたり、想定外の形状が混ざってエラーになったりします。

形状確認は、単なる形式チェックではありません。何を点で見て、何を線で見て、何を面で判定するのかを決める作業です。この整理ができていると、距離計算、面積計算、重なり判定、内外判定などの解析が目的に合いやすくなります。GeoJSONを扱う実務では、解析前に形状の意味を確認することが、手戻りを減らす大きなポイントになります。

Polygonの閉じ方と自己交差を確認する

GeoJSONでPolygonを扱う場合、外周が正しく閉じているかを確認することが重要です。Polygonは、面を構成するために座標列を持ちますが、外周の最初の座標と最後の座標が一致している必要があります。これが一致していないと、面としての解釈が不安定になったり、解析処理でエラーになったりすることがあります。見た目では閉じているように見える図形でも、データ上では最後の一点がずれていることがあるため注意が必要です。

特に、図面や手作業で作成した境界データをGeoJSONに変換した場合、閉じた線を面として扱っているつもりでも、実際にはわずかに開いていることがあります。数値の丸め、頂点編集、変換時の処理などにより、始点と終点が完全に一致しないことがあるためです。面積計算や区域内判定を行う前には、代表的なPolygonだけでなく、すべてのPolygonについて閉じ方を確認しておくと安全です。

次に注意したいのが自己交差です。自己交差とは、Polygonの外周線が途中で交差してしまい、面の内外が判定しにくくなっている状態です。自己交差があるPolygonは、見た目としては何らかの形に見えても、面として正しく扱えない場合があります。面積が想定と異なる、内外判定が想定と違う、重なり判定が不安定になるなど、実務上の問題につながります。

自己交差は、複雑な区域を手作業で編集したときや、複数の区域を結合したときに起きやすくなります。細長い地物や入り組んだ境界では、頂点が多くなるため、編集時に線が交差しても気づきにくいことがあります。Turf.jsで解析する前に、Polygonとして成立しているか、不要な折り返しや交差がないかを確認することが大切です。

穴を持つPolygonにも注意が必要です。GeoJSONでは、Polygonの中に除外範囲を持たせることができます。たとえば、対象区域の中に管理対象外の範囲がある場合、外周と内側の穴を分けて表現します。このとき、外周と穴の関係が正しく表現されていないと、面積計算や内外判定に影響します。穴として扱うべき部分が別のPolygonになっていたり、逆に別区域として扱うべき部分が穴として入っていたりすると、結果の意味が変わります。

Polygonの頂点数も確認しておくと、後の処理が安定します。頂点が多すぎるPolygonは、表示や解析に時間がかかるだけでなく、細かすぎる形状が誤差や確認負荷の原因になることがあります。逆に、頂点を減らしすぎると、実際の境界とのずれが大きくなります。解析目的が広域の傾向把握なのか、境界付近の厳密な判定なのかによって、必要な細かさは変わります。

面積計算を行う場合は、対象のスケールも意識する必要があります。小さな区画の面積を扱うのか、広い区域の面積を扱うのかによって、座標の精度や形状の細かさに求められる水準が変わります。細かい現地管理に使う場合は、元データの作成方法や更新時期も確認し、解析結果だけを過信しないことが大切です。

境界付近の内外判定では、点がPolygonの境界線上にある場合の扱いも確認しておきます。Turf.jsの関数やオプション、後工程の仕様によって、境界上の点を内側に含めるかどうかの扱いが変わる場合があります。実務では、境界上の点を内側と見なすのか、別途確認対象とするのかで結果の解釈が変わります。処理上は内側と判定されても、運用上は現地確認が必要なケースもあります。GeoJSONの解析結果を管理判断に使う場合は、境界上や境界付近の扱いを事前に決めておくと、後から判断がぶれにくくなります。

Polygonは、GeoJSON解析の中でも特に注意が必要な形状です。閉じ方、自己交差、穴、頂点数、境界上の扱いを確認することで、Turf.jsによる解析結果の信頼性を高めやすくなります。面として見えていることと、面として正しく解析できることは同じではありません。解析前の形状確認は、地図データを実務で安心して使うための基本作業です。

propertiesの属性名と単位をそろえる

GeoJSONでは、geometryに座標や形状を持たせ、propertiesに属性情報を持たせるのが一般的です。Turf.jsで空間解析を行う場合、geometryだけに注目しがちですが、実務ではpropertiesの整理も同じくらい重要です。解析結果を集計したり、条件に応じて抽出したり、地物ごとに判定結果を返したりする場合、属性名や値の持たせ方がそろっていないと、後工程で混乱が起きます。

まず確認したいのは、属性名の統一です。同じ意味を持つ項目であっても、データ作成者や作成時期によって表記が異なることがあります。たとえば、区域名、地区名、管理番号、種別、更新日などが、別々の名前で保存されていることがあります。人が見れば同じ意味だと判断できても、処理では別の項目として扱われます。解析前に、使う属性名を決め、不要な揺れを減らしておくことが大切です。

次に、値の表記ゆれを確認します。同じカテゴリを表す値でも、全角と半角、漢字とかな、略称と正式名、空白の有無などが混在することがあります。条件抽出を行う場合、表記ゆれがあると一部の地物だけが抽出から漏れることがあります。GeoJSONの解析では、座標や形状の正しさだけでなく、属性値が機械的に判定できる状態かどうかも確認する必要があります。

単位の確認も重要です。propertiesに面積、延長、高さ、幅、距離、管理値などを持たせている場合、その単位が統一されていないと集計結果が意味を失います。あるデータではメートル、別のデータではキロメートル、また別のデータでは平方メートルとヘクタールが混在していると、単純に合計しただけでは正しい数値になりません。属性として数値を持つ場合は、項目名や別項目で単位を明確にしておくと、後工程で誤解が起きにくくなります。

数値が文字列として入っている場合にも注意が必要です。見た目は数値でも、単位記号やカンマ、空白、注記が含まれていると、計算対象として扱えないことがあります。面積や距離を条件にして抽出する場合、数値として比較できる形式になっているかを確認しておきます。必要であれば、解析用の数値項目と表示用の文字項目を分けると安全です。

日付や更新情報の持たせ方も、実務では大きな意味を持ちます。GeoJSONは地物の位置や形状を扱う形式ですが、現場ではデータがいつ作成され、いつ更新されたかが重要です。古い区域情報や過去の調査結果を最新の現場判断に使ってしまうと、解析結果が正しくても判断がずれることがあります。propertiesに更新日や作成日を持たせている場合は、形式をそろえ、解析対象として使える状態にしておくと便利です。

空欄や欠損値の扱いも確認しておく必要があります。すべての地物に同じ属性が入っているとは限りません。一部の地物だけ管理番号がない、種別が空欄、面積値が未入力ということはよくあります。Turf.jsで空間処理を行う部分には影響しなくても、結果を分類したり集計したりする段階で問題になります。欠損を除外するのか、未設定として扱うのか、別途確認対象にするのかを決めておくと、解析結果を説明しやすくなります。

属性情報は、空間解析の条件にもなります。たとえば、特定の種別の地物だけを対象にする、管理区域内のうち更新日が古いものだけを抽出する、一定以上の面積を持つ区画だけを判定する、といった処理では、propertiesの整理が欠かせません。属性が整っていない状態で解析を始めると、空間的には正しい処理でも、対象の選び方が間違ってしまうことがあります。

また、解析結果をpropertiesに書き戻す場合は、既存の項目名と衝突しないようにします。判定結果、距離、面積、交差有無などを新しい属性として追加する場合、元データの属性を上書きしない設計が必要です。作業前のデータと作業後のデータを比較できるように、解析結果用の項目名を明確にしておくと、修正や再解析がしやすくなります。

GeoJSONをTurf.jsで扱う実務では、geometryが地図上の形を表し、propertiesがその意味を支えます。どちらか一方だけが整っていても、実務で使いやすいデータにはなりません。解析前に属性名、表記、単位、数値形式、日付、欠損値、結果項目の扱いを確認することで、解析後の集計や報告が安定します。

解析範囲とデータ量を事前に絞り込む

GeoJSONをTurf.jsで解析するときは、処理対象の範囲とデータ量を事前に確認することが重要です。GeoJSONはテキスト形式で扱いやすい一方、地物数や頂点数が増えるとファイルサイズが大きくなり、読み込みや解析に時間がかかります。特に、すべての地物同士を比較するような処理では、データ量が増えるほど負荷が大きくなります。必要な範囲だけを対象にすることは、処理を速くするだけでなく、結果の確認をしやすくするためにも有効です。

まず、解析目的に対して本当に必要な地物だけが含まれているかを確認します。広域データをそのまま読み込んで、特定の工区や管理区域だけを解析するのは非効率です。対象区域が決まっている場合は、事前に範囲で絞り込み、不要な地物を除外してから処理します。これにより、処理時間を抑えられるだけでなく、誤って対象外の地物まで集計に含めるリスクも減らせます。

次に、解析の順序を考えます。たとえば、全地物に対して詳細な交差判定や距離計算を行う前に、大まかな範囲で候補を絞ると効率的です。対象区域から大きく離れている地物は、詳細な判定をする前に除外できます。最初から細かい処理をすべての地物にかけるのではなく、粗い条件で絞り、その後に精密な判定を行う流れにすると、処理の無駄を減らせます。

頂点数の多い地物にも注意が必要です。行政区域、自然地形、河川、海岸線、複雑な境界などは、非常に多くの頂点を持つことがあります。細かい形状が必要な解析ではそのまま使うべき場合もありますが、広域の傾向把握や概略判定では、必要以上に細かい形状が処理負荷を増やす原因になります。解析目的に応じて、形状の簡略化を検討することもあります。ただし、簡略化すると境界位置が変わるため、境界付近の判定には注意が必要です。

複数のGeoJSONを重ねて解析する場合は、各データの範囲が一致しているかを確認します。一方のデータは市区町村全体、もう一方は一部の地区だけというように範囲が異なると、結果の解釈を誤ることがあります。重なりがない部分を該当なしと見るのか、データ未整備と見るのかは大きな違いです。解析結果を報告する場合は、対象範囲とデータ範囲の違いを説明できるようにしておきます。

データ量が多い場合は、処理結果の確認方法も考えておく必要があります。数万件の地物を一度に解析しても、結果を人が確認できなければ実務には使いにくくなります。対象を地域別、種別別、更新日別、優先度別に分けて処理すると、結果の確認や原因調査がしやすくなります。大量データを一括処理すること自体が目的ではなく、判断しやすい結果を得ることが目的です。

また、解析前のデータバックアップも忘れてはいけません。GeoJSONは編集しやすい反面、処理結果を書き戻したり、不要な地物を削除したりする過程で元データが変わってしまうことがあります。元データ、前処理後データ、解析後データを分けて管理しておくと、結果に疑問が出たときに原因を追いやすくなります。特に、複数人で作業する場合は、どの段階のデータを使っているのかを明確にすることが重要です。

解析範囲を絞るときは、現場の運用も考慮します。地図上の範囲だけでなく、工区、担当区域、点検対象、更新対象、報告単位など、業務上の区切りに合わせてデータを整理すると、結果をそのまま次の作業に使いやすくなります。GeoJSONの解析は技術的な処理ですが、最終的には現場判断や管理業務につながるものです。処理しやすさだけでなく、使いやすさも意識する必要があります。

Turf.jsでGeoJSONを解析する前には、対象範囲、地物数、頂点数、データの重なり、処理順序、結果確認の方法を整理しておきます。これにより、処理負荷を抑えながら、実務で扱いやすい結果を得やすくなります。データ量が多いほど、最初の絞り込みと設計が重要になります。

まとめ

GeoJSONをTurf.jsで解析する前には、データを読み込んで処理を始める前の確認が欠かせません。座標順序や座標参照がずれていれば、距離や面積、内外判定の結果は信頼しにくくなります。Point、LineString、Polygonなどの形状が目的に合っていなければ、処理そのものが成立しない場合もあります。特にPolygonでは、閉じ方、自己交差、穴、境界上の扱いが結果に影響します。

また、GeoJSONはgeometryだけで完結するものではありません。propertiesに入っている属性名、値の表記、単位、日付、欠損値が整っていることで、解析結果を集計や報告に使いやすくなります。空間的な判定が正しくても、属性の扱いが不安定だと、対象の抽出や結果の分類で誤りが起きます。解析前に属性を整理することは、後工程の品質を守る作業でもあります。

さらに、解析範囲とデータ量の整理も重要です。必要以上に大きなGeoJSONをそのまま処理すると、負荷が増えるだけでなく、結果確認も難しくなります。対象区域や業務単位に合わせてデータを絞り込み、段階的に処理することで、実務に使いやすい解析結果を得られます。

GeoJSONを扱う現場では、地図上に表示できたことをもってデータが正しいと判断しがちです。しかし、表示できることと、解析に使えることは別です。Turf.jsで処理する前に、座標、形状、面の整合性、属性、データ量を確認しておくことで、解析結果への信頼性が高まり、手戻りも減らせます。

現地で取得した位置情報、写真、測量結果などを後からGeoJSONや地図データと組み合わせる場面では、取得時の記録条件や座標変換条件も重要になります。使用した端末や測位機器、取得日時、補正方法、変換手順を記録し、解析前のGeoJSONと照合できる状態にしておくと、結果の説明や再確認がしやすくなります。

現場を3Dで残して、あとから測る。
実際の画面と動画で使い方を確認できます。

LRTK Phoneの使い方・実例を見る
資料請求導入相談
現場をスマホで3DスキャンLRTK Phone実例を見る