Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Free OpenStreetMap Locality Dataset: Cities, Towns, Villages & Hamlets in NDJSON

2025年09月19日に「Dev.to」が公開したITニュース「Free OpenStreetMap Locality Dataset: Cities, Towns, Villages & Hamlets in NDJSON」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Geoapifyは、都市・町・村などのOpenStreetMap地域データを、開発者が使いやすいNDJSON形式で無償提供する。重複処理やデータ整形の手間を省き、国ごとの行政境界や多言語名を収録し、地理情報システム開発を効率化する。

ITニュース解説

現代のデジタル世界では、スマートフォンアプリの道案内からWebサイトでの店舗検索、都市計画まで、様々なシステムで地図や場所に関する地理情報が不可欠な要素となっている。しかし、これらの地理情報を実際にシステムで使えるように準備するのは、想像以上に大変な作業だ。特に「都市」「町」「村」といった地域の情報は絶えず変化し、その境界線や名称、関連する属性(人口など)を正確に、かつ最新の状態に保つことは非常に難しい。OpenStreetMap(オープンストリートマップ、OSM)は、世界中の人々が協力して作成している非常に詳細で豊かな地図データだが、その生データは多岐にわたり、そのままではシステム開発者がすぐに利用できる形ではないことが多い。例えば、同じ場所が複数のデータとして存在したり、行政区画の境界が複雑に絡み合っていたりするため、開発者はデータを整理し、重複を取り除き、使いやすい形に加工するために多くの時間を費やしている。

この課題を解決するため、Geoapifyという企業が、OpenStreetMapの地域情報を整理し、すぐに利用できる無料のデータセットとして公開した。このデータセットには、世界の各国の「都市」「町」「村」「集落」といった居住地の情報が、行政境界や多言語での名称とともにまとめられている。システムエンジニアを目指す皆さんにとって、このような整理されたデータが提供されることは、地理情報を扱うアプリケーション開発の敷居を大きく下げる、非常に大きなメリットとなるだろう。

このデータセットはNDJSON(Newline-Delimited JSON)という形式で提供される。JSON(JavaScript Object Notation)は、Webアプリケーションでよく使われる、データを構造化して表現するための形式だが、NDJSONはそのJSONのオブジェクトが一行ごとに区切られて並んだ形式だ。これは通常のJSONファイルが全体のデータを一つの大きな配列として扱うのとは異なり、各行が独立した一つのデータレコードとなっている。このNDJSON形式の大きな利点は、ファイル全体を一度に読み込む必要がなく、一行ずつデータを読み込んで処理できる点にある。そのため、非常に大きなデータファイルでも、メモリを大量に消費することなく、効率的にストリーミング処理したり、他のツールにパイプで渡して処理したりすることが可能になる。データベースへの一括インポートにも適しており、例えばBigQueryやElasticsearch、Snowflake、PostgreSQLといった様々なデータストアで、このNDJSON形式を直接利用できる。

Geoapifyのデータセットは、国ごとにZIPファイルとしてまとめられている。例えばドイツのデータであれば、「de.zip」のようなファイル名で提供され、そのZIPファイルの中には、「place_city.ndjson」(都市のデータ)、「place_town.ndjson」(町のデータ)、「place_village.ndjson」(村のデータ)、「place_hamlet.ndjson」(集落のデータ)というように、場所の種類ごとにファイルが分かれている。これにより、必要な種類のデータだけを選んで読み込み、無駄な前処理なしに利用を開始できる。

各NDJSONファイルの一行は、特定の地域に関する詳細な情報を持つJSONオブジェクトになっている。例えば、以下のような情報が含まれる。

  • osm_typeosm_id:OpenStreetMapでその場所を特定するためのユニークな識別子。
  • type:その場所の種類。「city」(都市)、「town」(町)、「village」(村)、「hamlet」(集落)など。
  • nameother_names:その場所の主要な名前と、英語や日本語など多言語での名前のバリエーション。これにより、多言語対応のアプリケーションを簡単に構築できる。
  • display_name:人間が読んで理解しやすい、完全な地名。
  • address:国、地域、行政区画といった構造化された住所情報。
  • population:報告されている人口データ。
  • location:その場所の中心を表す緯度と経度の座標。
  • bbox:その場所のおおよその範囲を示す境界ボックス(最小緯度・経度、最大緯度・経度)。
  • border:その場所の行政境界を表すデータ。OpenStreetMapの行政区画データに基づいて、その地域の物理的な境界線が含まれる。これは、特定のエリアがどこまでかを視覚化したり、地理的な計算を行う際に非常に役立つ。
  • inferred_type:OpenStreetMapのデータに明確な場所の種類(例: place=city)が指定されていなかった場合でも、Geoapifyのシステムがその場所の種類を推測した際に付与される情報。これは、より多くの場所データをカバーするのに役立つが、必要に応じてフィルターすることも可能だ。

このデータセットは、Geoapifyが提供するPlace Details APIと連携させることで、さらに価値を高めることができる。データセット内の osm_idosm_type を利用してAPIを呼び出すと、その場所の営業時間、より詳細なジオメトリ(形状データ)など、豊富な追加情報を取得できる。例えば、ある都市の境界線情報をデータセットで取得し、その都市にある特定の店舗の開店時間をAPIで確認するといった使い方が可能だ。

この整理されたデータセットは、システムエンジニアの様々なプロジェクトで活用できる。地図上に場所の中心座標や行政境界データを使って、Web地図上に都市や村を素早く表示したり、データセットを空間データベースにロードし、他の人口統計データやビジネスデータと組み合わせて地域ごとの特性を分析したりできる。また、ユーザーが特定の地域(都市、町など)の中にいるかどうかを判断する機能(ジオフェンシング)を構築する際にも、border プロパティの境界データが非常に役立つだろう。other_names フィールドを利用すれば、多言語対応の地名検索機能や、過去の名称を用いた検索機能などを簡単に実装できる。さらに、定期的にデータセットをダウンロードし、前のバージョンと比較することで、OpenStreetMapにおける場所データの変更や異常を検出するシステムを構築することも可能だ。NDJSON形式のため、必要な国のデータだけを選んでクライアントデバイスに配布し、インターネット接続がない環境や、低レイテンシーが求められるエッジ環境でも利用できる。

ただし、データを利用する上での注意点もいくつかある。行政境界のデータはOpenStreetMapの情報の正確性に依存するため、一部の地域では境界がうまく一致しない場合や、データが不足している場合がある。また、人口データもOpenStreetMapのタグ付けに基づいているため、公式の統計データと比較して検証することが推奨される。inferred_type のデータはシステムが推測したものなので、明示的にタグ付けされた場所データのみを使いたい場合はフィルタリングが必要となる。

最後に、このデータセットはOpenStreetMapから派生したものであり、Open Database License(ODbL)というライセンスのもとで配布されている。そのため、このデータセットを利用して何かを公開する際には、「© OpenStreetMap contributors」とGeoapifyへのクレジット表示を必ず行い、派生するデータベースも同じライセンスで公開する必要がある。これは、オープンデータを利用する上での基本的なルールであり、遵守することが求められる。

このように、Geoapifyが提供するこの無料のOpenStreetMap地域データセットは、生データの扱いに苦労することなく、様々な地理情報システムを開発したいと考えるシステムエンジニアにとって、非常に強力で手軽なツールとなるだろう。

関連コンテンツ

関連IT用語