在R中用osmdata获取CyclOSM自行车道:解决基尔市数据不全问题
获取完整自行车道数据的解决方案
你之前仅筛选highway=cycleway,这只覆盖了专用独立自行车道,而CyclOSM展示的自行车道还包含带自行车道的普通道路、允许自行车通行的步道/服务道路等多种类型。要获取完整数据,需要覆盖OpenStreetMap中所有标记为适合自行车通行的道路,具体可通过以下标签组合筛选:
- 专用自行车道:
highway=cycleway - 带自行车道的普通道路(主路、次路、居民区道路等):
highway为primary/secondary/tertiary/residential/unclassified,且存在cycleway键(无论具体值) - 允许自行车通行的步道:
highway=path且bicycle=yes - 允许自行车通行的人行道:
highway=footway且bicycle=yes - 允许自行车通行的服务道路:
highway=service且bicycle=yes
修改后的cycle部分代码如下:
cycle <- osmdata::getbb("Kiel") %>% osmdata::opq(timeout = 25*100) %>% # 覆盖所有可能包含自行车道的道路类型 osmdata::add_osm_feature( key = "highway", value = c("cycleway", "path", "footway", "service", "primary", "secondary", "tertiary", "residential", "unclassified") ) %>% # 用OR逻辑组合筛选条件:专用道/带自行车道的道路/允许自行车通行的道路 osmdata::add_osm_feature( key = c("highway", "cycleway", "bicycle"), value = c("cycleway", "*", "yes"), operator = "OR" ) %>% osmdata::osmdata_sf() %$% osm_lines %>% dplyr::select(geometry) %>% sf::st_transform() %>% sf::st_intersection(kiel) %>% dplyr::filter( sf::st_is(., "LINESTRING") )
代码说明:
- 先指定所有可能关联自行车通行的
highway类型; - 通过
OR逻辑组合三个核心筛选规则:highway=cycleway:直接匹配专用自行车道cycleway=*:匹配所有带有自行车道属性的普通道路bicycle=yes:匹配所有允许自行车通行的步道、服务道路等
- 后续的空间裁剪和几何类型过滤保持原有逻辑不变。
调整后获取的数据会和CyclOSM图层展示的自行车道范围基本一致,覆盖所有适合自行车通行的道路类型。
内容的提问来源于stack exchange,提问作者Jazz
相关产品推荐
相关产品推荐

