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

我假设您已按照安装页面上的说明进行了完整的 Nominatim 安装,而不仅仅是 osm2pgsql 导入。

直接在数据库上执行 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 回答