R osmdata包opq()函数超出指定边界下载数据问题咨询
问题原因及解决方法
原因
osmdata包的opq()函数默认返回与指定边界框相交的所有OSM元素,而非完全落在框内的元素。比如道路这类线性要素,只要有一段处于你设定的bbox范围内,整条道路都会被下载,因此绘图时会显示超出边界的部分。
解决方法
方法1:使用osmdata_sf()的trim参数
直接在调用osmdata_sf()时添加trim = TRUE,自动裁剪超出bbox的元素部分:
library(tidyverse) library(osmdata) q <- opq(bbox = c(2.34560,48.86015,2.35152,48.86145)) # around Rue Berger (Paris, France) all_Data <- osmdata_sf(q, trim = TRUE) ggplot() + geom_sf( data = all_Data$osm_lines, inherit.aes = FALSE, color = "black", size = .4, alpha = .8 )
方法2:手动裁剪数据
如果需要更精细的控制,可使用sf::st_crop()手动将数据裁剪到目标边界框:
library(tidyverse) library(osmdata) library(sf) q <- opq(bbox = c(2.34560,48.86015,2.35152,48.86145)) # around Rue Berger (Paris, France) all_Data <- osmdata_sf(q) # 裁剪osm_lines到指定bbox cropped_lines <- st_crop(all_Data$osm_lines, q$bbox) ggplot() + geom_sf( data = cropped_lines, inherit.aes = FALSE, color = "black", size = .4, alpha = .8 )
内容的提问来源于stack exchange,提问作者LastBorn
相关产品推荐
相关产品推荐

