Jestem nowy w R i korzystam z pakietu rastrowego. Mam problem z wyodrębnieniem wielokątów z istniejącego pliku rastrowego. Jeśli użyję
extract(raster, poly_shape)
funkcja na rastrze zawsze tworzy listę z danymi. Naprawdę chcę wyodrębnić kolejny plik rastrowy, który mogę ponownie załadować za pomocą ArcGIS. Po przeczytaniu trochę więcej, myślę, że naprawdę potrzebuję funkcji przycinania. Ale kiedy próbuję użyć tej funkcji
crop(raster, poly_shape)
Otrzymuję ten błąd:
Error in .local(x, y, ...) : extents do not overlap
In addition: Warning message:
In intersect(extent(x), extent(y)) : Objects do not overlap
Pliki raster i poly_shape są takie same dla obu funkcji. Czy możesz mi powiedzieć, co może być nie tak? Czy to w porządku, że funkcja przycinania tworzy kolejny raster, a nie listę?
EDYCJA : Funkcja scope () nie działa dla mnie. Nadal pojawia się ten sam błąd. Ale jestem pewien, że 2 zestawy danych pokrywają się! Z
extract(raster, poly_shape)
Otrzymuję z tego odpowiednie dane. Tak jak lista, a nie raster jak ja chcę ją mieć. Właśnie załadowałem wcześniej zestawy danych do ArcGIS i pasują one bardzo dobrze, więc nie sprawdziłem projekcji. Teraz próbowałem
projection(raster) # "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs"
projection(poly_shape) # "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"
i widać, że występy nie pasują. Wydaje się, że funkcja wyodrębniania może automatycznie przekształcać pliki we właściwy sposób. Wiem to, ponieważ wykonałem następujące czynności:
- Dokładną część wielokąta wyciąłem w R również w ArcGIS
- Obliczyłem sumę wszystkich wartości wyodrębnionego wielokąta R (lista)
- Obliczyłem sumę wszystkich komórek rastrowych, które wyciąłem w ArcGIS
Te 2 mają dokładnie taki sam wynik, więc sądzę, że wniosek powinien być taki, że funkcja wyodrębniania działała poprawnie. Teraz mam chyba 2 opcje:
- Potrzebuję sposobu, aby ponownie usunąć Raster z wyodrębnionej listy lub
- Dwa zestawy danych (raster + poly_shape) muszą korzystać z tego samego prjection, a funkcja crop powinna działać
Co sugerowałbyś tutaj zrobić?
Odpowiedzi:
Funkcja wyodrębniania działa dokładnie tak, jak powinna. Możesz zmusić funkcję przycinania do użycia zasięgu wieloboku, a następnie zamaskować obiekt, aby zwrócić dokładny raster reprezentujący obszar wielokąta. Jeśli nadal pojawia się błąd, oznacza to, że Twoje dane w rzeczywistości się nie pokrywają.
Pamiętaj, że R nie wykonuje projekcji „w locie”, więc sprawdź swoje projekcje. Możesz sprawdzić, czy zakresy się pokrywają, korzystając z funkcji „scope ()”.
Oto przykład przycinania przy użyciu zasięgu wielokąta, a następnie maskowania powstałego rastra za pomocą „zrasteryzowanego” wielokąta.
źródło
spTransform
zsp
pakietu (który czasami jest automatycznie ładowany z innymi pakietami przestrzennymi R) pozwala na ponowną projekcję, dzięki czemu oba pliki są w tej samej projekcji np.good_poly=spTransform(spolygon, CRSobj=crs(raster_file))
Tak naprawdę szukałem tej
mask()
funkcji.mask(raster, poly_shape)
działa bez błędów i zwraca to, czego szukałem.
źródło
projection(raster) = projection(poly_shape)
i na odwrótprojection(poly_shape) = projection(raster)
, ale oba sposoby dają ten sam błąd:Error in .local(x, y, ...) : extents do not overlap In addition: Warning message: In intersect(extent(x), extent(y)) : Objects do not overlap
. Czy istnieje sposób, w jaki sposób mogę zobaczyć, która projekcja jest używana w locie za pomocą funkcji extract () (ponieważ ta oczywiście działa)?mask(raster, poly_shape)
działa bez błędów i zwraca to, czego szukałem.Zakres działa dobrze ... Myślę, że Xmin, Xmax, Ymin i Ymax twojego zasięgu różnią się od X i Y twojego rastra - tzn. Są ustawione przeciwnie
źródło