如何创建 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",]
我是 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",]