eyecatch

Geofabrikから都市全域のOpenStreetMapデータをQGISに追加しよう

投稿日: 最終更新日:
この記事はQGIS 3.40を使用しています。

この記事でわかること


  • Geofabrikというサイトの概要と、Geofabrikの使いどころ
  • GeofabrikのサイトからOpenStreetMapのデータをダウンロードする方法
  • OpenStreetMapの特定の地物だけを抽出する方法

こんな人におすすめ


  • QGISにOpenStreetMapのデータを追加したい方
  • GeofabrikのサイトをQGISで活用したい方

はじめに

「Geofabrik」はOpenStreetMapのデータを提供しているWebサイトです。Geofabrikを使うことで、特定の地域のデータを簡単にダウンロードすることができます。 この記事では、OpenStreetMapのデータを国や地域ごとに切り出して提供しているGeofabrikの活用方法を解説します。Geofabrikを使って地域のデータを取得し、データをQGISへ追加し、さらに郵便ポストなどの特定の地物だけを抽出する方法まで、実践的な手順を紹介します。

この記事の前提知識として、以下の記事も併せてご覧ください。

Geofabrikとは

GeofabrikはOpenStreetMapのデータを国や地域ごとに切り出したデータを公開しているWebサイトです。

GeofabrikのWebサイト
GeofabrikのWebサイト

OpenStreetMapが公式に提供するデータは地球全体を対象としたデータになっています。しかし、地球全体のデータをダウンロードすると数百GBに上るため、特定の地域のデータだけほしいという場合には不便です。

Geofabrikのサイトでは、特定の国や地域のデータを個別にダウンロードできる便利な機能を提供しています。OpenStreetMap公式のデータを、ヨーロッパや南アメリカなどの広域地域、日本やフィリピンなどの国単位、さらには北海道や四国地方などの地方単位まで、様々な規模で切り出して提供しているため、必要な地域のデータだけを入手できます。

もともと、GeofabrikはOpenStreetMapを扱うドイツの企業です。Geofabrikという企業が提供しているサイトであるためにGeofabrikと呼ばれているようです。

Geofabrikを使うメリット・デメリット

QGISでOpenStreetMapのデータを追加する方法の1つとして、QuickOSMというプラグインがあります。ただし、QuickOSMはインターネット経由でサーバーからデータを取得・抽出するため、複雑な条件や大量のデータを扱う場合は処理に時間がかかったり、データを取得できないことがあります。

この記事で紹介するGeofabrikのデータダウンロード方法は、QuickOSMと比べて広域のデータや多くの地物を扱う場合に適しています。反対に、対象地域が小さい場合や扱う地物が少ない場合は、QuickOSMを使用したほうが素早くデータを追加できます。

QuickOSMを使ったデータの追加方法については、以下の記事をご覧ください。

Geofabrikからデータをダウンロードする

Geofabrikのサイトにアクセスして実際のデータのダウンロード手順を説明します。ここでは北海道のデータを例として使用します。

Geofabrikのトップページへアクセスします。アクセスするとページ左下に「Sub Regions」という表があるので、[Asia]を探しクリックします。

「Sub Regions」表から[Asia]をクリックする
「Sub Regions」表から[Asia]をクリックする

トップページから[Asia]を選択すると以下のようなページが出てきます。「Sub Regions」の表をスクロールしていくと、「Japan」が出てくるので[Japan]をクリックします。

「Sub Regions」の表から[Japan]をクリックする
「Sub Regions」の表から[Japan]をクリックする

次に、「Sub Regions」の表から「Hokkaido」の行にある[[osm.pbf]を選択すると、ダウンロードが始まります。

「Sub Regions」の表からHokkaidoの行を探し、[.osm.pbf]をクリックする
「Sub Regions」の表からHokkaidoの行を探し、[.osm.pbf]をクリックする

GeofabrikのデータをQGISに追加してみる

次に、GeofabrikからダウンロードしてきたデータをQGISに追加してみます。

ダウンロードしたデータは.osm.pbf形式となっていますが、通常のベクタレイヤと同様にドラッグアンドドロップで簡単に追加できます。

ファイルを追加すると、以下のようなウィンドウが表示されます。Geofabrikのデータは点、線などの地物の形状ごとにQGISに取り込むかどうかを選択することができます。

そのままだと全てのアイテムが選択された状態になっている。必要なものを選択し[レイヤを追加]をクリック
そのままだと全てのアイテムが選択された状態になっている。必要なものを選択し[レイヤを追加]をクリック

ウィンドウに登場する5つのアイテムは以下の基準で地物が分類されています。

  • lines: OpenStreetMapでいうところのウェイ(way)、一般的には線(linestring)に該当します。例えば道路、線路などが該当します。
  • multilinestrings: リレーション(relation)のうち、公共交通機関のルートなど、必ずしも閉じていない(面、polygonではない)もの。例えば、バスや鉄道のルートなどが該当します。
  • multipolygons: リレーション(relation)のうち、自治体の境界やマルチポリゴン(内部がくり抜かれている面、polygon)など、閉じている(面、polygonになっている)もの、または、ウェイ(way)のうち、面(polygon)になっているもの。具体的には、建物、駐車場、自治体の境界などが該当します。
  • other_relations: リレーション(relation)のうち上記2つの条件を満たさなかったもの
  • points: OpenStreetMapでいうところのノード(node)、一般的には点(point)に該当します。郵便ポストなど点だけで表現されている地物から、線や面を構成する点なども含まれます。

例えば、郵便ポストは点として表現されるので[points]を、道路を扱いたい場合は[line]と[multilinestrings]を、建物を扱いたい場合は[multipolygons]を、それぞれ最低限選択し、[レイヤを追加]をクリックします。

今回は5つすべてを選択し[レイヤを追加]をクリックします。データの読み込みには時間がかかりますので、しばらく待ちましょう。

読み込みが完了すると、建物、線路、道路などのデータがQGISに追加されていることを確認できます。

札幌駅付近のデータが読み込まれた状態のQGISウィンドウ(©OpenStreetMap contributors )
札幌駅付近のデータが読み込まれた状態のQGISウィンドウ(©OpenStreetMap contributors

特定の地物に絞り込む

データを読み込むと分かりますが、このままでは地物が多すぎるため、処理や読み込みに時間がかかってしまいます。そこで、この章では必要なデータのみに絞って表示する方法を説明します。具体例として、コンビニエンスストアのデータのみを抽出して表示してみましょう。

まず、コンビニエンスストアは点(point)としても、建物(polygon)としても表現されます。そのため対応するレイヤであるpointsとmultipolygonsを除くレイヤは非表示にしておきましょう。

pointsとmultipolygonsレイヤのみ表示するように設定したレイヤパネル
pointsとmultipolygonsレイヤのみ表示するように設定したレイヤパネル
コンビニエンスストアは点(point)として表現される場合、建物(polygon)として表現される場合の2パターンある理由として、ビルの1テナントとして存在する場合、1つの建物として存在する場合、の2つのニュアンスを分けて表現する場合があるためです。

OpenStreetMapではコンビニの地物に「shop=convenience」というタグが付いており、通常、QGISのフィルタ機能を使えば、コンビニのみに絞り込むことができます。

しかし、GeofabrikのデータではOpenStreetMapのタグがそのままQGISの属性として扱えるようになっていない場合があります。例えば、multipolygonsレイヤには「shop」キーが属性として登録されていますが、一方でpointsレイヤには以下のように「shop」キーが「other_tags」属性の中に含まれています。

multipolygonsレイヤに登録されている地物の属性(©OpenStreetMap contributors)
multipolygonsレイヤに登録されている地物の属性(©OpenStreetMap contributors
pointsレイヤに登録されている地物の属性(©OpenStreetMap contributors)
pointsレイヤに登録されている地物の属性(©OpenStreetMap contributors

そのため、以下2つの章ではother_tags属性の中に入っているデータの扱い方2つを紹介します。

この章では「属性」「タグ」など似た語が頻繁に登場しますが、この記事では以下のように区別します。・属性: QGISにおいて、レイヤに登録されている地物(ポイント、ライン、ポリゴンなど)の位置情報に紐付けられているデータ。・タグ: OpenStreetMapにおいて、地物(ノード、ウェイ、リレーションなど)に紐付けられているデータ。

方法1: other_tags属性を文字列検索する

このようなデータ構造のなかで特定の地物だけに絞り込む最も簡単な方法は、「other_tags」属性を文字列として扱い、文字列検索することです。

属性に対して文字列検索するには、まずQGISのウィンドウ右中央にある[プロセシングツールボックス]から[ベクタ選択]→[属性による抽出]をクリックします。

[プロセシングツールボックス]から[ベクタ選択]→[属性による抽出]をクリック
[プロセシングツールボックス]から[ベクタ選択]→[属性による抽出]をクリック

[属性による抽出]を開くと、以下のようなウィンドウが開かれます。

QGISで上記条件から抽出する方法は以下のようになります。

  1. 入力レイヤ:[hokkaido-latest.osm - points]が選択されていることを確認
  2. 選択基準になる属性:[other_tags]を選択
  3. 演算子:[contains] を選択
  4. 値(Value):"shop"=>"convenience"を入力
  5. 上記の設定が完了したら、ウィンドウ右下にある[実行]をクリック
[属性による抽出]ウィンドウ
[属性による抽出]ウィンドウ

実行すると処理にいくらか時間がかかるので待ちます。処理が終了すると、メインウィンドウの左下にレイヤが追加されます。

札幌駅付近のコンビニエンスストアのデータのみ抽出された(地理院タイルを背景に、OpenStreetMapデータ(©OpenStreetMap contributors)を加工して作成)
札幌駅付近のコンビニエンスストアのデータのみ抽出された(地理院タイルを背景に、OpenStreetMapデータ(©OpenStreetMap contributors)を加工して作成)
上で紹介した手順そのままに処理を実行すると、メモリ上にレイヤが作成されます。メモリ上に作成されたレイヤは、プロジェクトファイルを保存したとしても、QGISを終了した際にデータが消えてしまうので、処理時間がかかる処理で出力されたレイヤなどはGeoPackageに保存しておくことをおすすめします。

方法2: other_tags属性から特定タグを抽出する

Geofabrikのデータの「other_tags」属性では、複数のOpenStreetMapのタグが1つのQGISの属性としてまとめられ、「HStore」という形式で保管されています。ただし、QGISではHStore形式の属性データに対してフィルタ機能が使えないなど、直接的な扱いが難しい状況です。

そのため、この章ではother_tags属性から分析や処理に必要なタグを抽出し、新しい属性として作成する前処理の方法を紹介します。

OpenStreetMapのタグを簡単に扱うには、[プロセシングツールボックス]内の[ベクタテーブル]→[HStoreフィールドを展開]が便利です。このツールを使えば、属性から特定のタグを抽出し、QGISの通常の属性として利用できるように変換できます。

[プロセシングツールボックス]から[ベクタテーブル]→[HStoreフィールドを展開]をクリック
[プロセシングツールボックス]から[ベクタテーブル]→[HStoreフィールドを展開]をクリック

今回のコンビニエンスストアを例にとってみると、OpenStreetMapでコンビニエンスストアは「shop=convenience」というタグが付与されているはずなので、other_tags属性に入っているshopキーをshop属性に変換することで、shop属性を利用してコンビニエンスストアの地物のみに絞り込むなどができます。

  1. 入力レイヤ:[hokkaido-latest.osm - points]を選択
  2. HStoreフィールド:[other_tags]を指定
  3. 選択するフィールド:今回はshopと入力します。複数のキーを属性に変換したい場合はカンマで区切って入力してください。例えばshopキーに加えてbrandキーも属性として扱いたい場合はshop,brandと入力します。
  4. 上記の設定が完了したら、右下の[実行]ボタンをクリック
「HStoreフィールドを展開」ウィンドウ
「HStoreフィールドを展開」ウィンドウ

処理に時間がかかりますが、終了すると新たなレイヤが追加されます。このレイヤは入力レイヤに含まれる地物全てをコピーした上で属性を追加しているので、pointsレイヤを覆うように表示されています。

札幌市街のpointsレイヤを表示(地理院タイルを背景に、OpenStreetMapデータ(©OpenStreetMap contributors)を加工して作成)
札幌市街のpointsレイヤを表示(地理院タイルを背景に、OpenStreetMapデータ(©OpenStreetMap contributors)を加工して作成)

属性テーブルを開くとshop属性が追加されていることがわかるかと思います。

属性テーブルを開くとshop属性が作成されている
属性テーブルを開くとshop属性が作成されている

作成されたレイヤからコンビニエンスストアのみに絞り込む場合、「属性による抽出」ツールに以下のように入力して実行します。

  1. 入力レイヤ:先程出力されたレイヤ(この場合は[出力レイヤ])が選択されていることを確認
  2. 選択基準になる属性:[shop]を選択
  3. 演算子:[=]を選択
  4. 値(Value):convenienceを入力
  5. 上記の設定が完了したら、[実行]ボタンをクリック
「属性による抽出」ウィンドウ
「属性による抽出」ウィンドウ

メインウィンドウに戻ると、コンビニエンスストアのみに絞り込みができています。

札幌駅付近のコンビニエンスストアのデータのみ抽出された(地理院タイルを背景に、OpenStreetMapデータ(©OpenStreetMap contributors)を加工して作成)
札幌駅付近のコンビニエンスストアのデータのみ抽出された(地理院タイルを背景に、OpenStreetMapデータ(©OpenStreetMap contributors)を加工して作成)

また、この下処理を行うことで、例えばブランドの値に応じて色を塗り分けて表示する、などが簡単にできるようになります。

札幌市中心部のコンビニエンスストアをbrandの値に応じて色を変えて表示(地理院タイルを背景に、OpenStreetMapデータ(©OpenStreetMap contributors)を加工して作成)
札幌市中心部のコンビニエンスストアをbrandの値に応じて色を変えて表示(地理院タイルを背景に、OpenStreetMapデータ(©OpenStreetMap contributors)を加工して作成)

おわりに

本記事では、Geofabrikからデータを取得し、QGISへ追加する方法、さらに、追加したデータから特定の地物のみに絞り込みをする方法までを解説しました。

OpenStreetMapは建物、道路や飲食店など、さまざまな地物が収録され、自由に利用できる地図データです。本記事で紹介した手順を応用すれば、OpenStreetMapから必要な地物データを抽出し、分析や地図作成に活用することが可能です。豊富なデータを活用して、独自の分析や地図作成に挑戦してみてください。

なお、OpenStreetMapのデータを利用して、地図などを作成し、公開する場合には、著作権表示などが必要になります。詳細はOpenStreetMap公式ページ「著作権とライセンス」をご覧ください。

この記事を書いた人
QGIS LAB編集部
QGIS LAB編集部

QGIS LABは、オープンソースのGISソフトウェア「QGIS」に関する総合情報メディアです。「位置から、価値へ。」をコンセプトに、位置情報で世界を拓くための知識と技術をお届けします。

関連する記事