检查 Open Street Maps 中的对象是否为建筑物

Checking if object in Open Street Maps is a building

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

评论里的同事建议给点用例:

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

我希望它能稍微澄清问题。

I wonder if there is a simple way to recognize if object clicked by user is a building.

没有

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

执行此操作的最简单est 方法是对 Overpass API server, passing a is_in query and filtering by the building tag key. The OSM website's query feature functionality uses such a technique.

执行查询

使用此技术,您不必担心托管数据,只需创建正确的 Overpass API 查询即可。请记住,Overpass API 服务器是 运行 志愿者和 their resources are limited.

第二个最简单的方法是下载您感兴趣的区域的 OSM 提取,然后 运行 多边形中的点自己查询,以您喜欢的任何方式(PostGIS' ST_Intersect ,turf.js,等等)。

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

Idea that came up to my mind is to check map colour under clicked position.

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