2013-04-12 10 views
8

Ich versuche, ein Shapefile in R zu erstellen, das ich später in Fusion Table oder eine andere GIS-Anwendung importieren werde.Erstellen von Shapefiles in R

Um zu starten, importierte ich eine leere Shapefile, die alle Volkszählungs-Traktate in Kanada enthält. Ich habe andere Daten (in Tabellenform) an die Shapefile angehängt, basierend auf der eindeutigen ID der CTs, und ich habe meine Ergebnisse kartiert. Im Moment brauche ich nur die in Vancouver und möchte ein Shapefile exportieren, das nur die Vancouver CTs sowie meine neu angehängten Attributdaten enthält.

Hier ist mein Code (einige wegen weggelassen Teile aus Datenschutzgründen):

shape <- readShapePoly('C:/TEST/blank_ct.shp') #Load blank shapefile 
[email protected] = data.frame([email protected], data2[match([email protected]$CTUID, data2$CTUID),]) #data2 is my created attributes that I'm attaching to blank file 
shape1 <-shape[shape$CMAUID == 933,] #selecting the Vancouver CTs 

Ich habe andere Beispiele gesehen mit dieser: writePolyShape die Shape-Datei zu erstellen. Ich habe es versucht, und es hat in gewissem Maße funktioniert. Es erstellte die SHP-, DBF- und SHX-Dateien. Ich vermisse die .prj-Datei und bin mir nicht sicher, wie ich es erstellen soll. Gibt es bessere Methoden zum Erstellen von Shapefiles?

Jede Hilfe zu diesem Thema würde sehr geschätzt werden.

+1

So schreibe ich meine Dateien 'writeOGR (obj = opno.skupaj.mean [[1]], dsn =" q: /path/to/file/spat_odstrel_skupaj.shp ", layer =" spat_odstrel_skupaj ", Treiber = "ESRI Shapefile") '.Beachten Sie, dass die Ebene und der Dateiname identisch sind (abzüglich der '.shp'). –

Antwort

8

Verwenden Sie rgdal und writeOGR. rgdal werden die Projektionsinformation

so etwas wie

library(rdgal) 

shape <- readOGR(dsn = 'C:/TEST', layer = 'blank_ct') 
# do your processing 
[email protected] = data.frame([email protected], data2[match([email protected]$CTUID, data2$CTUID),]) #data2 is my  created attributes that I'm attaching to blank file 
shape1 <-shape[shape$CMAUID == 933,] 
writeOGR(shape1, dsn = 'C:/TEST', layer ='newstuff', driver = 'ESRI Shapefile') 

Hinweis erhalten, dass die dsn die Ordner die .shp Datei enthalten sind, und die layer ist der Name der Shape-Datei ohne die Erweiterung .shp. Es wird gelesen (readOGR) und write (writeOGR) alle Komponentendateien (.dbf, .shp, .prj etc)

+1

Das funktioniert nicht wie es ist, Sie haben das 'shape' oder' shape1' Objekt im 'writeOGR' Aufruf nicht angegeben - woher weiß es, was geschrieben werden soll? – Spacedman

+1

Ich denke, der DSN-Pfad zu 'writeOGR' muss ein vollständiger Dateipfad sein, der auf' .shp' endet. –

+0

@Roman es nicht benötigt, kann writeOGR (x, ".", "Layername", "ESRI Shapefile") oder writeOGR (x, "C: /temp/layername.shp", "Layername", "ESRI Shapefile ") – mdsumner

4

Problem gelöst! Danke nochmal für die Hilfe!

Hier ist, was ich am Ende tun:

Als MNEL schrieb, diese Linie die Shape-Datei erstellen wird.

writeOGR(shape1, dsn = 'C:/TEST', layer ='newstuff', driver = 'ESRI Shapefile') 

Allerdings, wenn ich diese Linie lief, kam es mit diesem Fehler zurück:

Can't convert columns of class: AsIs; column names: ct2,mprop,mlot,mliv 

Dies liegt daran, meine Attributdaten nicht numerisch, sondern waren Zeichen. Glücklicherweise sind meine Attributdaten alle Zahlen, also habe ich transform() ausgeführt, um dieses Problem zu beheben.

shape2 <-shape1 
[email protected] <- transform([email protected], ct2 = as.numeric(ct2), 
mprop = as.numeric(mprop), 
mlot = as.numeric(mlot), 
mliv = as.numeric(mliv)) 

habe ich versucht, die writeOGR() Befehl wieder, aber ich habe immer noch nicht die .prj-Datei erhalten, die ich suchte. Das Problem war, dass ich die Koordinatensysteme für das Shapefile beim Importieren der Datei nicht angegeben habe. Da ich bereits weiß, was das Koordinatensystem ist, musste ich es nur beim Importieren definieren.

readShapePoly('C:/TEST/blank_ct.shp',proj4string=CRS("+proj=longlat +datum=WGS84") 

Danach habe ich wieder lief, alle Dinge, die ich mit dem Shape-Datei und die writeOGR Linie für den Export tun wollte. Und das ist es!

+0

Haben Sie die Datei mit 'readOGR' eingelesen? – mnel

Verwandte Themen