如何从空间特征中检索 osmdata 的 bbox?

How to retrieve bbox for osmdata from spatial feature?

如何定义bbox根据空间文件的范围下载OSM数据? 以下示例 returns 一条错误消息:

...the only allowed values are floats between -90.0 and 90.0

这表明 bbox 值超出允许范围。它还表明 NAD27 和 EPSG:3857 之间的转换没有 return 空间数据在它应该在的地方。 对于其他空间数据,我遇到了类似的问题。即使在允许的范围内,数据也没有出现在预期的位置。下载的 OSM 数据出现在与输入空间文件不同的位置。

library(sf)
library(raster)
library(osmdata)

osm_proj <-("+init=epsg:3857")

nc <- st_read(system.file("shape/nc.shp", package="sf"))

nc <- st_transform(nc, osm_proj)

bbox.nc <- as.vector(extent(nc[22,]))/100000

q <- opq(bbox = bbox.nc) %>%
  add_osm_feature(key = 'natural', value = 'water')

osm.water <- osmdata_sf(q)

如何准备下载的OSM数据匹配输入空间文件空间扩展的bbox?

OSM 以经纬度工作,即 EPSG:4326。您需要相应地转换坐标。你也不需要 raster::extent(); sf::st_bbox() 在此用例中就足够了。

或者在您的上下文中考虑这段代码;因为这只是一个玩具示例,所以我没有使用整个北卡罗来纳州,而是使用一个县(否则可能会出现超时错误,这将是另一种问题 - 这个问题是关于边界框的)。

library(sf)
library(osmdata)

nc <- st_read(system.file("shape/nc.shp", package="sf"))

strelitz <- st_transform(nc, 4326) %>% 
  dplyr::filter(NAME == "Mecklenburg") # as in Charlotte of Mecklenburg-Strelitz
  

q <- opq(bbox = sf::st_bbox(strelitz)) %>%
  add_osm_feature(key = 'natural', value = 'water') %>% 
  osmdata_sf()

plot(st_geometry(strelitz))
plot(st_geometry(q$osm_lines), col = 'blue', add = T)

A shameles plug:我之前写过关于查询 OSM 的兴趣点,你可能会觉得这个 post 很有趣 :)

https://www.jla-data.net/eng/finding-pois-along-a-route/