如何从postgis(nominatim import)获取某个城市的区域管理?

时间:2012-04-20 07:38:31

标签: postgresql openstreetmap postgis nominatim

我用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

2 个答案:

答案 0 :(得分: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

希望它有效:)。

答案 1 :(得分:1)

我认为你有一个完整的Nominatim安装,如installation page所述,而不仅仅是osm2pgsql导入。

直接对数据库执行SQL查询有点牵扯。通过将反向请求直接发送到本地安装,您可以更轻松地获取管理信息。如果您拥有自己的OSM ID,请发送以下内容: http://your.local.nominatim.server/reverse?osm_type=W&osm_id=并处理返回的XML。

如果您仍想沿着SQL路走下去,请查看placex和place_addressline表。前者包含所有OSM对象,后者包含它们之间的关系。