You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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")
  )

代码说明:

  1. 先指定所有可能关联自行车通行的highway类型;
  2. 通过OR逻辑组合三个核心筛选规则:
    • highway=cycleway:直接匹配专用自行车道
    • cycleway=*:匹配所有带有自行车道属性的普通道路
    • bicycle=yes:匹配所有允许自行车通行的步道、服务道路等
  3. 后续的空间裁剪和几何类型过滤保持原有逻辑不变。

调整后获取的数据会和CyclOSM图层展示的自行车道范围基本一致,覆盖所有适合自行车通行的道路类型。

内容的提问来源于stack exchange,提问作者Jazz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:55:21