Mam zestaw danych wartości ponad kilometrową siatką w kontynentalnych Stanach Zjednoczonych. Kolumny to „szerokość geograficzna”, „długość geograficzna” i „obserwacja”, np .:
"lat" "lon" "yield"
25.567 -120.347 3.6
25.832 -120.400 2.6
26.097 -120.454 3.4
26.363 -120.508 3.1
26.630 -120.562 4.4
lub, jako ramka danych R:
mydata <- structure(list(lat = c(25.567, 25.832, 26.097, 26.363, 26.63),
lon = c(-120.347, -120.4, -120.454, -120.508, -120.562),
yield = c(3.6, 2.6, 3.4, 3.1, 4.4)), .Names = c("lat",
"lon", "yield"), class = "data.frame", row.names = c(NA, -5L))
(pełny zestaw danych można pobrać tutaj jako csv )
Dane są wyprowadzane z modelu uprawy (przeznaczonego do włączenia) na siatce 30 km x 30 km ( Miguez i in. 2012 ).
Jak przekonwertować je na plik rastrowy za pomocą metadanych związanych z GIS, takich jak odwzorowanie mapy?
Idealnie byłby to plik tekstowy (ASCII?), Ponieważ chciałbym, aby był niezależny od platformy i oprogramowania.
proj +proj=lcc +lat_1=50.0 +lat_2=50.0 +units=km +lon_0=-145.5 +lat_0=1.0
. Nie jestem pewien, o co prosisz w odniesieniu do innego pliku csv - czym różni się on od tego, do którego link znajduje się w pytaniu lub czy zostałby uzyskany na podstawie zaakceptowanej odpowiedzi?Odpowiedzi:
Wymagane kilka kroków:
Mówisz, że jest to regularna siatka o długości 1 km, ale to oznacza, że długość lat nie jest regularna. Najpierw musisz przekształcić go w regularny układ współrzędnych siatki, aby wartości X i Y były regularnie rozmieszczone.
za. Wczytaj to do R jako ramkę danych, z kolumnami x, y, wydajnością.
b. Konwertuj ramkę danych na SpatialPointsDataFrame przy użyciu pakietu sp i czegoś takiego:
do. Konwertuj na swój zwykły system km, najpierw informując go, co to jest CRS, a następnie spTransformuj do miejsca docelowego.
re. Powiedz R, że jest to gridowane:
W tym momencie pojawi się błąd, jeśli twoje współrzędne nie leżą na ładnej regularnej siatce.
Teraz użyj pakietu rastrowego, aby przekonwertować go na raster i ustawić jego CRS:
Teraz spójrz:
Teraz napisz go jako plik geoTIFF, używając pakietu rastrowego:
Ten geoTIFF powinien być czytelny we wszystkich głównych pakietach GIS. Oczywistym brakującym elementem jest ciąg proj4, na który należy przekonwertować: prawdopodobnie będzie to jakiś system odniesienia UTM. Trudno powiedzieć bez dodatkowych danych ...
źródło
r = Import[ "https://ebi-forecast.igb.illinois.edu/bety/miscanthusyield.csv", "Data"];
. Następnie możesz uzyskać szybki wykres punktów za pomocądata = Rest[r]; ListPlot[data[[;; , {3, 2}]]]
(lubListPointPlot3D[data[[;; , {3, 2, 4}]]]
). W przypadku ponownych rzutów zacznij od pomocyGeoGridPosition
, a następnie zrób inteligentne domysły i odsyłacze, aby dowiedzieć się, co się dzieje :-). BTW, wyjaśnienie @ Spacedmana jest naprawdę istotne: zniekształcenie metryczne od 25 do 49 stopni jest równe cos (25) / cos (49) = 1,38; to znaczące.Od czasu ostatniej odpowiedzi na pytanie istnieje znacznie łatwiejsze rozwiązanie, używając funkcji pakietu rastrowego,
rasterFromXYZ
która zawiera wszystkie niezbędne kroki (w tym specyfikację ciągu CRS).źródło
/tmp/
kiedy zabrakło mi miejsca na dysku.merge()
wyniki razem.