如何创建 shp 文件的子集及其所有属性

How to create a subset of a shp file, with all its properties

我是 R 语言和 .shp 文件编程的新手。

我正在尝试获取一个非常大的 .shp 文件的子样本/子集,您可以从此处下载此文件:https://www.ine.es/ss/Satellite?L=es_ES&c=Page&cid=1259952026632&p=1259952026632&pagename=ProductosYServicios%2FPYSLayout(select 2021 年然后继续).

我已经尝试了几件事,但其中 none 行得通,也不值得将其传递给 sf,因为它只会再添加一个名为 geometry 的列并列出坐标,这对我来说还不够稍后放入传单包中。

我已经在这里试过了,但它对我不起作用:

myspdf = readOGR(getwd(), layer = "SECC_CE_20210101") #It works

PV2 = myspdf[myspdf@data$NCA == 'País Vasco', ] #Dont work
PV2 = myspdf[,myspdf@data$NCA == 'País Vasco'] #Dont work

我打算创建一个 myspdf 样本(带有数据、多边形、plotorder、bbox 和 proj4string),但我不想从所有 NCA 值(myspdf@data$NCA)中获取它,我只想要 data$NCA 是 'País Vasco'

的那些

简而言之,我想为不同 NCA 列的每个值提供一个样本。

这可能吗?有人可以帮我吗?非常感谢。

我也试过这个,但和以前一样,出现了所有 18 个变量,但都是空的:

Pais_V = subset(myspdf, NCA == 'País Vasco')
dim(Pais_V)

这是一种方法:

library(rgdal)

dlshape=function(shploc, shpfile) {
  temp=tempfile()
  download.file(shploc, temp)
  unzip(temp)
  shp.data <- sapply(".", function(f) {
    fp <- file.path(temp, f)
    return(readOGR(dsn=".",shpfile))
  })
}

setwd("C:/temp")
x = dlshape(shploc="https://www2.census.gov/geo/tiger/GENZ2020/shp/cb_2020_us_aitsn_500k.zip", "cb_2020_us_aitsn_500k")

x<-x$.  # extract the shapefile

mycats<-c("00","T2","T3","28")
x2<-subset(x,  x$LSAD %in% mycats)  # subset using the list `mycats`
mypal=colorFactor("Dark2",domain=x2$LSAD)

library(leaflet)
leaflet(x2) %>% addPolygons(weight=.2, color=mypal(x2$LSAD))

dlshape 函数courtesy of @yokota

这是另一种选择。这使用包 sf.

myspdf <- st_read("./_data/España_Seccionado2021/SECC_CE_20210101.shp",
                  as_tibble = T)

现在您可以按照过滤数据框的任何方式过滤此数据。它仍然可以用作空间数据。

使用 tidyverse(好吧,技术上 dplyr):

myspdf %>% filter(NCA == "País Vasco")

这使它从 36,334 个观察到 1714 个观察。

您尝试与 readOGR 一起使用的基本 R 方法也可以使用。

myspdf[myspdf$NCA == "País Vasco",]