我在ReactJS应用程序中使用Leaflet库,我想知道是否有一种简单的方法来识别用户单击的对象是否是建筑物。
我想到的想法是检查单击位置下的地图颜色。
是否有意义?
我感谢您的帮助。
建议有意见的同事给出一些用例:
我正在开发的App旨在标记形状不好的古董建筑,因此城市建筑管理人员可以更轻松地进行搜索。
该应用程序的每个用户都可以标记此类建筑物。为了防止流氓破坏地图上没有意义的点的数据,如果点击的点是建筑物,我想首先进行验证。
我希望它可以使问题有所澄清。
最佳答案
我想知道是否有一种简单的方法来识别用户单击的对象是否是建筑物。
没有。
基本上,您想对OSM的构建数据集运行任意的多边形点查询,并且我假设您不想自己托管该数据集。
最简单的方法是对Overpass API服务器执行查询,并通过is_in
传递filtering查询和building
tag key。 OSM网站的query feature functionality使用such a technique。
使用这种技术,您不必担心托管数据,只需要创建正确的Overpass API查询即可。请记住,Overpass API服务器由志愿者和their resources are limited运行。
第二种最简单的方法是下载感兴趣区域的OSM摘录,然后通过自己喜欢的任何方式(PostGIS'ST_Intersect
,turf.js等)自行运行多边形点查询。
如果要使用Leaflet,另一种方法是使用vector tiles,并以与建筑物主题层互动的方式进行设置。这将要求您注意矢量切片服务器的限制。
我想到的想法是检查单击位置下的地图颜色。
那是不可靠的。考虑一下建筑物顶部的标签,建筑物区域边缘的颜色,或者不是标准颜色的建筑物(例如礼拜场所,古迹)。
关于javascript - 检查“开放街道 map ”中的对象是否为建筑物,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51972002/