我需要使用Nominatim检索给定坐标处的城市。 按城市,我的意思是相关的OSM关系/节点及其所有属性,而不仅仅是国家名称(实际上,我真的关心osm_id,osm_type,名称和坐标)
编辑:添加了上下文
我运行一个平台,用户可以将帖子附加到地点。一世 使用OSM作为主数据库来帮助用户检索位置。曾经发帖 创建后,我在业务数据库中引用该位置。我想要 能够汇总城市和国家级别的帖子。所以我代表 那些有专门的桌子和典型的关系:放置n-1个城市 n-1国家。
目前我知道我可以使用如下查询获取最大级别的信息(缩放= 18):
产生包括城市名称在内的重要信息:
<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点,我必须继续进行另一个查询:
优化此项目的最佳途径是什么?
由于我运行自己的Nominatim实例,如果这是最好的选择,我可能会选择SQL,但是我必须在Nominatim中创建一个新的端点,并且所有维护都很复杂......
我需要国家/地区的相同功能。
对于国家,我发现参数zoom = 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