2016-03-30 8 views
0

Ich mache gerade ein Klassifizierungsprojekt und die Daten, die ich verwende, enthält Lat/Long-Attribute. Um das (die) Modell (e) einfacher zu machen, denke ich, dass es einfacher sein könnte, die rohen Koordinaten durch eine einzige Spalte von "Gitter" -Zahlen zu ersetzen.R - Konvertieren von Breiten- und Längengrad in Rasternummern

Damit meine ich die Fläche, die die Koordinaten in eine beliebige Anzahl von Gitterpunkten abdecken, zerhacken, nummerieren jedes Quadrat innerhalb des Gitters und ersetzen dann die lat/long Zahlen durch die Gitternummer, in die sie fallen beispielsweise ein 9 quadratischen Raster könnte wie folgt aussehen:

123 
456 
789 

ich ein gutes Stück von der Suche hier und Google getan haben und kann nicht scheinen, eine Lösung zu finden. Das nächste, was ich finden kann, ist das Universal Transverse Mercator-Koordinatensystem (das einige R-Pakete unterstützen), aber die Quadrate innerhalb dieses Gitters sind zu groß. Ich möchte die Größe des Gitters selbst bestimmen können.

Ich bin ein bisschen verloren, und fragte mich, ob die freundlichen Leute dieses Forums von irgendwelchen R-Paketen oder Techniken wussten, um zu erreichen, was ich möchte. Ich füge ein Beispiel meiner lat/long Spalten an. Vielen Dank.

Latitude Longitude 
41.95469 -87.800991 
41.95469 -87.800991 
41.994991 -87.769279 
41.974089 -87.824812 
41.974089 -87.824812 
41.9216  -87.666455 
41.891118 -87.654491 
41.867108 -87.654224 
41.867108 -87.654224 
41.896282 -87.655232 
41.919343 -87.694259 
+0

Haben Sie versucht, 'sp :: point.in.polygon'? Sie können beliebige Polygone (die rechteckig sein können) erzeugen und alle Punkte prüfen. – r2evans

+0

Ich bin auf ähnliche Herausforderungen gestoßen, bei denen die inneren Punkte des Zählblocks einem regelmäßigen Gitter zugeordnet wurden. In diesem Fall habe ich ein Gitter erstellt (expand.grid (lon = seq (-87.9, -87.6, 0.1), lat = seq (41.8, 42, 0.66))) und dann durch den ursprünglichen Datenrahmen iteriert und jedem Punkt zugewiesen im ursprünglichen Datenrahmen zum nächsten Mitglied des Rasters. Nicht elegant, aber funktional. – jclouse

Antwort

0

Nicht besonders elegant, aber das funktioniert

pos <- data.frame(lat=c(
41.95469, 
41.95469,  
41.994991, 
41.974089, 
41.974089, 
41.9216,  
41.891118, 
41.867108, 
41.867108, 
41.896282, 
41.919343), 
long=c(
-87.824812, 
-87.769279, 
-87.800991, 
-87.800991, 
-87.824812, 
-87.666455, 
-87.654491, 
-87.654224, 
-87.654224, 
-87.655232, 
-87.694259)) 

gridx <- seq(from=-87.9,to=-87.6,by=0.01) 
gridy <- seq(from=41.8,to=42,by=0.01) 
xcell <- unlist(lapply(pos$long,function(x) min(which(gridx>x)))) 
ycell <- unlist(lapply(pos$lat,function(y) min(which(gridy>y)))) 
pos$cell <- (length(gridx) - 1) * ycell + xcell 
+0

Das scheint den Job zu machen. Danke. – Gary866

Verwandte Themen