Pracuję nad obliczeniowym modelem liczebności dzikich zapylaczy w krajobrazie. Sam model jest kompletny, a teraz mam problem z etapem przetwarzania końcowego.
Mam raster zapylacza GDAL, który wygląda mniej więcej tak (jaśniejsze kolory oznaczają większą wizytę zapylacza na piksel):
I mam plik kształtu OGR punktów reprezentujących przykładowe lokalizacje w krajobrazie:
Próbuję przeprowadzić analizę pikseli pod tymi punktami, ale aby to zrobić, muszę być w stanie wyodrębnić wartość piksela poniżej punktu.
Czy jest możliwe wyodrębnienie wartości piksela pod punktem przy użyciu tylko OGR i GDAL przez Python? Wolałbym unikać wczytywania całego rastra do pamięci ReadAsArray()
, ponieważ moje wyjściowe rastry są bardzo, bardzo duże (zbyt duże, aby zmieściły się w pamięci).
Zauważyłem ten post , który jest podobny, ale wymaga wywołania z wiersza poleceń.
Odpowiedzi:
Możesz użyć metody gdal.Dataset lub gdal.Band ReadRaster. Zobacz samouczki interfejsu API GDAL i OGR oraz poniższy przykład. ReadRaster nie używa / wymaga numpy, zwracaną wartością są surowe dane binarne i należy je rozpakować przy użyciu standardowego modułu strukturalnego Pythona .
Przykład:
Alternatywnie, ponieważ powodem, dla którego podałeś, że nie używasz,
numpy
było uniknięcie odczytu całej tablicy podczas używaniaReadAsArray()
, poniżej znajduje się przykład, który używanumpy
i nie czyta całego rastra.źródło
px
/py
są niepoprawne w przypadku, gdy mx / my leży poza granicamirb
, ponieważint(-0.5) == 0
. Musiszfloor(...)
, a następnie musisz sprawdzić, czy żaden zpx
/ niepy
jest mniejszy od zera (lub zrób to przed wywołaniemint()
), ponieważ indeksy ujemne działają (uzyskują drugą stronę tablicy). Chciałbym wiedzieć, czy istnieje lepszy sposób na rozwiązanie tego problemu. A także, jak przepisać te wiersze, aby poprawnie radziły sobie z obrotami?