簡體   English   中英

如何從R中的shapefile中按屬性消除某些區域並創建新的shapefile?

[英]How can I eliminate some areas by attribute from a shapefile in R and create a new shapefile?

我已經在這方面做了一段時間並取得了一些成功,但是當涉及到重寫文件時,我沒有。

我正在使用的shapefile是一個地形和都市區域的多邊形shapefile,但我對大都市區不感興趣所以我正在使用R中的shp來嘗試從我的地圖中刪除它們。

數據源

要下載正確的文件,請確保在“Metropolitan / Micropolitan Statistical Area(2010)”下選擇“一個國家/地區中的所有州”

這是我到目前為止所擁有的:

library(maptools)
met=readShapeSpatial("tl_2010_us_cbsa10.shp")
met=met@data

子集之前:

NAMELSAD10      LSAD10
Anchorage, AK Metro Area   -  M1 
Clarksdale, MS Micro Area    - M2
Richmond, VA Metro Area   -  M1
Big Spring, TX Micro Area  -   M2
Dallas-Fort Worth-Arlington, TX Metro Area  -   M1
Rio Grande City-Roma, TX Micro Area  -   M2

然后:

submet=subset(met, LSAD10 == "M1")

子集后:

NAMELSAD10 LSAD10
Anchorage, AK Metro Area   -  M1
Richmond, VA Metro Area  -   M1
Dallas-Fort Worth-Arlington, TX Metro Area   -  M1
Vineland-Millville-Bridgeton, NJ Metro Area  -   M1
Casper, WY Metro Area   -  M1
Cheyenne, WY Metro Area   -  M1

然后:

writeSpatialShape(submet, "tl_2010_us_ma10", factor2char = TRUE)

使用此代碼,我已經能夠成功消除指定為“M1”的微區域,但是當我嘗試重寫文件時,它不會顯示在我的wd中。

我也嘗試使用“shapefile”包來完成這項工作,但成功率卻更低。 所以對此事的任何幫助都將不勝感激。

當你met=met@data你正在失去met的Spatial方面,只是得到了普通的舊數據框。

然后你把那個數據框的子集好了,然后你試着writeSpatialShape它的writeSpatialShape 哇。 submet對象沒有任何多邊形或坐標。 writeSpatialShape應該是writeSpatialShape 但它設法吞下整個並保持下來。 看一下這個:

> writeSpatialShape(1,"foo.shp")
> 

正如您所觀察到的,沒有創建shapefile。 哇,這是非常糟糕的錯誤處理。

兩個解決方案:1,處理實際對象而不是數據組件,如下所示:

met = readOGR(dir,name)
submet = met[met$thing=="whatever",]
writeOGR(submet,dir,newname,"ESRI Shapefile")

2,使用package:rgdalread/write|OGR ,它不僅處理投影,而且如果你試圖讓它吃一些難吃的東西就會生病:

> writeOGR(1,".","foo","ESRI Shapefile")
Error: inherits(obj, "Spatial") is not TRUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM