在 R 中使用 osmdata 包查找特定几何类型的对象
Use osmdata package in R to find objects of specific geometry type
我正在尝试通过 osmdata
包从 R 中的 openstreetmap 中提取数据,如下所示:
extract_data <- function(bbx){
highway_vals <- c("motorway", "trunk", "primary", "secondary")
data <- bbx %>%
opq(timeout = 100) %>%
add_osm_feature(
key = "highway",
value = highway_vals
)
data_of_interest <- list(osm_lines = data$osm_lines, osm_polygons = data$osm_polygons)
data_of_interest
}
从这个函数可以看出,我只对直线和多边形感兴趣。有没有办法将此限制放入查询中?我已经尝试查看 available_features()
,但没有符合要求的。虽然,我已经看到 here 原则上应该可以通过几何查询,例如“多边形”。
特别是对于大边界框,我将不可避免地下载大量点,即执行查询后 data
变量中始终存在 data$osm_points
。我相信这会浪费大量资源(至少分配给变量 data
的内存比分配给 data_of_interest
的内存大得多)并且实际上使我达到了下载限制相当快,即我遇到了 Please check /api/status for the quota of your IP address
错误。
这在原则上和设计上都是不可能的,因为 OSM 的底层数据模型与 Simple Features 的数据模型完全不同。 osmdata
包反映了前者数据模型到后者的一种映射(在 a package vignette 中对设计决策进行了一定程度的解释)。这些点总是在那里,因为它们是 OSM 数据库中唯一包含实际坐标的部分。 omsdata
包简单地将它们转换为简单功能形式,但无论如何它们总是被交付。 OSM 只知道三件事:节点、方式和关系。线和多边形(以及其他任何东西)都可以由多个单独的“方式”组成,这些方式必须缝合在一起以形成简单要素“线”或“多边形”。这些方式又没有坐标,而只是点 ID 的序列,这就是必须始终交付点的原因。这有效地防止了按照您建议的方式简化查询 - 没有“资源浪费”,因为您想要的(线和多边形)需要无论如何都交付所有数据。您唯一可以做的就是减少您的边界框,或者使用更具体的键值对(或两者)优化您的查询。
我正在尝试通过 osmdata
包从 R 中的 openstreetmap 中提取数据,如下所示:
extract_data <- function(bbx){
highway_vals <- c("motorway", "trunk", "primary", "secondary")
data <- bbx %>%
opq(timeout = 100) %>%
add_osm_feature(
key = "highway",
value = highway_vals
)
data_of_interest <- list(osm_lines = data$osm_lines, osm_polygons = data$osm_polygons)
data_of_interest
}
从这个函数可以看出,我只对直线和多边形感兴趣。有没有办法将此限制放入查询中?我已经尝试查看 available_features()
,但没有符合要求的。虽然,我已经看到 here 原则上应该可以通过几何查询,例如“多边形”。
特别是对于大边界框,我将不可避免地下载大量点,即执行查询后 data
变量中始终存在 data$osm_points
。我相信这会浪费大量资源(至少分配给变量 data
的内存比分配给 data_of_interest
的内存大得多)并且实际上使我达到了下载限制相当快,即我遇到了 Please check /api/status for the quota of your IP address
错误。
这在原则上和设计上都是不可能的,因为 OSM 的底层数据模型与 Simple Features 的数据模型完全不同。 osmdata
包反映了前者数据模型到后者的一种映射(在 a package vignette 中对设计决策进行了一定程度的解释)。这些点总是在那里,因为它们是 OSM 数据库中唯一包含实际坐标的部分。 omsdata
包简单地将它们转换为简单功能形式,但无论如何它们总是被交付。 OSM 只知道三件事:节点、方式和关系。线和多边形(以及其他任何东西)都可以由多个单独的“方式”组成,这些方式必须缝合在一起以形成简单要素“线”或“多边形”。这些方式又没有坐标,而只是点 ID 的序列,这就是必须始终交付点的原因。这有效地防止了按照您建议的方式简化查询 - 没有“资源浪费”,因为您想要的(线和多边形)需要无论如何都交付所有数据。您唯一可以做的就是减少您的边界框,或者使用更具体的键值对(或两者)优化您的查询。