Maps 封闭多边形的开放街道地图
我正在开发一个Android应用程序,它使用[1]中的OverpassAPI。我的目标是得到所有环绕某个lat-long点的圆形路径 为此,我构建了一个包含位置的矩形请求,然后解析响应XML并运行光线投射算法来过滤包含给定lat long位置的方式。这对于我的应用程序来说太慢了,因为有时候响应有几十或几百MB 是否有任何OSM API,我可以调用它来获取包含某个位置的所有方法?否则,我如何优化流程 谢谢Maps 封闭多边形的开放街道地图,maps,openstreetmap,osmdroid,Maps,Openstreetmap,Osmdroid,我正在开发一个Android应用程序,它使用[1]中的OverpassAPI。我的目标是得到所有环绕某个lat-long点的圆形路径 为此,我构建了一个包含位置的矩形请求,然后解析响应XML并运行光线投射算法来过滤包含给定lat long位置的方式。这对于我的应用程序来说太慢了,因为有时候响应有几十或几百MB 是否有任何OSM API,我可以调用它来获取包含某个位置的所有方法?否则,我如何优化流程 谢谢 [1] 据我所知,OSM中没有标准API来实现这一点(这确实是一个非常罕见的用例) 我假设您
[1] 据我所知,OSM中没有标准API来实现这一点(这确实是一个非常罕见的用例) 我假设您将“封闭”定义为表示当前位置的点位于多边形的内部区域内。此外,我假设优化过程可能包括更改算法的整个概念 首先,您需要定义矩形来获取数据。为此,您需要考虑查询太大的矩形会产生太多的数据。据我所知,没有专门的API只用于查询循环方式,即使有,查询过大的矩形也可能被服务器拒绝,因为服务器负载将是巨大的 服务器端预计算/预过滤 因此,我建议进行第一次优化:不要查询不适合您的API,而是使用Android设备上保存的脱机数据库。OsmAnd和其他人离线保存一个国家的整个数据库,但在您的特定用例中,您只需要保存一个预先过滤的循环方式数据库 据我所知,OSM中只有一小部分方法是循环的。因此,我建议编写一个脚本,定期下载OSM转储文件,例如,从、删除非循环方式(例如,您可以检查最后一个节点ID是否等于第一个节点ID,但您需要检查这是否捕获了任何您定义为循环的方式)。您运行它的频率取决于您的用例 此优化解决了以下问题:
- 下载大量数据的问题
- 使用大请求重载API的问题
- 无法请求大数据块的问题
- 假设大多数循环方式在其边界矩形方面都非常小,则只需过滤整个方式的一小部分
- IO被最小化,尤其是当您
调整这些优化的参数应该足以显著减少计算所需的CPU时间。如果您对这些建议有进一步的疑问,请随时发表评论/询问。为什么要在Android应用程序中进行如此复杂的分析?或者:你真的想在你的应用程序中实现什么?我需要在地图上显示一个覆盖图,其中包含每当用户单击相应地图上的某个点时可以找到的最小封闭多边形。什么类型的多边形?建筑物、国家……?我最需要的是建筑物/公园/湖泊。@AndreiSfrent我试图在下面的回答中总结我的想法,但如果您能在进一步的问题中补充更多关于您申请的细节,我将不胜感激——有些方面没有详细描述(例如,您是否必须使用立交桥,或者它只是数据采集问题的解决方案