OpenStreetMap的"在距离内搜索"API

Rob*_*cea 5 api search openstreetmap

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

ire*_*ses 8

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

不要忘记边界框由纬度/长角定义,因此它不是真正的矩形.经度线会聚在两极,因此您的盒子顶部宽度与底部不同.这对你有多大影响取决于你与杆的接近程度(长度= =(40000km/360)*cos(纬度)).

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


Dan*_*ell 5

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

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

例如使用 OverPass Turbo Api(列出“Manzanares, Spain”附近的所有城镇,经纬度半径为 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>
Run Code Online (Sandbox Code Playgroud)