Moje pytanie dotyczy wyodrębnienia wartości z rastrów w miejscu punktów. Z ekstraktem funkcji jest to bardzo łatwe, a funkcja daje mi ramkę danych z wartościami wszystkich zmiennych w punktach. Chcę mieć w tej ramce danych współrzędne każdego punktu. Jak mogę to zrobić? Czy można powiedzieć R, że przy wydobywaniu wartości z rastra dodaj także kolumny punktu lokalizacji.
Oto moja procedura:
presencias=read.table("c:/SDM_R/presencias/P_lentiscus_pres.csv",header=TRUE,sep=";")
lista_variables <-list.files(path="Variables_modelizacion/solo_ascii",pattern='*.asc',full.names=TRUE)
variables <- stack(lista_variables)
variables_presencia<-extract(variables, presencias)
wyniki są mniej więcej takie:
> bio1 bio12 bio18 bio2 bio4
> 90 875 165 95 4886
> 115 1085 158 83 4075
> 135 1153 153 67 3402
> 85 1026 137 99 5203
> 96 667 128 108 5823
> 98 531 109 113 6305
> 132 450 63 123 6598
> 132 569 104 106 5963
> 95 814 196 98 5571
> 146 474 39 114 6603
Ale chcę jeszcze dwie kolumny z danymi współrzędnych (ale mogą to być inne kolumny z mojej tabeli wyodrębniania csv).
Dziękuje bardzo.
presencias
?cbind(coordinates(presencias), variables_presencia)
? Następnie możesz przekonwertować na SPDF za pomocącoordinates(result) <- ~ X + Y
i możesz ponownie skorzystać z wielu metod zaprojektowanych dla obiektów przestrzennych.Odpowiedzi:
Zakładając to
presencias
ivariables
dzieląc tę samą projekcję, powinno to być łatwe zadanie. Polecam dodanie tych wierszy kodu poread.table()
instrukcji, aby przekonwertowaćpresencias
ramkę danych na obiekt SpatialPointsDataFrame (po prostu popraw nazwy kolumn zawierających współrzędne xiy, jeśli różnią się od mojego przykładu).Aby zapewnić powtarzalny przykład, staram się nieco bardziej rozszerzyć zakres mojej odpowiedzi. Po pierwsze, pobierz i rozpakuj ten plik kształtu ESRI z mniej lub bardziej ważnymi lokalizacjami w Niemczech. Będą one później służyć jako dane punktowe. Potrzebny będzie również pakiety
dismo
,rgdal
araster
na tym krótkim przykładzie, więc upewnij się, że te biblioteki (i wszystkie ich zależności) są zainstalowane na lokalnym dysku twardym.Zacznijmy od załadowania wymaganych pakietów.
Następnie należy wygenerować przykładową warstwę RasterLayer. W naszym przypadku skorzystamy z
gmap()
funkcji zdismo
pakietu, aby uzyskać fizyczną mapę Niemiec.Możesz teraz zaimportować punktowy plik kształtów
readOGR
zrgdal
pakietu R. Pamiętaj o dostosowaniu nazwy źródła danych (dsn = ...). Cała projekcja jest przestarzała w twoim przypadku. Jednak w naszym przykładzie należy to zrobić, aby z powodzeniem nakładać nasze dane punktowe na niemiecki RasterLayer.Aby zmniejszyć ogromny rozmiar naszych danych punktowych, losujemy próbkę dziesięciu lokalizacji w Niemczech. To powinno wystarczyć do naszych celów.
Teraz, gdy przygotowania są zakończone, moglibyśmy po prostu zacząć wyodrębniać wartości tych konkretnych pikseli, w których znajduje się dziesięć losowo próbkowanych punktów.
Aby scalić współrzędne punktu z wyodrębnionymi wartościami pikseli, wystarczy skonfigurować ramkę danych zawierającą współrzędne naszego obiektu SpatialPointsDataFrame. Otóż to!
źródło
Z pewnością możesz po prostu zrobić:
variables_presencia$x <- presencias['x']
variables_presencia$y <- presencias['y']
(zakładając, że dane współrzędnych znajdują się w dwóch kolumnach o nazwach „x” i „y”)
źródło