【问题标题】:Extract from OSM Planet File is incomplete从 OSM 星球文件中提取的内容不完整
【发布时间】:2021-03-27 04:52:25
【问题描述】:

我对 OSM 世界还很陌生,我需要从 OSM 行星文件中提取所有与水相关的多边形,海洋多边形除外。我知道东京的一所大学有一些产品,但它是 2016 年的,我需要它尽可能最新。

我已经使用以下代码提取了其中的一部分。但是,将生成的图层与 QGIS 中的 OSM 底图进行比较,我注意到缺少某些部分。即使它们与提取的其他部分具有相同的标志和关系。我知道河流的某些部分被数字化为线而不是多边形,所以这些丢失没关系。丢失的部分肯定是多边形,因为我可以通过 QGIS 中的 QuickOSM 插件提取具有相同标志的其中一个。 OSM 底图也清楚地表明这些区域必须是多边形(参见screenshot)。

是我的代码有错误还是我的标志有误?但是,我的代码没有抛出任何错误,除了缺少的部分之外,一切似乎都正常工作。

提前致谢!

这是目前为止的代码:

library(gdalUtils)
library(rgdal)
library(sf)

# extracting all layers with flag "natural = water"
path_pbf <- "path/to/planet_file.osm.pbf"
ogr2ogr(src_datasource_name = path_pbf, 
        "OSM_Waterbodies.gpkg", 
        f = "GPKG", 
        sql = "SELECT * FROM multipolygons WHERE natural = 'water'", 
        progress = T) 

# extracting all layers with flag "other_tags LIKE waterway"
ogr2ogr(src_datasource_name = path_pbf, 
        "OSM_Waterways.gpkg", 
        f = "GPKG", 
        sql = "SELECT * FROM multipolygons WHERE other_tags LIKE '%waterway%'", 
        progress = T) 

waterways <- st_read("OSM_Waterways.gpkg")
waterways$rm <- NA

# select only certain polygons since waterways also includes dams etc
check <- "*riverbank*|*river*|*stream*|*tidal channel*|*canal*|*drain*|*ditch*|*lake*"

# mark polygons which are not part of the desired selection with "remove" flag
for(i in 1:nrow(waterways)){
        if (!grepl(check, waterways$other_tags[i])){
                waterways$rm[i] <- "Remove"
        }
}

# drop rows with "remove" flag
index <- which(waterways$rm == "Remove")
waterways <- waterways[-index,]
st_write(waterways, "OSM_Waterways_clean.gpkg", driver = "GPKG")

P.S.:代码可能不是最有效的,但这与效率无关,因为我可能会运行一两次。

【问题讨论】:

    标签: r openstreetmap gdal sf


    【解决方案1】:

    看起来您只是在提取多边形,当形状不是简单的多边形时,它会在 OSM 中使用。这意味着将提取其中包含岛屿的河流部分,但许多简单的河流部分不会被提取,因为它们只是被映射为封闭路径 (An example from your screenshot)。我手头没有要检查的 OSM 全局文件,但我想这就像在 SQL 中使用 ways 而不是 multipolygons 再次运行 ogr2ogr 函数一样简单,然后检查方法是否已关闭(可能,检查第一个和最后一个节点是否相同,因为快速搜索表明 ogr2ogr 没有提供明确检查封闭方式的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      相关资源
      最近更新 更多