在Nominatim的指定坐标处获取城市

时间:2014-10-02 15:38:05

标签: openstreetmap reverse-geocoding nominatim

我需要使用Nominatim检索给定坐标处的城市。 按城市,我的意思是相关的OSM关系/节点及其所有属性,而不仅仅是国家名称(实际上,我真的关心osm_id,osm_type,名称和坐标)

编辑:添加了上下文

  

我运行一个平台,用户可以将帖子附加到地点。一世   使用OSM作为主数据库来帮助用户检索位置。曾经发帖   创建后,我在业务数据库中引用该位置。我想要   能够汇总城市和国家级别的帖子。所以我代表   那些有专门的桌子和典型的关系:放置n-1个城市   n-1国家。

目前我知道我可以使用如下查询获取最大级别的信息(缩放= 18):

http://nominatim.openstreetmap.org/reverse?format=xml&accept-language=fr&lat=43.8338&lon=4.3596&zoom=18&addressdetails=1

产生包括城市名称在内的重要信息:

  <reversegeocode timestamp="Thu, 02 Oct 14 15:16:11 +0000" attribution="Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright" querystring="format=xml&accept-language=fr&lat=43.8338&lon=4.3596&zoom=18&addressdetails=1">
    <result place_id="6643770" osm_type="node" osm_id="680342651" lat="43.833464" lon="4.3596107">3, Rue de la République, Écusson, La Placette, Nîmes, Nimes, Gard, Languedoc-Roussillon, France métropolitaine, 30000;30900, France</result>
    <addressparts>
            <house_number>3</house_number>
            <road>Rue de la République</road>
            <neighbourhood>Écusson</neighbourhood>
            <suburb>La Placette</suburb>
            <city>Nîmes</city>
            <county>Nimes</county>
            <state>Languedoc-Roussillon</state>
            <country>France</country>
            <postcode>30000;30900</postcode>
            <country_code>fr</country_code>
    </addressparts>
 </reversegeocode>

我将城市作为 city 标记中的字符串。但是如果我想获得该城市的OSM点,我必须继续进行另一个查询:

http://nominatim.openstreetmap.org/search?format=xml&city=N%C3%AEmes&=state=France+m%C3%A9tropolitaine&country=France&limit=1

优化此项目的最佳途径是什么?

由于我运行自己的Nominatim实例,如果这是最好的选择,我可能会选择SQL,但是我必须在Nominatim中创建一个新的端点,并且所有维护都很复杂......

我需要国家/地区的相同功能。 对于国家,我发现参数zoom = 1应该可以完成任务。很难,城市没有可靠的对应物。

1 个答案:

答案 0 :(得分:2)

好的,你可以通过nominatim(反向地理编码)获得一些地方。现在,您要构建层次结构(位置 - &gt;城市/国家/地区),以将您的帖子链接到专用位置。 我的观点似乎有两种方式:

<强>在线:

我看到(目前)无法替代您的方法: - /请注意您使用的是自愿服务。您也可以考虑通过Overpass API和lon / lat的小型bbox进行查找。

另一种想法是在地点上使用 Wikipedia 数据,这样您就可以轻松地解析层次结构。

<强>离线:

除了发送API查询之外,您可能还想设置自己的工作流程。例如。具有导入的边界Shapefile的PostGIS DB。这使您可以完全控制并且不会强调公共资源。请注意,边界的质量/覆盖范围在OSM上并不总是很好。

这两种方法都可能允许您进行预处理,因此您的最终请求可以针对本地数据库存储运行。

P.S:我不是律师,但这听起来像是你创建了一个混合数据库,它依赖于OSM材料的基础部分。您可能还需要在数据库中应用ODbL:https://wiki.openstreetmap.org/wiki/Legal_FAQ