如何使用 Open Street Maps API 从坐标中获取地址?

How to get the address from coordinates with Open Street Maps API?

我在 Cordova 中开发了一个开源应用程序(它使用 Javascript)并且我正在使用 Google 地图 API,尽管随着应用程序越来越流行,我的账单正在增加(对于免费、无广告的应用程序来说不是很好)。因此,我想转到 Open Street Maps。

我一直在阅读要使用的 docs about the Overpass API but I see no simple clear examples of code implementation. I know the sever,我应该使用 HTTP GET 请求并使用其特殊的 XML 语法。但不清楚如何将 XML 传递给 GET 请求。此外,关于坐标的例子提供了一个边界框作为输入,而不是一个点(或者一个点被认为是一个角相同的正方形?)。

<union>
  <bbox-query s="51.249" w="7.148" n="51.251" e="7.152"/>
  <recurse type="up"/>
</union>
<print mode="meta"/>

能否请您在 Javascript 中提供一个简单示例(例如 $.ajax),说明如何通过向 [=21= 提供地理坐标来获取特定位置的地址? ]?

几个小时后,我与您分享了可行的解决方案。显然,我们应该使用 Nominatim service from Open Street Maps, and therein the reverse geocoding service. Please read the usage policy 来避免滥用,因为这是一项完全免费的服务。

$.ajax({
  url: "https://nominatim.openstreetmap.org/reverse",
  data: {
    lat: 38.748666,
    lon: -9.103002,
    format: "json"
  },
  beforeSend: function (xhr) {
    xhr.setRequestHeader(
      'User-Agent',
      'ID of your APP/service/website/etc. v0.1'
    )
  },
  dataType: "json",
  type: "GET",
  async: true,
  crossDomain: true
}).done(function (res) {
  console.log(res.address)
}).fail(function (error) {
  console.error(error)
})