自分でデータ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周りがよく理解できておらず追いきれない状況になってしまいました。
あなたの回答
tips
プレビュー