2013-03-07 21 views
4

我已經有一段時間了,並取得了一些成功,但是當涉及重寫文件時,我沒有。如何通過屬性從R中的shapefile中刪除某些區域並創建新的shapefile?

我正在使用的shapefile是metro和micropolitan區域的多邊形shapefile,但我對micropolitan區域不感興趣,因此我正在使用R中的shp嘗試從我的地圖中消除它們。

Data Source

下載正確的文件,確保您「在一個國家的文件中的所有國家」選擇下的「大都會/ Micropolitan統計區(2010)」

這是我到目前爲止有:

library(maptools) 
met=readShapeSpatial("tl_2010_us_cbsa10.shp") 
[email protected] 

子集之前:

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」 的Micropolitan地區,但是當我嘗試重寫文件,它不會顯示在我的wd中。

我也試圖使用包「shapefiles」來完成這件事,但更少的成功。所以在這個問題上的任何幫助將不勝感激。

+0

您的數據鏈接無處可去。 – Spacedman 2013-03-07 08:14:43

+0

您可以通過運行list.files(「。」)向我們證明它不在您的「wd」中併發布它。我只是不相信它不在那裏,我想你已經把R當前目錄中的「wd」弄錯了。 – mdsumner 2013-03-07 08:24:46

+0

好的,我接過來,Spacedman已經展示了它。 :) – mdsumner 2013-03-07 08:26:14

回答

7

當你做[email protected]你正在失去met的空間方面,只是得到普通的舊數據幀。

那你的那個數據框好吧,然後你試試吧writeSpatialShape吧。哇。 submet對象沒有任何多邊形或座標。 writeSpatialShape應該是barf。但它設法吞下它並保持下來。看看這個:

> 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 
+0

感謝您的快速響應,併爲您提供幫助。我遵循你的第二個建議,並使用rgdal來取得我想要的結果。我甚至在ArcGIS中打開了我的新shapefile,它非常完美。 – 2013-03-11 00:52:36

相關問題