2

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

编辑:添加上下文

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

目前我知道我可以通过这样的查询获取最大级别的信息(zoom=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>

我将城市作为城市标签中的字符串。但是,如果我想获得该城市的 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 无论如何都应该完成这项工作。艰难,城市没有可靠的对应物。

4

1 回答 1

2

好的,所以您可以通过 nominatim(反向地理编码)获得地点的纬度/经度。现在您要构建层次结构(位置 -> 城市/国家)以将您的帖子链接到专用位置。我的观点似乎有两种方法:

在线的:

我认为(目前)没有其他方法可以替代您的方法:-/ 请注意,您使用的是志愿服务。您也可以考虑通过 Overpass API 和您的 lon/lat 的小 bbox 进行查找。

另一个想法是使用维基百科关于地点的数据,这样您就可以轻松地解析层次结构。

离线:

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

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

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

于 2014-10-04T19:31:37.807 回答