我试图找出华盛顿特区的街区组有多少英里的道路。我正在使用来自开放数据 DC 的道路功能分类数据。
我加载 shapefile 并运行以下代码:
## Read roads shapefile
DC_Roads <- read_sf('data/Roadway_Functional_Classification/Roadway_Functional_Classification.shp')
mapview(DC_Roads)
并收到以下错误消息:
Error: Feature creation failed.
In addition: Warning messages:
1: In CPL_write_ogr(obj, dsn, layer, driver, as.character(dataset_options), :
GDAL Error 1: ICreateFeature: Mismatched geometry type
2: In CPL_write_ogr(obj, dsn, layer, driver, as.character(dataset_options), :
GDAL Error 6: DeleteLayer() not supported by this dataset.
我已经能够推断出这可能是因为数据中的 Z 和 M 维度。在 ArcGIS 中打开 shapefile 让我可以看到 Z 和 M 尺寸确实存在。
我尝试使用
DC_Roads <- st_zm(DC_Roads)
来解决问题,但我失去了一半的道路(见图)。似乎所有道路都被归类为华盛顿特区的南部道路(国会大厦街以南的任何道路)。
任何人都可以帮我弄清楚这里出了什么问题以及如何解决它吗?
您的数据集中有两个具有空几何图形的特征。删除它们,您的代码就可以工作了:
library(sf)
library(mapview)
# Load sf
DC_Roads <- read_sf('data/Roadway_Functional_Classification/Roadway_Functional_Classification.shp')
# Remove features with empty geometries
DC_Roads <- DC_Roads[!st_is_empty(DC_Roads$geometry), ]
# Convert to xy sf
DC_Roads <- st_zm(DC_Roads)
# Plot
mapview(DC_Roads)