質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostGIS

PostGISは、 PostgreSQLデータベースに地理空間情報を導入するための拡張です。ジオメトリ型、幾何関数、空間インデクスなどの機能が導入され、場所・移動・地域の情報などが扱い易くなります。

Q&A

0回答

2345閲覧

OpenStreetMapデータをimportしたOpenStreetMap Nominatimで公式のエンドポイント異なる結果が返る

i_love_perl

総合スコア17

PostGIS

PostGISは、 PostgreSQLデータベースに地理空間情報を導入するための拡張です。ジオメトリ型、幾何関数、空間インデクスなどの機能が導入され、場所・移動・地域の情報などが扱い易くなります。

0グッド

0クリップ

投稿2017/05/12 18:01

自分でデータimportしたNominatimのサーバへの逆ジオコーディングのリクエスト結果が公式のエンドポイントにリクエストした結果と一部地域で異なるものになってしまいます。

何度か試してみましたが必ず同じ結果になってしまいます。

公式にリクエストを投げると

$shell> curl "http://nominatim.openstreetmap.org/reverse?format=json&lat=34.63356018066406&lon=135.53524780273438&zoom=18&addressdetails=1" | jq . { "boundingbox": [ "34.6316972", "34.6316991", "135.5348612", "135.5349827" ], "place_id": "148949807", "licence": "Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright", "osm_type": "way", "osm_id": "384528515", "lat": "34.6316991", "lon": "135.5349827", "display_name": "水門橋, 東住吉区, 大阪市, 大阪府, 5460002, 日本", "address": { "country_code": "jp", "country": "日本", "postcode": "5460002", "state": "大阪府", "city": "大阪市", "suburb": "東住吉区", "path": "水門橋" } }

自分でimportしたサーバにリクエストを投げると

$shell> curl "http://localhost/reverse?format=json&lat=34.63356018066406&lon=135.53524780273438&zoom=18&addressdetails=1" | jq . { "place_id": "972762", "licence": "Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright", "osm_type": "way", "osm_id": "384528515", "lat": "34.6316991", "lon": "135.5349827", "display_name": "水門橋, 東住吉区, 大阪市, 泉北郡, 大阪府, 5440034, 日本 (Japan)", "address": { "path": "水門橋", "suburb": "東住吉区", "city": "大阪市", "county": "泉北郡", "state": "大阪府", "postcode": "5440034", "country": "日本 (Japan)", "country_code": "jp" }, "boundingbox": [ "34.6316972", "34.6316991", "135.5348612", "135.5349827" ] }

上記のように大阪市の一つ上に泉北郡が入ってしまいます。

質問したいこと

https://github.com/openstreetmap/Nominatim/blob/master/docs/Import_and_update.md

./utils/setup.php --osm-file ../../planet-latest.osm.pbf --all --osm2pgsql-cache 28000

上記のimportの手順以外にデータをimportする際に気をつけなければいけないことはありますか?

どのようにしたら公式の結果と同じ結果を得ることができるのでしょうか?

調べたこと

実際にpostgresqlの中のplacex tableの大阪市を見てみると、

nominatim=# select parent_place_id, place_id, type, name, admin_level, osm_type, osm_id, rank_search from placex where place_id = 1059308; -[ RECORD 1 ]---+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ parent_place_id | 105034 place_id | 1059308 type | administrative name | "name"=>"大阪市", "name:ca"=>"Osaka", "name:de"=>"Osaka", "name:en"=>"Osaka", "name:eo"=>"Osako", "name:et"=>"Ōsaka", "name:fr"=>"Ōsaka", "name:hi"=>"ओसक", "name:ia"=>"Osaka", "name:io"=>"Osaka", "name:ja"=>"大阪市", "name:kn"=>"ಓಸಕ", "name:ko"=>"오사카 시", "name:lt"=>"Osaka", "name:pl"=>"Osaka", "name:ru"=>"Осака", "name:sl"=>"Osaka", "name:sv"=>"Osaka", "name:uk"=>"Осака", "name:zh"=>"大阪市", "name:jbo"=>".osakas.", "name:ja_rm"=>"Ōsaka-shi", "name:ja_kana"=>"おおさかし" admin_level | 7 osm_type | R osm_id | 358674 rank_search | 14

そして、大阪市(Relation)のparent_location_idを調べると

nominatim=# select parent_place_id, place_id, type, name, admin_level, osm_type, osm_id, rank_search from placex where place_id = 105034; -[ RECORD 1 ]---+-------------------------------------------------------------------------------------------------- parent_place_id | 1059230 place_id | 105034 type | county name | "name"=>"泉北郡", "name:en"=>"Senboku District", "name:ja"=>"泉北郡", "name:ja_rm"=>"Senboku-gun" admin_level | 15 osm_type | N osm_id | 551364644 rank_search | 12

osm_typeがノードである泉北郡が入ってしまいます。

osmの生データを見ても、泉北郡(Node)は泉北郡(Relation)のlabel memberで、relation的には大阪市の上位にくるような場所には見えませんでした。

泉北郡(Node)のparent_place_idは

nominatim=# select parent_place_id, place_id, type, name, admin_level, osm_type, osm_id, rank_search from placex where place_id = 1059230; -[ RECORD 1 ]---+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- parent_place_id | 0 place_id | 1059230 type | administrative name | "name"=>"大阪府", "name:en"=>"Osaka Prefecture", "name:ja"=>"大阪府", "name:ko"=>"오사카 부", "name:pl"=>"Prefektura Osaka", "name:ru"=>"Осака", "name:uk"=>"Префектура Осака", "name:ja_rm"=>"Ōsaka-fu", "name:ja_kana"=>"おおさかふ" admin_level | 4 osm_type | R osm_id | 341906 rank_search | 8

大阪府(Relation)になっていました。

rank_searchが大阪市(Relation)>泉北郡(Node)になっているのでproceduerの中以下の処理あたりで

https://github.com/openstreetmap/Nominatim/blob/master/sql/partition-functions.src.sql#L87-L112
https://github.com/openstreetmap/Nominatim/blob/master/sql/functions.sql#L1767-L1782

なんかparent_place_idに入りそうな気もしたのですが、geometry周りがよく理解できておらず追いきれない状況になってしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問