首页 > 解决方案 > 检查 Open Street Maps 中的对象是否是建筑物

问题描述

我在我的 ReactJS 应用程序中使用 Leaflet 库,我想知道是否有一种简单的方法来识别用户单击的对象是否是建筑物。我想到的想法是检查点击位置下的地图颜色。是否有意义?我感谢您的帮助。

评论中的同事建议给出一些用例:

我正在开发的应用程序旨在标记具有不良高度的古董建筑,因此城市建筑管理人员可以更轻松地搜索它们。该应用程序的每个用户都可以标记此类建筑物。为了防止流氓破坏地图上毫无意义的点的数据,我想首先验证点击的点是否是建筑物。

我希望它能澄清一点问题。

标签: javascriptreactjsleafletopenstreetmap

解决方案


我想知道是否有一种简单的方法来识别用户单击的对象是否是建筑物。

不。

您基本上想对 OSM 的构建数据集运行任意多边形点查询,我假设您不想自己托管该数据集。

执行此操作的最简单方法是对 Overpass API 服务器执行查询,传递查询is_in并按标签过滤。OSM 网站的查询功能使用了这种技术building

使用这种技术,您不必担心托管数据,只需创建正确的 Overpass API 查询。请记住,Overpass API 服务器是由志愿者运行的,他们的资源是有限的

第二种最简单的方法是下载您感兴趣的区域的 OSM 提取,并通过您喜欢的任何方式(PostGIS' ST_Intersect、turf.js 等)自行运行多边形查询。

如果您将使用 Leaflet,另一种方法是使用矢量切片,并将其设置为使建筑物主题图层具有交互性。这将要求您了解矢量切片服务器的局限性。

我想到的想法是检查点击位置下的地图颜色。

那是不可靠的。想想建筑物顶部的标签,或建筑物区域边缘的颜色,或不使用标准颜色渲染的建筑物(例如礼拜场所、纪念碑)。


推荐阅读