usunięcie zbędnych pikseli - Wersja do druku +- Forum QGIS (http://forum.quantum-gis.pl) +-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html) +--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html) +--- Wątek: usunięcie zbędnych pikseli (/thread-684.html) |
usunięcie zbędnych pikseli - matandked - 17-03-2012 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? RE: usunięcie zbędnych pikseli - borys - 17-03-2012 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 RE: usunięcie zbędnych pikseli - matandked - 18-03-2012 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 !=. RE: usunięcie zbędnych pikseli - borys - 19-03-2012 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. |