如何用R的osmdata包获取OpenStreetMap的relation层级数据?
解决osmdata包无法获取OSM Relation数据的问题
核心问题原因
osmdata包默认不会返回Relation的完整结构及其关联成员,默认参数members = FALSE会导致仅获取Relation关联的零散点/线/面元素,而无法拿到osm_relation数据集。
解决方案代码
方案1:精准查询指定Relation ID
直接通过目标Relation ID查询,效率更高:
# 直接查询目标relation(ID:15019644) y <- opq_osm_id(type = "relation", id = 15019644) %>% osmdata_sf(members = TRUE) # 关键参数:获取relation的成员及完整结构
方案2:范围查询时过滤并获取Relation
如果需要查询爱尔兰范围内所有plant:source=wind的Relation,调整代码如下:
bbx <- getbb("Ireland") y <- bbx %>% opq(timeout = 25*100) %>% add_osm_feature(key = "type", value = "multipolygon") %>% # 匹配目标relation的type标签 add_osm_feature(key = "plant:source", value = "wind") %>% osmdata_sf(members = TRUE) # 开启成员获取
验证结果
执行代码后,通过y$osm_relation即可查看获取到的Relation数据,y$osm_multipolygon等数据集会包含该Relation关联的几何元素。
内容的提问来源于stack exchange,提问作者user1966593
相关产品推荐
相关产品推荐

