2014-09-01 13 views
12

etwas Hilfe re ein Konvertierungsproblem in R. Needingerstellen konvexe Hülle Polygon aus Punkten und speichert als Shape-Datei

Ich habe die convex hull eine Wolke aus Punkten berechnet habe. Ich möchte, ausgehend von den Punkten, die die konvexe Hülle bilden, ein Polygon-Objekt erstellen und dieses als Shapefile speichern, das von einer GIS-Software (ArcMap oder dergleichen) gelesen werden kann.

Mein Code sieht wie folgt aus:

gps <- read.csv(f) ##reads the lat-long coordinates file 
x <- gps$LONGITUDE ##tells R which columns is which 
y <- gps$LATITUDE 
z<-chull(x,y)  ##calculates the convex hull --this is just a list of x-y points, N vertex 
dfHull <-cbind(x[z],y[z]) ##the convex hull expressed as a list of selected x-y points 
plot(dfHull)  ##this plots the vertex of the polygon, just a check 
lines(dfhull) ##plots the polygon in screen 

##generate polygon shapefile, from dfHull, and save it externally as a shapefile ??? 

Die Quelldatei enthält nur lat-long-Koordinaten, zB:

52.73336  N 0.365974 
52.7332 N 0.366051 
52.73289  N 0.36636 
52.73297  N 0.366258 
52.73298  N 0.366243 
52.733 N 0.366112 
52.73308  N 0.365942 
52.73317  N 0.365881 
52.73321  N 0.36593 
52.73328  N 0.365942 
52.73352  N 0.36579 
52.73362  N 0.365678 
52.73391  N 0.365536 
52.7373 N 0.36543 
52.73289  N 0.36728 

ich weiß, gibt es Pakete (rgdal, MapTools, ..) zu helfen Sie mit diesen, aber ich bin sehr mit räumlichen Sachen nicht vertraut. Wirklich alles, was ich brauche, ist das Polygon-Objekt zu generieren und das als Shapefile zu speichern.

Jede Hilfe wird geschätzt. Vielen Dank im Voraus, dev.

+1

Das 'shapefiles' Paket bietet ein einfaches Beispiel, wie man Schreibe ein Shapefile aus einfachen R Objekten. – nicola

Antwort

19

Hier ist ein einfaches Beispiel ein SpatialPolygonsDataFrame, zu schaffen, die als Shape-Datei mit rgdal::writeOGR() gespeichert werden können:

set.seed(1) 
dat <- matrix(stats::rnorm(2000), ncol = 2) 
ch <- chull(dat) 
coords <- dat[c(ch, ch[1]), ] # closed polygon 

plot(dat, pch=19) 
lines(coords, col="red") 

convex hull

library("sp") 
library("rgdal") 

sp_poly <- SpatialPolygons(list(Polygons(list(Polygon(coords)), ID=1))) 
# set coordinate reference system with SpatialPolygons(..., proj4string=CRS(...)) 
# e.g. CRS("+proj=longlat +datum=WGS84") 
sp_poly_df <- SpatialPolygonsDataFrame(sp_poly, data=data.frame(ID=1)) 
writeOGR(sp_poly_df, "chull", layer="chull", driver="ESRI Shapefile") 
+0

Noch muss ich testen, aber es scheint mein Problem perfekt zu lösen. Danke vielmals!! – user3310782

+0

hi rcs, Eine kurze Fragen. Ich bekomme "Fehler: konnte die Funktion" writeOGR "nicht finden". Liegt das daran, dass ArcGIS auf Ihrem PC installiert sein muss? Und zweitens: enthält das Shapefile nur die Rumpfpunkte, die Polygonform, alles? – user3310782

+0

'writeOGR' ist im Paket rgdal, Sie müssen dieses Paket installieren und laden (ArcGIS wird nicht benötigt). Der SHP enthält ein Polygon, das durch die Rumpfpunkte definiert wird. – rcs