6

是否有任何用于 OpenStreetMap 的 API 允许我获取距参考位置一定距离(例如 10 英里)内的 POI 列表?

4

3 回答 3

8

据我所知,API 不直接支持这一点。最简单的方法是选择一个适合您的圆圈的(准)矩形边界框,并使用它来检索您的兴趣点。然后,您可以对每个兴趣点进行距离计算,并丢弃超出您半径的那些。这将删除靠近框角的一小部分 POI,因此不在您的圈子内。您希望按此顺序执行此操作,以便您只需在相对较少的目标位置上进行距离计算。

不要忘记边界框是由纬度/长角定义的,所以它不是真正的矩形。经线在两极处汇合,因此盒子的顶部与底部的宽度不同。这对您的影响程度取决于您与电线杆的距离(长度的度数 ~= (40000km / 360) * cos (lat))。

如果您不需要极高的精度,那么您可以使用毕达哥拉斯定理计算距离,记住经度的余弦变化和因子 2 单位差(经度 360 度,但纬度只有 180 度)。如果您确实需要准确性,那么您就进入了球面三角学的领域,并且还需要考虑椭球体。这是一个在线计算器,包含方程式和开源代码,在这方面很有帮助。

于 2009-09-06T00:26:02.823 回答
6

是的。Overpass API 有一个“Around”功能,可以做到这一点(搜索给定点半径内的项目)。您可以将其与其他要求结合起来(例如,获取特定项目类型的列表):

http://wiki.openstreetmap.org/wiki/Overpass_API#Around

例如使用 OverPass Turbo Api(列出“西班牙曼萨纳雷斯”附近的所有城镇,经纬度半径为 150 公里,现场试用!):

<osm-script output="json" timeout="25">
  <id-query {{nominatimArea:Spain}} into="area"/>
  <query type="node">
    <has-kv k="place" modv="" v="town"/>
  <around lat="38.996507" lon="-3.371946" radius="150000"/>
</query>

  <print e="" from="_" geometry="skeleton" limit="" mode="body" n="" order="id" s="" w=""/>
</osm-script>
于 2013-02-02T12:48:23.490 回答
1

这是文档:http: //developers.cloudmade.com/wiki/geocoding-http-api/Documentation

这是您需要的示例 - HTMLJSON

于 2009-10-23T09:17:45.917 回答