top of page

GeoJSONをJavaScriptで読み込む実装前チェック6項目

タイマーアイコン.jpeg
この記事は平均7分で読めます
万能の測量機LRTKの説明

著者: LRTKチーム

GeoJSONは、地物の形状と属性をまとめて扱えるため、地図表示、現地調査、設備管理、施工記録、点検台帳などの実務で使われることが多いデータ形式です。JavaScriptで読み込めば、ブラウザ上で地物を表示したり、属性に応じて色分けしたり、クリック時に詳細情報を出したりできます。一方で、実装前の確認が不十分なまま読み込み処理を作ると、座標の向きが逆になる、表示位置がずれる、ファイルが重くて画面が固まる、属性名が想定と違って検索や絞り込みが動かないといった問題が起こりやすくなります。


この記事では、geojsonで検索している実務担当者に向けて、GeoJSONをJavaScriptで読み込む前に確認しておきたい6つの項目を整理します。単に読み込めるかどうかではなく、現場データとして安全に運用できるか、後から保守しやすい設計になっているかを重視して解説します。


目次

GeoJSONの構造と読み込み対象を最初に確認する

座標の順序と位置ずれの原因を確認する

ファイルサイズと表示速度への影響を確認する

属性情報の命名と欠損値を確認する

JavaScript側の読み込み方法とエラー処理を確認する

実務運用を見据えた更新・検証・現地確認を確認する

まとめ


GeoJSONの構造と読み込み対象を最初に確認する

GeoJSONをJavaScriptで読み込む前に、まず確認したいのは、対象データがどのような構造になっているかです。GeoJSONは見た目にはひとつのテキストファイルですが、中身は地物ごとの形状情報と属性情報で構成されています。地図上に点を出したいのか、線を表示したいのか、面を塗り分けたいのかによって、読み込み後に必要な処理は大きく変わります。実装前にここを曖昧にしたまま進めると、表示処理やクリック処理を作り直す原因になります。


GeoJSONでは、全体をまとめる形式としてFeatureCollectionがよく使われます。その中に複数のFeatureが入り、それぞれのFeatureがgeometryとpropertiesを持ちます。geometryにはPoint、LineString、Polygonなどの形状種別と座標が入り、propertiesには名称、管理番号、分類、日付、点検結果などの属性が入ります。JavaScript側では、この構造を前提に、各Featureを順番に読み取り、geometryの種類に応じて画面上の表現を切り替えることになります。


実務では、同じGeoJSONという拡張子でも、中身が点だけのデータ、線だけのデータ、面だけのデータ、または点・線・面が混在したデータがあります。たとえば、現地調査で取得した撮影地点はPoint、道路や配管の中心線はLineString、敷地や区域はPolygonとして扱われることが多いです。これらが混在している場合、JavaScript側でgeometry.typeを確認し、それぞれに合った描画処理や属性表示処理を分ける必要があります。


さらに、PolygonやMultiPolygonのような面データでは、座標配列の階層が深くなります。点データと同じ感覚で最初の座標だけを読みに行くと、配列の扱いを誤り、表示できない、または一部だけ表示されるといった不具合につながります。特に複数の区域をひとつの地物として扱うMultiPolygonでは、単純な1階層のループでは足りない場合があります。実装前に、対象データのgeometry.typeを数件だけでなく全体的に確認し、想定外の形状種別が含まれていないか見ておくことが重要です。


読み込み対象が外部ファイルなのか、画面に埋め込まれたデータなのか、サーバーから返される応答なのかも確認しておく必要があります。小さなサンプルであればJavaScript内に直接書いて動作確認できますが、実務データではファイルとして分離し、必要なタイミングで取得するほうが扱いやすくなります。ただし、外部ファイルを読み込む場合は、ファイルの配置場所、文字コード、取得時の権限、通信失敗時の扱いなども関係します。単にサンプルが表示できたから本番でも問題ないとは限りません。


また、GeoJSONの目的を明確にすることも大切です。背景地図に重ねて閲覧するだけなのか、地物をクリックして詳細を確認するのか、属性で検索するのか、編集や更新まで行うのかによって、必要なpropertiesの設計やデータ量の許容範囲が変わります。閲覧だけであれば最低限の属性でも足りますが、検索や台帳連携を行う場合は、管理番号や分類コードなど、機械的に判定しやすい属性が必要になります。実装前の段階で、画面に表示する情報と内部処理に使う情報を分けて考えると、後の改修がしやすくなります。


GeoJSONの構造確認では、データが正しい形式かどうかだけでなく、実装側が何を前提に処理するかを決めることが目的です。点だけを扱う処理として作るのか、複数の形状種別に対応する汎用処理にするのか、属性の有無によって表示を変えるのかを決めておけば、JavaScriptの実装は安定します。反対に、構造の確認を後回しにすると、読み込み後の描画、スタイル設定、クリックイベント、エラー処理のすべてで例外対応が増えてしまいます。


座標の順序と位置ずれの原因を確認する

GeoJSONをJavaScriptで扱うときに特に注意したいのが、座標の順序です。GeoJSONの座標は、原則として経度、緯度の順で記述されます。多くの人が地図や測量の文脈で緯度、経度の順に慣れているため、JavaScript側で配列を取り出すときに逆に扱ってしまうことがあります。この間違いが起こると、地物がまったく別の場所に表示されたり、画面上に表示されなかったりします。


たとえば、座標配列が[139.7, 35.6]のようになっている場合、最初の値が経度、次の値が緯度です。これを緯度、経度として処理してしまうと、緯度139.7度という現実的でない値になり、地図上に正しく表示できません。JavaScriptで読み込むときは、配列の何番目を経度として扱い、何番目を緯度として扱うのかを明確にしておく必要があります。


位置ずれの原因は、座標の順序だけではありません。現在一般的に使われるGeoJSONでは、座標参照系はWGS84の経度・緯度を前提に扱われます。ただし実務では、別の座標系から変換されたデータや、GeoJSONに似たJSONとして独自座標を入れたデータが混ざることがあります。たとえば、公共測量や施工管理で使われる平面直角座標系のような座標値を、そのままGeoJSONの経度緯度として扱ってしまうと、地図上の位置は大きくずれます。数値が6桁や7桁の大きな値になっている場合、経度緯度ではない可能性があります。


実装前には、サンプル地物をいくつか選び、実際の場所と照合することが大切です。ファイルを読み込んで画面に出るかどうかだけではなく、既知の施設、道路、敷地境界、測点などと重ねて見て、妥当な場所に表示されているかを確認します。位置が数メートルずれるのか、数十メートルずれるのか、まったく別の地域に飛ぶのかによって、疑うべき原因は変わります。数メートル程度であれば測位精度や変換条件、数十メートル以上であれば座標系や測地系の取り違え、極端なずれであれば経度緯度の順序や単位の誤りが疑われます。


高さ情報を含むGeoJSONにも注意が必要です。GeoJSONの座標には、経度、緯度に加えて高さなどの3つ目の値が入ることがあります。この場合、配列は[経度, 緯度, 高さ]のようになります。JavaScript側で2次元座標だけを想定していると、高さの値を無視すること自体は問題にならない場合もありますが、高さを使った表示や判定を行う場合は、単位や基準面を確認しなければなりません。高さが楕円体高なのか、標高に近い値なのか、現場独自の基準なのかによって解釈は変わります。


面データの場合は、座標の順序に加えて、面の閉じ方や外周と穴の扱いも確認しておきたい点です。Polygonでは、線形リングの最初と最後の座標を一致させ、輪を閉じる必要があります。外周の中に穴を持つ面では、外側の輪と内側の輪が配列として分かれます。JavaScript側で単純にすべての座標を一本の線として扱うと、面の塗り分けやクリック判定が期待どおりにならないことがあります。


位置ずれを防ぐためには、データ作成側と実装側の認識合わせも欠かせません。GeoJSONのファイルを受け取った担当者が、どの座標系から変換したのか、変換時にどの条件を使ったのか、原点や高さの扱いに独自ルールがないかを確認できる状態にしておく必要があります。JavaScriptのコードだけで全ての位置ずれを解決するのは難しく、元データの成り立ちを理解したうえで処理することが重要です。


ファイルサイズと表示速度への影響を確認する

GeoJSONはテキスト形式で扱いやすい一方、データ量が増えるとファイルサイズが大きくなりやすい形式です。点が数十件程度であれば問題になりにくいですが、道路、河川、境界、設備、点検記録、地形に近い細かな面データなどを大量に含めると、読み込み時間や描画速度に影響します。JavaScriptでブラウザ上に表示する場合、ファイルを取得する時間、文字列を解析する時間、地物を描画する時間がすべて利用者の体感速度に関わります。


実装前には、対象GeoJSONのファイルサイズと地物数を確認しておく必要があります。ファイルサイズが大きい場合でも、地物数が少なければ処理しやすいことがあります。逆に、ファイルサイズはそれほど大きくなくても、非常に多くの点や細かい線分を含んでいると、画面操作が重くなることがあります。特に面データや線データでは、座標点の数が描画負荷に直結しやすいため、単純なファイル容量だけで判断しないことが大切です。


GeoJSONをそのまま読み込む実装では、最初に全件を取得してから表示する作りになりがちです。この方法は実装が分かりやすい反面、データ量が増えると初期表示が遅くなります。利用者が最初に見る範囲が限られている場合、全エリアのデータを一度に読み込む必要があるのかを検討する価値があります。地域、分類、年度、表示倍率などでデータを分割できれば、必要な範囲だけを読み込む設計にできます。


また、形状の細かさも見直しの対象になります。地図上で広域表示するだけなのに、非常に細かな頂点を持つ線や面を読み込むと、表示上はほとんど差が見えないにもかかわらず処理負荷だけが増えます。実務では、詳細表示用のデータと広域表示用のデータを分ける考え方が有効です。広域では簡略化した形状を使い、拡大したときに詳細な形状を読み込むようにすれば、見やすさと速度を両立しやすくなります。


JavaScript側では、読み込み後に全Featureへ一斉に処理をかける場面が多くあります。属性による色分け、ラベル作成、クリックイベントの付与、検索用配列の生成などです。これらを地物数分だけ実行すると、件数が多いほど初期処理が重くなります。実装前に、読み込み直後に必ず必要な処理と、利用者の操作後に実行してもよい処理を分けておくと、体感速度を改善できます。


ファイルサイズが大きい場合は、通信環境も考慮する必要があります。事務所内の高速な回線では問題なく読み込めても、現場や移動中の端末では読み込みに時間がかかることがあります。地図や点検データは現地で使われることも多いため、通信が不安定な状況でも最低限の確認ができるか、読み込み中であることを画面に示せるか、取得に失敗した場合に再試行できるかを設計しておくと安心です。


表示速度の問題は、実装後に発覚すると対処が難しくなることがあります。画面が完成してからデータ分割や形状簡略化を行うと、データ作成手順や運用ルールまで変更しなければならない場合があります。そのため、実装前の段階で、本番相当のデータ量を使った簡易検証を行うことが重要です。小さなサンプルで動いた処理が、そのまま本番データで快適に動くとは限りません。


属性情報の命名と欠損値を確認する

GeoJSONを業務で使う場合、geometryと同じくらい重要なのがpropertiesに入る属性情報です。地図上に地物を表示するだけなら形状情報だけでも成立しますが、実務では名称、管理番号、種別、点検日、担当者、状態、備考、写真番号、工区、年度などの属性を使って、検索、絞り込み、色分け、帳票連携を行うことが多いです。JavaScriptで読み込む前に、属性名と値の入り方を確認しておかないと、画面上の表示や判定が安定しません。


まず確認したいのは、属性名が統一されているかです。同じ意味の項目なのに、ある地物ではname、別の地物では名称、さらに別の地物ではtitleのように分かれていると、JavaScript側で複数の項目を探す必要が出ます。小規模なデータであれば条件分岐で対応できますが、運用が続くほど例外が増え、保守が難しくなります。実装前に、画面で使う属性名を決め、データ作成側にもその名前で出力してもらうのが望ましいです。


次に、値の型を確認します。管理番号を文字列として扱うのか数値として扱うのか、日付をどの形式で持つのか、状態をコードで持つのか日本語の文字列で持つのかによって、JavaScript側の処理は変わります。たとえば、管理番号に先頭のゼロが含まれる場合、数値として扱うとゼロが消える可能性があります。日付も、表記が統一されていないと並び替えや期間検索が正しく動かないことがあります。


欠損値の扱いも重要です。propertiesに項目自体が存在しない場合、項目はあるが空文字の場合、nullのような値が入っている場合では、JavaScript側の判定が変わります。画面にそのまま表示すると空欄になり、利用者がデータ不備なのか未点検なのか判断できないことがあります。実装前に、未入力、該当なし、不明、確認中などをどのように表すか決めておくと、表示や検索の一貫性が保てます。


属性値による色分けを行う場合は、分類の種類をあらかじめ把握しておく必要があります。たとえば、点検結果を正常、要確認、要対応のように分ける場合、実際のデータに正常、異常なし、OKのような表記揺れが混ざると、意図した色分けになりません。JavaScript側で表記揺れを吸収する方法もありますが、根本的にはデータ作成時点で選択肢を統一するほうが安全です。


また、属性情報には画面に表示してよい情報と、内部処理だけで使う情報があります。実務データには、担当者名、管理上のメモ、内部コードなど、すべてを利用者に見せるべきではない項目が含まれることがあります。GeoJSONをそのままブラウザで読み込む場合、画面に表示していなくてもデータ自体はブラウザに取得される可能性があります。そのため、公開範囲や利用者権限に応じて、含める属性を事前に整理しておく必要があります。


属性設計では、将来の更新も考えておくことが大切です。最初は地物名だけでよくても、後から点検履歴、写真、担当部署、工事番号などを追加したくなることがあります。propertiesに何でも詰め込むと便利に見えますが、項目が増えすぎるとデータが重くなり、画面表示も複雑になります。JavaScript側で使う項目、外部の台帳で管理する項目、必要に応じて詳細画面で取得する項目を分ける考え方が有効です。


GeoJSONの属性確認は、単なる項目名の確認ではなく、業務フローの確認でもあります。どの属性を誰が入力し、どのタイミングで更新し、画面上ではどのように使うのかを整理することで、JavaScriptの実装は明確になります。属性が整っていれば、地図表示だけでなく、検索、絞り込み、集計、報告資料作成にもつなげやすくなります。


JavaScript側の読み込み方法とエラー処理を確認する

GeoJSONをJavaScriptで読み込む方法は、実装環境やデータの置き場所によって変わります。外部ファイルとして取得する場合は、非同期でデータを読み込み、取得が完了してから解析と描画を行う流れになります。画面の初期化処理とGeoJSONの取得処理がずれていると、まだデータがない状態で描画しようとしてエラーになることがあります。実装前に、読み込みの順序を明確にしておくことが大切です。


読み込み処理では、正常に取得できた場合だけでなく、取得できなかった場合を必ず考える必要があります。ファイルの場所が違う、通信が切れる、権限がない、ファイル名が変わる、内容が空である、形式が壊れているといった状況は実務でも起こり得ます。これらを想定せずに実装すると、画面が白くなったり、利用者には意味の分からないエラーだけが表示されたりします。少なくとも、読み込み中、読み込み失敗、データなし、形式不正の状態を分けて扱えるようにしておくと運用しやすくなります。


GeoJSONを取得した後は、通常は文字列またはレスポンス本文をJSONとして解析します。この時点で、カンマの不足、括弧の不一致、不正な制御文字などがあると解析に失敗します。外部から受け取ったデータをそのまま使う場合は、JavaScript側で例外を捕捉し、どの段階で失敗したのかを分かるようにしておくことが重要です。単に読み込み失敗と表示するだけでは、通信に失敗したのか、JSON解析に失敗したのか、GeoJSONとしての構造が不正なのか判断できません。


解析後には、GeoJSONとして期待する構造を持っているか確認します。typeがFeatureCollectionになっているか、featuresが配列になっているか、各Featureにgeometryがあるか、geometry.typeとcoordinatesが存在するか、propertiesが想定どおりかを確認します。JavaScriptは柔軟に書ける一方で、存在しない項目にアクセスしても実行時まで問題が見えにくいことがあります。読み込み直後に簡単な検証処理を入れておくと、後続の描画処理で原因不明のエラーが出るのを防げます。


表示処理との連携も実装前に決めておきたい点です。GeoJSONを読み込んだらすぐ全件表示するのか、利用者がボタンを押したときに表示するのか、属性で絞り込んでから表示するのかによって、状態管理の作りが変わります。読み込んだ元データをそのまま保持するのか、表示用に加工したデータを別に持つのかも考える必要があります。元データを壊さずに保持しておけば、絞り込み条件を解除したときや再描画するときに扱いやすくなります。


エラー処理では、利用者向けの表示と開発者向けの記録を分けることも重要です。利用者には「データを読み込めませんでした。通信状況またはデータの更新状況を確認してください」のように、次に取るべき行動が分かる表現が必要です。一方、開発者や管理者には、どのファイルで、どの段階で、どのようなエラーが起きたのかが分かる記録が必要です。実務システムでは、利用者に技術的な詳細を見せすぎず、管理側で原因を追える設計が望ましいです。


セキュリティの観点も忘れてはいけません。GeoJSONのpropertiesには任意の文字列が入るため、属性値を画面に表示するときは、想定外の文字列が混ざる可能性を考える必要があります。属性値をHTMLとして直接組み立てる実装では、不正な文字列による表示崩れや意図しないスクリプト実行のリスクが生じる場合があります。業務データだから安全だと決めつけず、外部入力として丁寧に扱い、必要に応じてエスケープやサニタイズを行うことが大切です。


JavaScript側の読み込み方法は、サンプルコードだけを見ると簡単に見えます。しかし、本番運用では、非同期処理、例外処理、構造検証、表示状態、再読み込み、権限、文字列の安全な表示など、多くの要素が関係します。実装前にこれらを確認しておけば、後から画面全体を作り直すリスクを減らせます。


実務運用を見据えた更新・検証・現地確認を確認する

GeoJSONをJavaScriptで読み込む実装は、初回表示ができれば終わりではありません。実務では、地物の追加、属性の更新、点検結果の反映、年度ごとの入れ替え、現場からの修正依頼などが継続的に発生します。そのため、実装前から更新運用を見据えておくことが重要です。どの担当者がGeoJSONを作成し、誰が確認し、どのタイミングで公開するのかが決まっていないと、古いデータと新しいデータが混在しやすくなります。


まず、データ更新の単位を決めておく必要があります。全体をひとつのGeoJSONファイルとして入れ替えるのか、地域や工区ごとに分割して更新するのか、地物単位で更新するのかによって、運用のしやすさが変わります。全体を一括更新する方式は単純ですが、ファイルが大きくなると確認や差し替えに時間がかかります。分割更新は柔軟ですが、ファイル間の整合性や読み込み順序を管理する必要があります。


更新時には、前回データとの差分を確認できる仕組みがあると便利です。地物数が増減していないか、管理番号が重複していないか、重要な属性が空になっていないか、座標が極端に変わっていないかを確認すれば、公開前に多くの不具合を発見できます。JavaScriptで読み込む画面側だけに頼るのではなく、データ作成後のチェック工程を設けることで、運用全体の品質が上がります。


現地確認との関係も重要です。GeoJSON上の地物が画面で正しく見えていても、それが現地の実態と合っているとは限りません。設備の移設、工事による形状変更、点検時の記録誤り、測位条件の悪化などによって、データと現地がずれることがあります。特に、施工管理、インフラ点検、用地確認、埋設物管理などでは、画面表示だけで判断せず、必要に応じて現地で座標や属性を確認する運用が求められます。


実務で使うGeoJSONでは、データの作成日や更新日も重要な属性になります。いつ作られたデータなのか、どの調査に基づくデータなのか、誰が更新したのかが分からないと、古い情報を誤って使う可能性があります。propertiesに更新日や管理用の版情報を持たせる方法もありますし、ファイル名や管理台帳で版を管理する方法もあります。いずれの場合でも、画面上で利用者がデータの鮮度を確認できるようにしておくと安心です。


検証用データと本番データの分離も考えておきたい点です。実装中は小さなサンプルデータで試すことが多いですが、本番に近いデータで確認しないと、属性の表記揺れ、想定外のgeometry、巨大なファイルサイズ、欠損値などを見落とします。一方で、本番データをそのまま開発環境で使うと、公開すべきでない属性が含まれる可能性があります。実装前に、検証に使える匿名化または簡略化されたデータを用意しておくと、安全に動作確認できます。


運用面では、利用者からのフィードバックを受けて修正する流れも必要です。地図上の位置が違う、属性が古い、検索で出てこない、表示が重いといった指摘があったとき、画面の問題なのか、GeoJSONの問題なのか、元データの問題なのかを切り分けられるようにします。問い合わせ時に地物の管理番号、表示していた条件、確認日時などを把握できれば、原因調査がしやすくなります。


GeoJSONをJavaScriptで読み込む実装は、データ作成、画面表示、現地確認、更新管理がつながって初めて実務で使えるものになります。単にファイルを読み込んで地図に重ねるだけなら短時間で試せますが、業務で継続利用するには、データの正確性、更新手順、利用者への見せ方、修正フローまで設計しておくことが大切です。


まとめ

GeoJSONをJavaScriptで読み込む実装では、最初にファイルが表示できるかどうかだけに注目しがちです。しかし、実務で安定して使うためには、実装前の確認が欠かせません。GeoJSONの構造、geometryの種類、座標の順序、座標参照系、ファイルサイズ、属性情報、欠損値、読み込み時のエラー処理、更新運用までを整理しておくことで、後から発生するトラブルを減らせます。


特に重要なのは、データの見た目と意味を分けて確認することです。画面上に点や線や面が表示されていても、座標が正しいとは限りません。属性が表示されていても、項目名や値の型が運用に合っているとは限りません。小さなサンプルで軽快に動いていても、本番データの量では読み込みや描画が重くなることがあります。JavaScriptの実装だけでなく、元データの作成方法や更新手順まで含めて確認する姿勢が大切です。


また、GeoJSONは現場情報と相性のよい形式ですが、現地で取得した位置情報や写真、点検記録と組み合わせて初めて価値が高まります。机上で作成したデータを読み込むだけでなく、現場で取得した座標をGeoJSONや地図表示に反映できれば、調査、確認、共有、報告の流れを効率化できます。座標付きの記録を扱う業務では、データ作成から現地確認までを一体で考えることが重要です。


GeoJSONを使った地図表示や現場データ管理をより実務に近い形で進めたい場合は、現地で高精度な位置情報を取得し、その場で確認や共有につなげられる環境も検討するとよいです。測位、写真、点群、AR表示などを現場業務に結びつけたい場合は、次のステップとして自社の業務要件に合う測位・記録ツールを比較検討するとよいでしょう。


LRTKで現場の測量精度・作業効率を飛躍的に向上

LRTKシリーズは、建設・土木・測量分野における高精度なGNSS測位を実現し、作業時間短縮や生産性の大幅な向上を可能にします。国土交通省が推進するi-Constructionにも対応しており、建設業界のデジタル化促進に最適なソリューションです。

LRTKの詳細については、下記のリンクよりご覧ください。

 

製品に関するご質問やお見積り、導入検討に関するご相談は、

こちらのお問い合わせフォームよりお気軽にご連絡ください。ぜひLRTKで、貴社の現場を次のステージへと進化させましょう。

bottom of page