查找一个点(纬度,经度)是不是在 OpenStreetMaps“方式”(区域)内

Posted

技术标签:

【中文标题】查找一个点(纬度,经度)是不是在 OpenStreetMaps“方式”(区域)内【英文标题】:Find if a point (latitude, longitude) is within OpenStreetMaps "way" (area)查找一个点(纬度,经度)是否在 OpenStreetMaps“方式”(区域)内 【发布时间】:2018-04-23 15:56:49 【问题描述】:

我有一个关于各种房屋、办公室等的经度和纬度点列表。我试图将它们分开以确定它们是否在某个Way 内。我不想使用一个区域的旧“中心点”,然后是半径值,因为这不够准确。

例如,如果我在“泰晤士河畔里士满”这样的方式中有 4 个地点,看起来像这样:

它应该只返回 B 点和 C 点。这可能使用 Open Street Maps API 吗?

【问题讨论】:

“这可能使用 Open Street Maps API 吗?”不是。OSM API 主要是一个编辑 API,并非旨在执行任意空间计算。 @scai 啊,我明白了。这是否意味着我需要首先下载 Way 区域的所有空间数据,然后使用我自己的一些代码来计算 long/lat 点是否在 Way 区域? 路径的坐标应该足以判断点是在里面还是在外面。不需要额外的数据。 我明白了。我想我当时唯一的问题是试图找到一个可以计算“isInsideWay”函数的函数。我看到有很多关于如何做到这一点的答案,但如果 lat 和 long 值同时具有负值和正值,则没有答案。 我想你应该问一个关于你的新问题的新问题,最好是gis.stackexchange.com 【参考方案1】:

如果您喜欢 Java,您可以将方式加载为多边形并使用 JTS(Java 拓扑套件)库或 AWT 库来计算您的点是否在内部。

Here 是Atlas 库在特定情况下如何结合使用两者的示例。对你来说,它看起来像这样:

    将 Way 的每个纬度/经度对转换为 Location 对象 将每个Location 添加到列表中并用它创建一个新多边形 使用您拥有的每个兴趣点在 Polygon 上调用 Polygon.fullyGeometricallyEncloses(Location) 方法

Atlas 库是available in Maven Central 供您下载。

【讨论】:

以上是关于查找一个点(纬度,经度)是不是在 OpenStreetMaps“方式”(区域)内的主要内容,如果未能解决你的问题,请参考以下文章

性能 - 按纬度/经度查找特定距离内的所有点

查找十进制纬度和经度是不是落在特定的访问范围内

如何快速识别点(纬度和经度)是不是在一个国家/地区内?

确定一个点是不是在由具有给定纬度/经度的 3 个点组成的三角形内

使用纬度和经度查找用户位置的名称[重复]

使用2个谷歌地图点(纬度和经度)从mongodb查询中查找方形区域数据