Rob*_*cea 5 api search openstreetmap
是否有任何OpenStreetMap API允许我从参考位置获取一定距离(例如10英里)内的POI列表?
据我所知,API不直接支持这一点.最简单的方法是选择圆圈适合的(准)矩形边界框,并使用它来检索您的POI.然后,您可以对每个兴趣点进行距离计算,并丢弃超出半径的距离.这将删除靠近盒子角落的一小部分POI,因此不在您的圈子内.您希望按此顺序执行此操作,以便您只需在相对较少的目标位置上进行距离计算.
不要忘记边界框由纬度/长角定义,因此它不是真正的矩形.经度线会聚在两极,因此您的盒子顶部宽度与底部不同.这对你有多大影响取决于你与杆的接近程度(长度= =(40000km/360)*cos(纬度)).
如果你不需要极高的精确度,那么你用毕达哥拉斯定理计算你的距离,记住经度中的余弦变化,以及因子2单位差异(360度经度,但只有180度纬度).如果你确实需要精确度,那么你就进入了球面三角学的领域,还需要考虑椭球体.这是一个在线计算器,包含方程式和开源代码,在这方面很有帮助.
是的。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)