Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
usunięcie zbędnych pikseli
17-03-2012, 14:06,
#1
usunięcie zbędnych pikseli
Witajcie,

z warstwy rastrowej chcę usunąć "zbędne", zawierające prawdopodobnie błędną informację (jednocześnie nie wyróżniające się swoją wartością na tyle, aby można było je wybrać korzystając tylko z jednego rastra) piksele (opisujące dno Bałtyku).
Jeśli chodzi o mapę Bałtyku to można ją znaleźć (oraz ewentualnie zdigitalizować to źródło) na serwerach WMS Helkomu.
Jednak proste "przycięcie" rozmiarów rastra przy pomocy biblioteki GDAL jest niewystarczające, bo usunąłbym w ten sposób poprawne piksele.

Ja wykonałbym to zadanie tworząc dodatkową warstwę (nazwijmy ją @pom) rastrową przechowującą poza dnem Bałtyku same wartości "0", wykorzystując do tego celu narzędzie gdalwarp z parametrem -cutline.
Następnie korzystając z pomocy kalkulatora rastra ustawiłbym następujące warunki:

NO_DATA_value=@pierwotna_warstwa_NO_DATA_value

if (@pom<>0) then (@wynik=NO DATA_value)
else (@wynik=@pierwotna_warstwa)

Niestety w "kalkulatorze" dostępnym w QGIS, nie widzę warunków logicznych oprócz and i or.
W jaki inny sposób można dokończyć to zadanie?
17-03-2012, 17:51, (Ten post był ostatnio modyfikowany: 17-03-2012, 17:58 {2} przez borys.)
#2
RE: usunięcie zbędnych pikseli
Typowa składnia z if nie jest jeszcze zaimplementowana, najprawdopodobniej się pojawi i będzie działać tak:
http://hub.qgis.org/issues/4476

Tymczasem można to zapisać w ten sposób:

(pom@1 ==0 )

Wyrażenie w nawiasie zwraca wartość 1 gdy jest spełnione, w przeciwnym wypadku 0. Dzięki temu można je przemnożyć przez pożądaną wartość:

(pom@1 ==0 ) * pierwotna_warstwa@1

i dodać alternatywny warunek:

(pom@1 ==0 ) * pierwotna_warstwa@1 + (pom@1 <>0 ) * -32768

Zakładając, że wartość NODATA to -32768

Można również użyć funkcji eq(), le(), gt() itp.:
http://gis-lab.info/qa/rastercalc-eng.html
18-03-2012, 18:56, (Ten post był ostatnio modyfikowany: 18-03-2012, 19:15 {2} przez matandked.)
#3
RE: usunięcie zbędnych pikseli
Tak, dziękuję, o to mi właśnie chodziło (wartość NO_DATA w przypadku mojej warstwy to 9.999e+20 - czy podana przez Ciebie jest obowiązującym standardem?).

Czy można odwoływać się do "kalkulatora" z poziomu skryptów?
Jeśli mówimy o (jest jeszcze dodatkowa, zewnętrzna wtyczka nazywająca się Raster calc) kalkulatorze dostępnym z poziomu menu narzędzi GLDAS, to już znalazłem odpowiedź gdal_calc.
Niestety nie pod wspomnianym odnośnikiem nie kryje się opis, jak wczytać raster do używanych w przykładach zmiennych A i B.
W kalkulatorze, o którym napisałem, zamiast == użyłem =, natomiast <> zostało zastąpione przez !=.
19-03-2012, 12:41,
#4
RE: usunięcie zbędnych pikseli
Chyba bardziej zwyczajowy standard, niż oficjalny, ale może o czymś nie wiem. -32768 to po prostu najmniejsza wartość, jaką można zapisać w dwubajtowym short integerze.

Jeśli chodzi o wołanie kalkulatora ze skryptu Pythona, to nie ma to większego sensu. Te obydwa kalkulatory do wczytania, obliczeń i zapisu danych używają API GDALa, więc prościej i szybciej jest napisać skrypt korzystający z niego bezpośrednio. W googlach pod hasłem np. gdal python tutorial.

Nie bardzo zrozumiałem, co gdal_calc ma wspólnego z kalkulatorem QGISa. Jeśli posłużył za przykład, jak używać API GDALa, to właśnie to napisałem w poprzednim akapicie.


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Usunięcie określonych wartości z tabeli atrybutów raczi 2 926 05-04-2023, 09:11
Ostatni post: jerresso

Skocz do: