OverpassTurboレシピ集

OverpassTurboで使えるクエリのレシピ集

初版公開日:
最終更新日:

基本の抽出

Overpass Turboクエリの基本は、「どのタグを持つOSMオブジェクトを探すか」を指定することです。OpenStreetMapでは、オブジェクトの情報はすべてkey=value形式のタグで意味付けされています。 本稿では、基本的な抽出方法から順番に紹介します。

本稿で提示するレシピは、各自で必要なkeyおよびvalueに置き換えてください。

ノードの抽出

node["key"="value"];
out meta;
タグkeyの値がvalueのnodeをすべて抽出する。 詳細情報(meta)を取得する。

ウェイの抽出

way["key"="value"];
(._;>;);
out meta;
線形のwayおよび線が閉じた図形を描く建物等のareaのオブジェクトを抽出する。

(._;>;)によってwayの各頂点のnode情報も取得する。OverpassTurbo上の地図でwayをレンダリングするには必要。

リレーションの抽出

relation["key"="value"];
(._;>;);
out meta;
複数のnodeないしwayを紐づけたrelationを抽出する

nwrによる抽出

nwr["key"="value"];
(._;>;);
out meta;
node,way,relationの3つを同時抽出する
// 使用可能なキーワード
nwr nw nr wr
3つ全部乗せである必要はなく、Node+Way(nw)のような組み合わせも可

標準的なクエリの姿

OverpassTurboでクエリを実行する際は、以下の状態で実行することが推奨される。

[timeout:25];
nwr["key"="value"]({{bbox}});
(._;>;);
out meta;
timeout指定により、過負荷なクエリでもサーバー処理の打ち切りを認める(秒数を指定)。 ({{bbox}})により画面で表示している範囲に抽出対象を限定。 out構文(後述)により後続作業で必要な形式に変更が可能

タグによる抽出

キーの指定

node["government"];
out meta;
指定したキーが付けられているオブジェクトの抽出

キーと値の指定

node["office"="it"];
out meta;
基本の抽出に同じ。キーofficeの値がitのノードを抽出するクエリ例

正規表現による抽出

通常、キーを厳密に指定し、値については柔軟な検索を適用します。部分一致、前方一致、後方一致、完全一致、OR検索、除外検索など、Overpass Turboで使える正規表現をサンプルクエリ付きで紹介します。

// name(指定したキー)の値の一部に「北村」を含む(部分検索)
node["name"~"北村"]; // ["name"~".*北村.*"]とする必要はありません
node["name"~"北.*衣"]; // 「北…衣」という並びを含む(…は任意の文字列)

// 指定値で始まる(先頭一致検索)
node["name"~"^合同会社"]; 

// 指定値で終わる(末尾一致検索)
node["name"~"由衣$"]; 

// 完全一致検索。^$の合わせ技
node["name"~"^合同会社北村由衣$"];
// 「北村」で始まり、途中は何文字でも可(0文字以上)、「由衣」で終わる
node["name"~"^北村.*由衣$"]; 

// 除外検索(「由依」を含まない)
node["name"!~"由依"]; 

// 大文字小文字を区別しない
node["name:en"~"yui-kitamura",i];

// パイプ|で繋いだ候補のOR条件。この例では「白猫」OR「灰猫」OR「黒猫」
node["name"~"(白|灰|黒)猫"];

// 英字を1文字以上含む
node["name"~"[a-zA-Z]"];

// 半角数字を含まない
node["name"!~"[0-9]"];
各種正規表現による値の条件指定

Overpassは[POSIX Extended 正規表現]を使用しています。興味がある方はインターネットの海へどうぞ…。

キーへの正規表現の適用

一方で、キー側にも正規表現は適用可能です。

// キーの前に~を付与する
node[~"addr:.*"~"清瀬"];
住所やnameなど、サブキーに展開されるキー群の「いずれか」に値が含まれることを抽出する

addr:cityに限らず、addr:fullやaddr:streetなど意図しないタグへの値混入検知に活用できる。

タグが存在するオブジェクト

node["name"]["name:ja"]["name:en"];
out meta;
列挙された3タグがすべて付与されているnodeを抽出する(AND条件)
(
  node["name"];
  node["name:ja"];
  node["name:en"];
);
out meta;
列挙された3タグのいずれかが付与されているnodeを抽出する(OR条件)

タグが存在しないオブジェクト

node[!"name"];
out meta;
キーの前に!を付けることで無いことを抽出します
node["name"][!"name:ja"];
out meta;
タグの存在とOR条件で、「nameは有るが、name:jaが無い」を検索する例
node["name"~"^合同会社"][!"name:ja"];
out meta;
複合条件として処理可能。「nameが合同会社で始まっているが、name:jaを持たないノードを検索する例

範囲を限定した抽出

現在の表示範囲

nwr["key"="value"]({{bbox}});
(._;>;);
out meta;
bboxでOverpassTurboの地図ビューの範囲に絞ります

areaによる抽出

area["boundary"="administrative"]["admin_level"="7"]["name"="清瀬市"]->.a;
nwr(area.a)["addr:province"];
(._;>;);
out meta;
市レベルの行政区(例では清瀬市)の境界で囲まれた範囲(.aでラベル付け)に含まれるnwrを抽出するクエリ

特定の地域内にあるamenity(学校や病院など)を抽出するのに使える。

日本の行政区分とadmin_level

上記クエリで求められるadmin_levelと日本の行政区分の対応は以下の表の通り。

行政区分との対応表
admin_level行政区分addr:*name値の例
2国addr:country日本
4都道府県addr:province東京都
5振興局-
6郡addr:county中巨摩郡
7市町村・東京23区addr:city千代田区
8政令指定都市の区addr:suburb浪速区
9町・大字addr:quarter大字北京田
10小字・丁目addr:neighbourhood野塩五丁目

周辺範囲探索

指定座標または指定POIからの周辺範囲(円形)を探索することができます。

経緯度指定

// 指定座標(北緯35.7,東経139.8)から半径500m以内のレストランを抽出する
node(around:500,35.68095,139.76699)["amenity"="restaurant"];
out meta;
指定座標(緯度(例:35.68095)・経度(例:139.76699))から指定メートル数範囲のPOIを抽出する

POI基準の探索

// 1行目の検索結果のPOI(複数の結果が返って良い)から半径200m以内のレストランを抽出する
node["railway"="station"]["name"~"甲府"]->.s;
node(around.s:200)["amenity"="restaurant"];
out meta;
範囲検索の基準を検索してヒットしたPOIを中心とする例

更新履歴による抽出

nwr(newer:"2026-07-14T15:00:00Z"); // UTC時刻(日本時間から9時間遅れている)= 左記サンプルは日本時間7/15未明0時
(._;>;);
out meta;
指定時刻より後に編集された要素を抽出する

["tag"]等との組み合わせ可。

※逆のolderは存在しない

指定期間内の編集情報

nwr
  (changed:"2026-07-12T00:00:00","2026-07-13T00:00:00")
  ({{bbox}});
(._;>;);
out meta;
2つの時刻の間に編集されたオブジェクトを抽出する

ユーザーによる抽出

nwr(user:"myId")(newer:"2026-07-14T15:00:00Z"); // 表示名であれば他のユーザーの抽出も当然に可能
(._;>;);
out meta;
このサンプルクエリでは、指定ユーザーによる指定時刻以後の編集をすべて抽出する

出力方法

out

nwr["building"][!"building:levels"];
out;
OSMオブジェクトのIDのみを列挙する

件数の確認や、別ツールでIDがあれば別途必要なデータを抜き出せる場合に利用できる。

out geom

nwr["name"="合同会社北村由衣"];
out geom;
geom形式でのデータを返してもらう

地図にするための基本の出力。GeoJSONへの応用が可能な形式。

out center

nwr["building"][!"building:levels"];
out center;
エリア(建物や公園など)から代表点(中心)の座標を返す

建物を面ではなく点で把握して分布を見るときなどに利用できる

out meta

nwr["source"="KSJ2"][!"addr:neighbourhood"];
(._;>;);
out meta;
最後の編集時点などのmeta情報も取得する。Level0への流し込みなどで必要

out qt

nwr["source"="KSJ2"][!"addr:neighbourhood"];
(._;>;);
out meta center qt;
既定ではID昇順に並べられたデータが返ってくるが、地理分布概ねそのまま返すオプションがqt。 他のout条件と組み合わせ可能

実践レシピ集

実際のマッピング作業で活用できる、より実践的なクエリレシピを紹介します。

品向会に使える編集抽出レシピ集

OpenStreetMapの品向会などで、編集履歴を確認する際に使えるレシピ集です。

指定期間中の編集を抽出する

[timeout:30];
// 日本時間2026年7月の1ヶ月間
nwr(changed:"2026-06-30T15:00:00Z","2026-07-31T14:59:59Z")({{bbox}});
(._;>;);
out meta;
指定した期間内に編集されたすべてのオブジェクトを抽出する

指定地域で最近編集されたオブジェクトを抽出する

[timeout:30];
area["boundary"="administrative"]["admin_level"="7"]["name"="清瀬市"]->.a;
nwr(area.a)(newer:"2026-07-07T15:00:00Z");
(._;>;);  
out meta;
特定の行政区域内(admin_level表参照)で、指定日時以降に編集されたオブジェクトを抽出する

指定地域で自分が編集したオブジェクトを抽出する

[timeout:30];
area["boundary"="administrative"]["admin_level"="7"]["name"="清瀬市"]->.a;
nwr(area.a)(user:"myUserName");
(._;>;);
out meta;
特定の行政区域内で、指定ユーザーが編集したすべてのオブジェクトを抽出する。ユーザー名を自分の表示名に置き換えて使用

指定地域で自分が最近編集したオブジェクトを抽出する

[timeout:30];
area["boundary"="administrative"]["admin_level"="7"]["name"="清瀬市"]->.a;
nwr(area.a)(user:"myUserName")(newer:"2026-07-01T00:00:00Z");
(._;>;);
out meta;
特定の行政区域内で、自分が指定日時以降に編集したオブジェクトを抽出する

特定タグだけ編集状況を確認する

[timeout:30];
nwr["building"](newer:"2026-07-01T00:00:00Z")({{bbox}});
(._;>;);
out meta;
特定のタグ(この例ではbuilding)を持つオブジェクトの、指定期間内の編集を抽出する

KSJ2由来オブジェクトだけ抽出する

[timeout:30];
nwr["source"="KSJ2"]({{bbox}});
(._;>;);
out meta;
国土数値情報(KSJ2)から取り込まれたオブジェクトを抽出する。古いインポートデータの更新作業などに活用

住所体系の品質チェックレシピ集

日本の住所タグ(addr:*)の品質をチェックするためのレシピ集です。

addr:* を持つが addr:province が無い

[timeout:30];
nwr[~"addr:.*"~".*"][!"addr:province"]({{bbox}});
(._;>;);
out meta;
何らかの住所タグを持つが、都道府県(addr:province)が欠落しているオブジェクトを検出する

addr:* を持つが addr:block_number が無い

[timeout:30];
nwr[~"addr:.*"~".*"][!"addr:block_number"]({{bbox}});
(._;>;);
out meta;
何らかの住所タグを持つが、街区符号・地番(addr:block_number)が欠落しているオブジェクトを検出する

日本住所タグ一式が揃っているか確認する

[timeout:30];
nwr["addr:province"]["addr:city"]["addr:neighbourhood"]["addr:block_number"]({{bbox}});
(._;>;);
out meta;
日本の標準的な住所タグ一式(都道府県・市区町村・丁目・番地)がすべて揃っているオブジェクトを抽出する

想定外の addr:* サブキーを検出する

[timeout:30];
nwr[~"addr:.*"~".*"][!"addr:postcode"][!"addr:country"][!"addr:province"][!"addr:county"]
   [!"addr:city"][!"addr:suburb"][!"addr:quarter"][!"addr:neighbourhood"][!"addr:block_number"]
   [!"addr:housenumber"][!"addr:housename"][!"addr:floor"][!"addr:room"]
   ({{bbox}});
(._;>;);
out meta;
日本で標準的に使用されるaddr:*サブキー以外のタグを持つオブジェクトを検出する。データ品質チェックに活用

addr:street を使用しているオブジェクトを検出する

[timeout:30];
nwr["addr:street"]({{bbox}});
(._;>;);
out meta;
addr:street(道路名による住所表記)を持つオブジェクトを検出する

米軍基地内などの例外を除き、addr:streetは日本では使用しない

全角数字を含む住所タグを抽出

[timeout:30];
nwr[~"addr:.*"~"(0|1|2|3|4|5|6|7|8|9)"]({{bbox}});
(._;>;);
out meta;
何らかの住所タグ(addr:*)に全角数字(0-9)を含むオブジェクトを検出する

住所タグには半角数字を使用するのが標準であり、全角数字が含まれている場合はデータ品質の問題として修正が必要。また、一般には、「千代田一丁目」のように「~丁目」は漢数字である。

その他レシピ集

様々な場面で活用できる汎用的なレシピ集です。

name と name:* をまとめて検索する

[timeout:30];
nwr[~"name(:.*)?"~"北村"]({{bbox}});
(._;>;);
out meta;
name、name:ja、name:en など、name系タグのいずれかに指定文字列を含むオブジェクトをまとめて検索する

official_name など名称系一括検索

[timeout:60]; //負荷が高いのでtimeoutは大きめに
nwr[~"^(.*_)?name(:.*)?$"~"Yui-Kitamura",i];
(._;>;);
out meta;
name、official_name、name:en など、name系タグのいずれかに指定文字列を含むオブジェクトをまとめて検索する

addr:* をまとめて検索する

[timeout:30];
nwr[~"addr:.*"~"清瀬"]({{bbox}});
(._;>;);
out meta;
addr:city、addr:quarterなど、addr:*系タグのいずれかに指定文字列を含むオブジェクトをまとめて検索する

行政界内の POI を抽出する

[timeout:30];
area["boundary"="administrative"]["admin_level"="7"]["name"="清瀬市"]->.a;
nwr(area.a)["amenity"];
(._;>;);
out meta;
特定の行政区域内にあるすべてのPOI(amenityタグを持つオブジェクト)を抽出する

特定タグを持つ建物だけ抽出する

[timeout:30];
nwr["building"]["amenity"="school"]({{bbox}});
(._;>;);
out meta;
建物タグと特定のamenityタグ(この例では学校)の両方を持つオブジェクトを抽出する

建物だが住所が付いていないものを抽出する

[timeout:30];
nwr["building"][!"addr:block_number"]({{bbox}});
(._;>;);
out meta;
建物タグを持つが住所タグ(特にaddr:block_number)が付いていないオブジェクトを検出する

名前のない POI を抽出する

[timeout:30];
nwr["amenity"][!"name"]({{bbox}});
(._;>;);
out meta;
amenityタグを持つが名前(nameタグ)が付いていないPOIを検出する

正規表現を組み合わせた複合検索

[timeout:30];
nwr["name"~"^(株式会社|合同会社)"][~"name.*"~".*"][!"name:ja"]({{bbox}});
(._;>;);
out meta;
複数の正規表現を組み合わせた複雑な検索例。 この例では「会社名で始まり、name系タグを持つがname:jaが無いオブジェクト」を検出

差分チェック用クエリ

[timeout:30];
[diff:"2026-06-30T15:00:00Z","2026-07-01T15:00:00Z"];
nwr({{bbox}});
out meta;
指定した2つの時点間での差分を抽出する

(changed:T1,T2)クエリとの違いは、diffでは削除されたオブジェクトも拾える点。 現存するオブジェクトのデータを確認したい場合はchangedを普段使いすれば良いだろう。



このエントリーをはてなブックマークに追加


[広告]Google提供