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

R中使用osmdata包查询OSM数据时如何限制仅返回线、面几何对象

osmdata包查询OpenStreetMap时仅返回线和多边形的方法

你提出的查询阶段过滤要素类型的需求可以直接通过osmdata包的内置参数实现,不需要下载全量数据后再筛选:
add_osm_feature()函数提供了osm_type参数,专门用于指定要查询的OSM要素类型,可选值为node(对应返回结果中的点要素osm_points)、way(对应线/面要素osm_lines/osm_polygons)、relation(对应多线/多面要素osm_multilines/osm_multipolygons)。你在available_features()中没有找到相关参数是正常的,这是osmdata封装的查询控制参数,不属于OSM的要素属性字段。

你只需要在调用add_osm_feature()时指定仅查询way和relation类型,就能从源头上排除点数据的查询和返回,大幅降低下载量和内存占用,避免不必要的配额消耗。

修改后的参考代码如下:

extract_data <- function(bbx){  
  highway_vals <- c("motorway", "trunk", "primary", "secondary")  
  data <- bbx %>% 
    opq(timeout = 100) %>% 
    add_osm_feature(
      key = "highway", 
      value = highway_vals,
      # 仅查询线、关系类型要素,完全排除点要素
      osm_type = c("way", "relation")
    ) %>% 
    osmdata_sf()
  
  data_of_interest <- list(
    osm_lines = data$osm_lines, 
    osm_polygons = data$osm_polygons
  )  
  return(data_of_interest)
}

额外优化建议

  • 若你需要保留多线、多面类型的道路数据,可按需将osm_multilines、osm_multipolygons加入返回列表
  • 查询超大边界框时,可将边界框拆分为多个小框分块查询,进一步降低超时和触达配额限制的概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:54:03