从 shapefile 中删除 Z 和 M 尺寸后功能丢失

问题描述 投票:0回答:1

我试图找出华盛顿特区的街区组有多少英里的道路。我正在使用来自开放数据 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)
来解决问题,但我失去了一半的道路(见图)。似乎所有道路都被归类为华盛顿特区南部(国会大厦街以南的任何道路)。

任何人都可以帮我弄清楚这里出了什么问题以及如何解决它吗?

Missing Washington DC roads

r spatial shapefile r-sf
1个回答
2
投票

您的数据集中有两个具有空几何图形的特征。删除它们,您的代码就可以工作了:

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)

1

© www.soinside.com 2019 - 2024. All rights reserved.