2

osm2pgsql で europe.osm データベースを取得しました。そして今、私はそれを悪用しようとしています。町村の地方や都市のような方法から州、国、地域を取得する方法はありますか?

編集
http://wiki.openstreetmap.org/wiki/Nominatim
https://github.com/twain47/Nominatim

データベース OSM 形式:
http://download.geofabrik.de/osm/europe/
データベース スキーマは次のとおりです:
http://wiki.openstreetmap.org/wiki/Osm2pgsql/schema

4

2 に答える 2

1

ええと、私はあなたのデータをダウンロードしていませんが、ほとんどすべてのラテンアメリカのopenstreetmapsデータがデータベースにロードされています。

これは都市の最も近い州の例です:

select distinct on (a.name) 
   a.name as city,
   b.name as state,
   min(St_Distance(b.way, a.way)) as d 
from planet_osm_point as a, 
  (SELECT name, way, place from planet_osm_point WHERE place='state') as b 
where a.place='city' group by 1,2 order by 1 asc;

しかし、これは正確ではありません。ポリゴン テーブルを使用してより適切に推測できると考えられます。

select a.name as city,b.name as state,b.place 
from planet_osm_point as a, planet_osm_polygon as b 
where St_Contains(b.way, a.way) 
   and a.place='city'; -- and b.place='state' -- my polys table aren't tagged properly so I ignored polys.place

それがうまくいくことを願っています:)。

于 2012-04-25T02:02:26.983 に答える
1

osm2pgsql のインポートだけでなく、インストール ページで説明されているように、Nominatim を完全にインストールしていると思います。

データベースに対して直接 SQL クエリを実行するのは少し複雑です。リバース リクエストをローカル インストールに直接送信することで、管理情報をはるかに簡単に取得できます。思い通りの OSM ID を持っている場合は、 http://your.local.nominatim.server/reverse?osm_type=W&osm_id=のようなものを送信し 、返された XML を処理します。

それでも SQL の道をたどりたい場合は、placex テーブルと place_addressline テーブルを見てください。前者にはすべての OSM オブジェクトが含まれ、後者にはオブジェクト間の関係が含まれます。

于 2012-04-25T06:23:24.890 に答える