GeoJSONは、地図上の点、線、面といった図形情報と、その図形に紐づく属性情報をJSON形式で扱うためのデータ形式です。拡張子としては `.geojson` や `.json` が使われることが多く、構造はテキストとして確認できます。そのため、Pythonを使えば、ファイルの読み込み、属性の確認、座標の取り出し、条件に合うデータの抽出、別ファイルへの書き出しまでを比較的わかりやすく処理できます。
一方で、GeoJSONは見た目が単純でも、実務で扱うと座標の順序、文字コード、属性型、図形種別、欠損値、ファイルサイズなどでつまずくことがあります。特に「geojson 使い方」と検索している方の多くは、地図データを開くだけでなく、業務データとして加工したり、別システムへ渡したり、現地記録と紐づけたりする場面を想定しているはずです。
この記事では、GeoJSONをPythonで読み書きするために押さえておきたい5つの基本を、実務担当者向けに整理します。単にサンプルコードを動かすだけでなく、読み込み前に確認すべきこと、座標と属性をどう見るか、書き出し時にどこを崩さないようにするか、運用でミスを減らす考え方まで解説します。
目次
• GeoJSONの基本構造を理解する
• PythonでGeoJSONを読み込む前に確認する
• 座標と属性を取り出して内容を確認する
• 条件に合わせてGeoJSONを加工する
• GeoJSONを書き出すときの注意点を押さえる
• 実務で読み書きミスを減らす確認ポイント
• まとめ
GeoJSONの基本構造を理解する
GeoJSONをPythonで扱う前に、まずデータの中身がどのような考え方で構成されているかを理解しておくことが大切です。GeoJSONは、地図上の図形を表す情報と、その図形に付属する属性情報をまとめたJSON形式のデータです。単なる座標の集まりではなく、「どのような図形なのか」「何を表す地物なのか」「その地物にどのような名称や分類が付いているのか」を一つの構造の中に持っています。
一般的なGeoJSONでは、複数の地物をまとめる `FeatureCollection` が使われることが多く、その中に複数の `Feature` が入ります。それぞれの `Feature` は、図形情報である `geometry` と、属性情報である `properties` を持ちます。図形情報には、点、線、面などの種類と、それを構成する座標が含まれます。属性情報には、名称、番号、分類、更新日、管理者、状態、備考など、業務で必要になる文字や数値が入ります。
PythonでGeoJSONを読むと、この構造は辞書やリストの組み合わせとして扱われます。つまり、画面上では地図に見えるデータも、プログラムの中では階層を持ったデータとして処理されます。この階層を意識しないまま座標や属性を取り出そうとすると、目的の値が見つからなかったり、想定と違う階層を参照してエラーになったりします。
GeoJSONで特に重要なのは、図形種別と座標配列の関係です。点であれば座標は一組ですが、線であれば複数の座標が順番に並びます。面であれば、外周を表す座標列があり、場合によっては穴を表す内側の座標列も含まれます。さらに、複数の点、複数の線、複数の面をまとめた図形も存在します。そのため、すべてのGeoJSONを同じ座標階層として扱うのではなく、図形種別に応じて座標の深さが変わることを理解しておく必要があります。
実務では、建物範囲、敷地境界、道路中心線、点検箇所、設備位置、調査地点など、さまざまな対象がGeoJSONで表現されます。点のデータを前提にした処理を面のデータへそのまま適用すると、座標の取り出し方が合わずに失敗します。逆に、面のデータを線として扱うと、閉じた区域であるべき情報を単なる線分の集合として見てしまい、後工程で不整合が起きることがあります。
また、GeoJSONでは座標の並びが重要です。標準的なGeoJSONの位置座標は、経度、緯度の順で記録されます。日常的な表現では緯度、経度の順に言うことが多いため、ここはよく間違えるポイントです。Pythonで座標を取り出して別の処理に渡すとき、順序を取り違えると位置が大きくずれます。日本国内のデータであっても、経度と緯度を逆にすると、地図上ではまったく違う場所を指してしまいます。
属性情報も、見た目以上に注意が必 要です。たとえば、番号のように見える値が文字列として入っていることがあります。逆に、分類名のように見える値が数値コードとして管理されていることもあります。Pythonで読み込んだ後に条件抽出や並べ替えをする場合、属性の型を確認しないと、思った通りの結果にならないことがあります。特に、空欄、未入力、ゼロ、文字列のゼロは意味が異なる場合があります。
GeoJSONを読み書きする第一歩は、いきなり加工処理を書くことではなく、データの構造を把握することです。全体にいくつの地物があるのか、図形種別は何か、座標の階層はどうなっているか、属性にはどのような項目があるかを確認すると、後の処理が安定します。Pythonではこの確認作業を自動化しやすいため、毎回同じ観点でチェックできるようにしておくと、実務でのミスを減らせます。
PythonでGeoJSONを読み込む前に確認する
PythonでGeoJSONを読み込むときは、最初にファイルを開いて中身を取り込むだけでなく、読み込み前の前提を整えることが重要です。GeoJSONはテキスト形式なので、見た目には簡単に扱えそうですが、文字コード、改行、ファイルサイズ、拡張子、データの途中欠落などによって、読み込み時にエラーが起きることがあります。特に、実務で受け取るデータは作成元が一つとは限らず、同じGeoJSONという名前でも中身の整い方に差があります。
PythonでGeoJSONを扱う基本は、標準的なJSON読み込み処理を使うことです。GeoJSONはJSONの構文に従っているため、まずはJSONとして正しく読めるかを確認します。ここで失敗する場合、GeoJSONとしての意味を確認する前に、ファイル自体の構文が崩れている可能性があります。たとえば、カンマの不足、引用符の不一致、途中で切れたファイル、不要な制御文字などが原因になります。
読み込み時には、文字コードも確認します。日本語の属性名や備考が含まれるGeoJSONでは、文字コードの扱いを誤ると文字化けしたり、読み込み時に例外が発生したりします。実務では、地物名、地区名、管理番号、作業メモなどに日本語が含まれることが多いため、文字コードを明示して読み込む習慣を持つと安定します。特に、別の環境で作成されたファイルを受け取る場合は、文字が正しく表示されるかを早い段階で確認することが大切です。
Pythonでの基本的な読み込みは、ファイルを開いてJSONとして読み込む流れになります。たとえば、標準ライブラリの範囲であれば、次のような考え方で処理できます。
`python import json from pathlib import Path
path = Path("sample.geojson")
with path.open("r", encoding="utf-8") as f: data = json.load(f)
print(type(data)) print(data.keys()) `
この処理では、まずGeoJSONファイルを読み込み、Pythonの辞書として扱える状態にします。その後、全体の型や主要なキーを確認 します。ここで期待するキーが存在しない場合、一般的なGeoJSONの構造ではない可能性があります。また、読み込めたとしても、すぐに正しい地理データとして使えるとは限りません。JSONとして正しいことと、GeoJSONとして実務上問題なく使えることは別の確認です。
読み込み後には、全体の種別を確認します。複数の地物を含むGeoJSONであれば、`FeatureCollection` として地物の一覧が含まれていることが多いです。一つの地物だけを表す `Feature` や、図形だけを表す `Geometry` の形式もあります。実務で多いのは複数の地物をまとめた形式ですが、受け取ったデータが必ずそうだとは限りません。処理の前提を固定しすぎると、別形式のデータが来たときに動かなくなります。
ファイルサイズも実務上の重要な確認点です。小さなGeoJSONであれば一括で読み込んでも問題になりにくいですが、広い範囲の道路、建物、筆界、点群由来の抽出結果などでは、ファイルが大きくなることがあります。大きなファイルをそのまま一括読み込みすると、処理時間が長くなったり、メモリを多く使ったりします。最初は小さなサンプルで処理を確認し、その後に本番データへ適用する流れが安全です。
また、読み込み前には、元データを直接上書きしない運用にしておくことをおすすめします。GeoJSONの加工では、属性を追加したり、不要な地物を削除したり、座標を丸めたりすることがあります。元ファイルを上書きしてしまうと、後から処理前の状態に戻せなくなります。作業用の複製を作り、読み込み元と書き出し先を分けるだけでも、トラブル時の復旧がしやすくなります。
読み込み前にもう一つ確認しておきたいのが、座標の前提です。標準的なGeoJSONでは、経度、緯度の順で座標を扱います。ただし、実務で受け取るファイルの中には、独自の前提で作られたものや、GeoJSONに似たJSON形式で平面直角座標系などの値を持つものが混ざる可能性もあります。標準仕様どおりのGeoJSONとして扱えるか、データ提供元の説明や座標値の範囲を確認することが大切です。日本国内の経度緯度を想定しているのに、座標値が大きな平面直角座標のような値になっている場合は、前提を見直す必要があります。
GeoJSONをPythonで読み込む作業は、単なるファイル操作ではありません。正しく読めるか、想定 する構造か、文字が壊れていないか、図形種別が一致しているか、座標の前提が合っているかを順番に確認することが、後工程の品質を左右します。読み込み処理の冒頭でこれらを確認するコードを入れておくと、手作業で地図を開いて確認するだけでは見落としやすい問題にも気づきやすくなります。
座標と属性を取り出して内容を確認する
GeoJSONをPythonで読み込んだ後は、座標と属性を取り出して内容を確認します。この確認は、単に値を表示するだけではなく、データが業務目的に合っているかを見極めるための重要な工程です。地図データの加工では、目的の地物だけを抽出したり、属性に応じて分類したり、座標から範囲を計算したりすることが多いため、最初に取り出し方を理解しておく必要があります。
複数の地物を含むGeoJSONでは、地物の一覧を順番に処理します。それぞれの地物には、図形情報と属性情報があります。Pythonでは、地物の一覧を繰り返し処理しながら、図形種別、座標、属性を確認する流れが基本です。
`python features = data.get("features", [])
print("地物数:", len(features))
for feature in features[:5]: geometry = feature.get("geometry") or {} properties = feature.get("properties") or {}
print("図形種別:", geometry.get("type"))
print("属性項目:", properties.keys())`
このように最初の数件だけを表示すると、データ全体の雰囲気をつかみやすくなります。いきなり全件を表示すると出力が長くなりすぎるため、まずは先頭数件で確認するのが実務的です。図形種別がすべて同じか、属性項目がそろっているか、空の図形がないか、想定外の 値が入っていないかを見ます。
属性を取り出すときは、項目名の揺れに注意します。たとえば、同じ意味の項目でも、作成時期や担当者によって「名称」「name」「地物名」のように異なる名前が使われることがあります。また、全地物に同じ属性項目が入っているとは限りません。ある地物には管理番号があり、別の地物には空欄になっている場合もあります。Pythonで処理するときは、必ず存在する前提で値を取り出すのではなく、存在しない場合の扱いを決めておくことが大切です。
座標を取り出すときは、図形種別ごとに座標配列の構造が変わる点を意識します。点であれば座標は一組ですが、線では座標の組が複数並び、面ではさらに外周や内側の輪郭を表す階層になります。実務でよくある失敗は、点の処理を線や面にもそのまま使ってしまうことです。座標の階層が違うため、想定した数値ではなくリスト全体を取り出してしまい、計算ができなくなることがあります。
たとえば、点のGeoJSONであれば、座標は次のように取り出せます。
`python for feature in features: geometry = feature.get("geometry") or {} if geometry.get("type") == "Point": coordinates = geometry.get("coordinates") or [None, None] lon, lat = coordinates[:2] print(lon, lat) `
ここで重要なのは、経度、緯度の順で受け取っていることです。変数名を明確にしておくと、後で処理を読む人にも意図が伝わります。単に `x` と `y` だけで扱うと、座標系によって意味が曖昧になることがあります。経度緯度のデータとして扱うなら、`lon` と `lat` のように意味がわかる名前を使うと安全です。
線や面の場合は、座標列全体を取り出してから、必要に応じて各点をたどります。道路中心線であれば、線を構成する各座標の順序が意味を持つ場合があります。敷地や建物範囲であれば、面の外周が閉じているか、最初と最後の座標が一致しているかを確認することがあります。境界線や区域の処理では、この確認が特に重要です。
属性と座標を組み合わせて確認すると、データの妥当性を見つけやすくなります。たとえば、属性では「建物」と分類されているのに図形が点になっている、属性では「調査済み」となっているのに座標が空になっている、管理番号が重複している、同じ名称の地物が離れた場所に存在する、といった問題を発見できます。Pythonを使うと、このような確認を全件に対して機械的に行えます。
属性の一覧を確認するだけでなく、値の種類や件数を見ることも有効です。分類項目であれば、どの分類が何件あるかを数えることで、想定外の分類名や入力ミスを見つけられます。状態項目であれば、未確認、確認済み、要修正などの件数を集計できます。文字の揺れがある場合、同じ意味の値が別々に数えられるため、入力ルールの見直しにもつながります。
`python counts = {}
for feature in features: properties = feature.get("properties") or {} value = properties.get("status", "未設定") counts[value] = counts.get(value, 0) + 1
print(counts) `
このような簡単な集計でも、実務では十分に役立ちます。ただし、項目名に特定の英語名や日本語名を使う場合は、対象データの属性定義に合わせて変更する必要があります。サンプルコードをそのまま使うのではなく、自分のデータに含まれる属性項目名を確認してから処理を書くことが大切です。
GeoJSONの内容確認では、座標値の範囲を見ることも欠かせません。経度緯度の想定であれば、値が極端に大きくないか、緯度と経度が逆になっていないか、ゼロに近い値が混ざっていないかを確認します。座標の範囲を最小値と最大値で出すだけでも、明らかな異常に気づけます。地図上で見て初めてわかる問題もありますが、Pythonで数値として確認することで、表示前に異常を検出できます。
座標と属性の確認は、GeoJSONを読み書きする作業の中心です。ここを丁寧に行うことで、後の加工や書き出しが安定します。特に、複数の担当者や複数の工程をまたぐデータでは、見た目だけではわからない不整合が入りやすくなります。Pythonで確認項目を定型化しておけば、同じデータを何度も手作業で確認する負担を減らし、修正漏れも防ぎやすくなります。
条件に合わせてGeoJSONを加工する
GeoJSONをPythonで読み込めるようになると、次に必要になるのが加工処理です。実務では、受け取ったGeoJSONをそのまま使うだけでなく、必要な地物だけを抽出したり、属性を追加したり、不要な項目を削除したり、座標の桁数を調整したりする場面が多くあります。Pythonを使う利点は、このような処理を手順化して、同じ条件で繰り返し実行できることです。
まず基本になるのは、条件に合う地物の抽出です。たとえば、属性の分類が特定の値である地物だけを残す、状態が確認済みのものだけを取り出す、管理番号が入っているものだけを対象にする、といった処理で す。GeoJSONでは、地物の一覧から条件に合うものを新しい一覧として作り直すことで、抽出後のデータを作成できます。
`python filtered_features = []
for feature in features: properties = feature.get("properties") or {} if properties.get("status") == "確認済み": filtered_features.append(feature)
new_data = dict(data) new_data["features"] = filtered_features `
この例では、元の全体構造を使いながら、地物の一覧だけを条件に合うものへ差し替えています。実際の業務では、条件項目名や条件値を対象データに合わせます。抽出処理では、条件に合わなかった地物を消してよいのか、別ファイルに分けるだけなのかを明確にしておくことが重要です。元データの意味を変えてしまうと、後から確認したときに何が残され、何が除外されたのかがわかりにくくなりま す。
属性の追加もよく行われる加工です。たとえば、処理日、確認者、判定結果、集計用の分類、別システムで使う識別子などを追加することがあります。GeoJSONの属性情報は辞書として扱えるため、新しい項目を追加すること自体は難しくありません。ただし、項目名の付け方や値の型は、後工程で使う人やシステムに合わせる必要があります。
`python for feature in features: properties = feature.setdefault("properties", {}) properties["check_result"] = "未確認" `
このように属性を追加できますが、既存の項目名と重複しないかを確認することが大切です。すでに同じ項目名が存在する場合、上書きしてしまう可能性があります。上書きが必要な処理なのか、別名で追加すべき処理なのかを決めてから実行する必要があります。実務では、元の属性を残したまま加工結果を追加する方が、後から経緯を確認しやすくなります。
不要な属性項目を削除する処理もあります。外部へ渡すデータでは、内部管理用のメモや不要な項目を含めない方がよい場合があります。一方で、削除しすぎると、後から照合できなくなることがあります。Pythonで削除処理を書く前に、どの項目が本当に不要なのか、どの項目は照合や監査のために残すべきなのかを整理しておくことが大切です。
座標の加工では、桁数の丸めや簡略化が検討されることがあります。座標の小数桁が多いとファイルサイズが大きくなりやすく、扱いにくくなる場合があります。ただし、安易に丸めると位置精度が落ち、境界や設備位置の確認に影響する可能性があります。特に、測量、施工管理、点検記録などで使うGeoJSONでは、座標の丸めが業務上許されるかを確認しなければなりません。表示用のデータと管理用のデータでは、求められる精度が異なることがあります。
加工処理では、元データを直接変更するか、複製して変更するかも重要です。Pythonでは、辞書やリストを扱うときに参照の考え方が関係します。単純に代入しただけでは、元のデータと新しいデータが同じ中身を参照している場合があります。加 工前後を比較したい場合や、元データを保持したい場合は、深いコピーを使うなど、データの扱い方に注意が必要です。
また、加工後のGeoJSONでは、地物数や属性項目が想定通り変わっているかを確認します。抽出したつもりが全件残っている、条件の書き方を間違えてゼロ件になっている、属性を追加したつもりが一部の地物にしか入っていない、といったミスは珍しくありません。加工処理の直後に件数やサンプル属性を表示するだけでも、早期に気づけます。
条件加工では、空欄や欠損値の扱いも重要です。属性が存在しない場合、値が空文字の場合、値が明示的に未設定の場合では、意味が異なることがあります。Pythonの条件式では、これらが同じように扱われてしまうこともあるため、業務上の意味に合わせて判定を分ける必要があります。たとえば、未入力の地物を抽出したい場合、項目が存在しないものも対象にするのか、空文字だけを対象にするのかを明確にします。
複数条件を組み合わせる場合は、条件の優先順位にも注 意します。分類が特定の値で、かつ状態が確認済みで、さらに座標が存在するものだけを抽出するような処理では、一つの条件の書き方を間違えるだけで結果が大きく変わります。複雑な条件は一行にまとめすぎず、途中結果を変数に分けて書くと、後から見直しやすくなります。
GeoJSONの加工は、Pythonの文法だけで考えるのではなく、業務データの意味を保ったまま変換する作業として考える必要があります。地物を削除する、属性を追加する、座標を変えるという処理は、地図上の意味や管理上の意味を変える可能性があります。処理前後で何が変わったのかを記録し、元データを残し、確認用の集計を入れることで、安心して実務に使える加工手順になります。
GeoJSONを書き出すときの注意点を押さえる
GeoJSONをPythonで加工した後は、別ファイルとして書き出します。書き出し処理は一見すると簡単ですが、実務ではここで文字化け、属性型の変化、座標の崩れ、不要な上書き、ファイル構造の不一致などが起こることがあります。読み込みと加工が正しくできていても、書き出しの設定を誤ると、後 工程で使えないデータになるため注意が必要です。
基本的な書き出しは、PythonのJSON書き出し処理を使います。GeoJSONはJSON形式なので、辞書として保持しているデータをファイルへ出力します。日本語を含む属性を扱う場合は、文字がそのまま読める形で出力する設定を使うと確認しやすくなります。また、インデントを付けると人が読みやすくなりますが、ファイルサイズは大きくなります。確認用と配布用で書き出し設定を分けることもあります。
`python output_path = Path("output.geojson")
with output_path.open("w", encoding="utf-8") as f: json.dump(new_data, f, ensure_ascii=False, indent=2) `
この例では、日本語を読みやすい状態で出力し、インデントも付けています。実務で確認しながら作業する場合には便利です。一方、大きなファイルではインデントによって容量が増えます。人が直接読む必要がない最終データでは、インデントを省くこともあります。ただし、最初のうちは読みやすい形で出力し、内容を確認する方が安全です。
書き出し時に特に気をつけたいのが、元ファイルの上書きです。処理が完全に確認できていない段階で元ファイルと同じ名前に書き出すと、元の状態を失う可能性があります。出力ファイル名には、処理内容や日付、抽出条件などがわかる名前を付けると、後から管理しやすくなります。たとえば、確認済みだけを抽出したファイル、属性追加後のファイル、座標確認用のファイルなど、目的ごとに分けると混乱を防げます。
書き出した後は、再度Pythonで読み込めるかを確認することが大切です。書き出しが成功したように見えても、ファイルが途中で壊れていたり、構造が想定外になっていたりする場合があります。出力ファイルをもう一度読み込み、地物数、図形種別、属性項目、座標の範囲を確認すれば、最低限の品質チェックになります。これは自動処理の中に組み込んでおくと便利です。
`python with output_path.open("r", encoding="utf-8") as f: check_data = json.load(f)
print("書き出し後の地物数:", len(check_data.get("features", []))) `
書き出し後の確認では、地物数が想定通りかを見るだけでも効果があります。抽出処理をした場合は、元データより少なくなっているはずです。属性追加だけをした場合は、地物数は変わらないはずです。もし想定と違う場合は、加工処理か書き出し処理のどこかに問題がある可能性があります。
属性型の変化にも注意が必要です。Pythonで加工する過程で、数値が文字列になったり、文字列が数値になったりすることがあります。たとえば、管理番号を数値として扱うと、先頭のゼロが消える場合があります。番号やコードは計算に使う数値ではなく識別子であることが多いため、文字列として保持した方がよい場合があります。書き出し前に、重要な属性の型を確認しておくと安心です。
座標の書き出しでは、座標の順序や階層が崩れていないかを確認します。加工処理の中で座標リストを作り直す場合、経度と緯度を逆にしたり、面の外周の閉じを壊したりすることがあります。Polygonでは、線形リングの最初と最後の座標が一致している必要があります。境界や区域を扱うデータでは、ここを崩すと面として正しく扱えなくなることがあります。
書き出し時には、不要な空白や整形の違いは大きな問題にならない場合が多いですが、構造の違いは問題になります。全体の種別、地物一覧、図形情報、属性情報という基本構造を保つことが重要です。加工後に地物だけのリストを書き出してしまい、全体のGeoJSON構造が失われると、後工程で読み込めないことがあります。書き出す対象が地物一覧ではなく、GeoJSON全体のデータであることを意識します。
また、書き出したGeoJSONを別の環境で使う場合は、受け渡し先の前提を確認します。属性名に日本語が使えるか、文字コードの扱いに問題がないか、座標の桁数や図形種別に制限がないか、巨大なファイルでも扱えるかなどです。自 分の環境で読めることと、相手の環境で問題なく使えることは別です。特に、現場と事務所、発注者と受注者、社内システムと外部システムの間でデータを受け渡す場合は、確認手順を明確にしておく必要があります。
GeoJSONの書き出しは、処理の最後に見えますが、実務では成果物を作る工程です。読み込み、確認、加工をどれだけ丁寧に行っても、書き出し後のデータが壊れていれば意味がありません。元データを残す、出力名を分ける、文字コードを明示する、書き出し後に再読み込みする、件数と属性と座標を確認する。この一連の流れを基本にすると、GeoJSONの読み書き作業を安定させやすくなります。
実務で読み書きミスを減らす確認ポイント
GeoJSONをPythonで読み書きする基本を押さえたら、次は実務でミスを減らすための確認ポイントを整えておくことが重要です。GeoJSONの扱いで起きる問題は、プログラムのエラーだけではありません。読み込めるけれど位置がずれている、書き出せるけれど属性が欠けている、表示できるけれど業務上必要な情報が失われている、というように、見た目だけでは判断しにくい問題もあります。
まず確認したいのは、処理対象のファイルが正しいかどうかです。実務では、似た名前のファイルが複数存在することがあります。作業途中のファイル、修正版、確認用、提出用、過去版などが同じフォルダに並ぶと、誤って古いファイルを読み込むことがあります。Pythonで処理する場合は、読み込んだファイル名、更新日時、地物数などを最初に出力すると、対象ファイルの取り違えに気づきやすくなります。
次に、処理前後の件数を確認します。抽出処理であれば件数が変わるのは自然ですが、属性追加だけで件数が変わるのは不自然です。座標の丸めや属性名の変更でも、地物数は通常変わりません。処理ごとに「変わるべき項目」と「変わってはいけない項目」を決めておくと、結果の確認がしやすくなります。
属性項目の確認も欠かせません。GeoJSONでは、属性に業務上の意味が集まります。図形が正しくても、管理番号、分類、状態、名称などが抜けていると、後工程で使えないデータになる ことがあります。Pythonで全地物の属性項目を確認し、欠けている項目がないかを調べると、手作業よりも確実です。特に、必須項目が空欄の地物を抽出する処理は、品質確認に役立ちます。
座標の確認では、値の範囲と図形の種類を組み合わせて見ます。点データであれば、すべての点が想定範囲内にあるかを確認します。線データであれば、座標点の数が極端に少ないものがないかを確認します。面データであれば、外周が閉じているか、座標の階層が壊れていないかを確認します。これらは地図表示だけでも確認できますが、件数が多いと見落としが起きます。Pythonで機械的に確認することで、異常候補を効率よく見つけられます。
文字化けの確認も実務では重要です。GeoJSONの属性には、日本語の地名、施設名、備考、作業メモなどが含まれることがあります。書き出し時の設定が適切でないと、読めない文字列になったり、別環境で表示できなかったりします。出力後に代表的な日本語属性を表示し、意図した文字で残っているかを確認します。データを渡す相手がいる場合は、相手側でも読める形式になっているかを事前に確認すると安心です。
空間的な意味の確認も必要です。GeoJSONをPythonで読み書きできることと、そのデータが現場の実態を正しく表していることは別です。たとえば、点検箇所を示す点が道路の反対側にある、敷地境界の面が少しずれている、設備位置が古い図面に基づいているといった問題は、構文チェックだけでは見つかりません。Pythonで座標や属性を確認したうえで、必要に応じて地図表示や現地記録との照合を行うことが大切です。
データを複数回加工する場合は、処理の履歴を残すことも重要です。どのファイルから作成したのか、どの条件で抽出したのか、どの属性を追加したのか、座標を変更したのかを記録しておくと、後から説明しやすくなります。処理内容をファイル名だけに頼ると、時間が経つと意味がわからなくなることがあります。Pythonの処理内で簡単なログを出力したり、別の記録ファイルに処理条件を書き残したりすると、再現性が高まります。
また、処理コード自体も実務で読み返せる形にしておく必要があります。一度だけ動けばよいという書き方では、次回の作業で条件を変えるときにミスが起きやすく なります。入力ファイル、出力ファイル、抽出条件、追加する属性名などをコードの冒頭にまとめておくと、変更箇所がわかりやすくなります。複数人で使う場合は、変数名やコメントをわかりやすくしておくことも大切です。
GeoJSONの読み書きでは、サンプルデータで動いた処理が本番データでも安全とは限りません。サンプルではすべて点データだったのに、本番には線や面が混ざっていることがあります。サンプルでは属性がそろっていたのに、本番には欠損があることもあります。処理を本番に適用する前に、少数の地物で確認し、その後に全件処理する流れを作ると、失敗時の影響を小さくできます。
最後に、GeoJSONの用途を明確にすることもミス防止につながります。表示用の軽いデータなのか、管理台帳と紐づく正式なデータなのか、現地確認のための作業データなのか、提出用の成果データなのかによって、許容できる加工が変わります。表示用であればファイルサイズを小さくするための調整が有効な場合がありますが、管理用であれば座標や属性を不用意に削らない方がよい場合があります。目的を決めずに加工すると、便利さを優先して重要な情報を失う可能性があります。
実務でのGeoJSON処理は、読み込み、確認、加工、書き出し、再確認までを一つの流れとして考えることが大切です。Pythonを使えば、それぞれの確認を自動化しやすくなります。毎回同じ観点で確認できるようにしておけば、担当者が変わっても品質を保ちやすくなり、データの受け渡しや再利用もスムーズになります。
まとめ
GeoJSONをPythonで読み書きする基本は、ファイルを読み込んで書き出すだけではありません。GeoJSONの構造を理解し、読み込み前の前提を確認し、座標と属性を適切に取り出し、業務目的に合わせて加工し、書き出し後に再確認する流れを作ることが重要です。特に実務では、データが読めることよりも、正しい意味を保ったまま使えることが大切になります。
まず、GeoJSONは図形情報と属性情報を組み合わせたデータであることを理解する必要があります。点、線、面によって座標の階層が異なり、属性には管理や分類に必要な情報が含まれます。Pythonで扱う場合は、これらを辞書やリストとして処理しますが、図形種別ごとの違いを意識しないと、座標の取り出しや加工で失敗しやすくなります。
次に、読み込み前には、ファイルの構文、文字コード、ファイルサイズ、座標の前提、元データの保全を確認します。GeoJSONはテキスト形式なので扱いやすい一方、構造が崩れていても見た目だけでは気づきにくい場合があります。読み込み直後に全体の種別、地物数、属性項目、図形種別を確認するだけでも、多くの問題を早期に発見できます。
座標と属性を取り出す段階では、経度と緯度の順序、図形種別ごとの座標階層、属性項目の有無、値の型に注意します。条件抽出や集計を行う場合は、空欄や未設定の扱いも明確にする必要があります。属性の値を集計したり、座標範囲を確認したりすることで、地図表示だけでは見落としやすい不整合を見つけられます。
加工処理では、必要な地物の抽出、属性の追加、不要項目の整理、座標の調整などを行います。ただし 、加工はデータの意味を変える可能性があるため、元データを残し、処理条件を明確にし、処理前後の件数や属性を確認することが欠かせません。特に、管理番号や分類などの重要な属性を不用意に変更しないよう注意が必要です。
書き出しでは、文字コードを明示し、日本語属性が壊れないようにし、元ファイルを上書きしない運用にします。出力後は、もう一度Pythonで読み込み、地物数や属性、座標が想定通りか確認します。書き出しは成果物を作る工程なので、読み込めるか、使えるか、渡せるかまでを含めて確認することが大切です。
GeoJSONをPythonで扱えるようになると、地図データの確認や整形、抽出、台帳との連携、現地記録の整理が効率化しやすくなります。一方で、座標や属性の意味を理解せずに処理すると、位置ずれや情報欠落につながることがあります。実務では、処理を自動化するだけでなく、確認項目を定型化し、誰が見ても処理内容がわかる形にしておくことが大切です。
現場で取得した位置情報や点検記録をGeoJSONとして整理し、Pythonで読み書きできる状態にしておくと、後工程の確認や共有が進めやすくなります。スマートフォンを使った現地計測や位置記録を業務データとして活用したい場合は、取得から整理、共有までを一連の流れで考えることが重要です。現場の位置情報を手軽に記録し、GeoJSONなどの地理データ活用へつなげたい方は、利用環境や必要な精度、既存システムとの連携可否を確認したうえで、適切な記録方法やツールを検討するとよいでしょう。
LRTKで現場の測量精度・作業効率を飛躍的に向上
LRTKシリーズは、建設・土木・測量分野における高精度なGNSS測位を実現し、作業時間短縮や生産性の大幅な向上を可能にします。国土交通省が推進するi-Constructionにも対応しており、建設業界のデジタル化促進に最適なソリューションです。
LRTKの詳細については、下記のリンクよりご覧ください。
製品に関するご質問やお見積り、導入検討に関するご相談は、
こちらのお問い合わせフォームよりお気軽にご連絡ください。ぜひLRTKで、貴社の現場を次のステージへと進化させましょう。

