Zastanów się nad zestawem danych dotyczących pokrycia terenu NLCD2001 dla Alaski ( link do pobrania ). Muszę przeklasyfikować ten zestaw danych, aby zachowane były tylko piksele o wartości 41, 42 i 43; wszystkie pozostałe wartości w pikselach powinny stać się NoData (lub 0, jeśli to konieczne).
To wydaje się prostym zadaniem, wymagającym tylko jednego połączenia z narzędziem Przeklasyfikowania. Niestety każde połączenie powoduje niejasny i nieprzydatny komunikat o błędzie:
Executing: Reclassify "D:\ak_nlcd_2001_land_cover_3-13-08_se5.img" Value "0 40 0;41 41;42 42;43 43;44 255 0;NODATA 0" "D:\alaska_reclassified.tif" DATA
Start Time: Thu Jan 03 09:23:13 2013
ERROR 999998: Unexpected Error.
Failed to execute (Reclassify).
Failed at Thu Jan 03 09:23:13 2013 (Elapsed Time: 0.00 seconds)
Jak mogę zmienić klasyfikację tego zestawu danych rastrowych? Korzystam z ArcCatalog 10.0, Build 4000, z włączonym rozszerzeniem Spatial Analyst.
arcpy
raster
arcgis-10.0
reclassify
error-999998
DoggoDougal
źródło
źródło
reclassify
powinno to być ostatecznością, ponieważ ma tak ogólny zakres, że prawdopodobnie wykorzystuje metody, które są mniej wydajne niż te, które można uzyskać, gdy przeklasyfikowanie łatwo wyrazić arytmetycznie lub logicznie. W niniejszej sprawie kryterium przeklasyfikowania jest tak proste, że najpierw należy wypróbować je,Con
a nawet proste operacje arytmetyczne (ponieważ są one szybkie). Na przykład"grid" * ("grid" >= 41) * ("grid" <= 43)
powinien to zrobić. Pamięć RAM nie powinna stanowić problemu - Spatial Analyst automatycznie wyświetla okna we / wy rastrowych i są to operacje lokalne.Inlist
to fajne rozwiązanie (+1). Byłem w stanie używaćcon
i monitorować użycie pamięci RAM podczas operacji. Nigdy nie przekroczył 180 MB, czyli niewiele więcej niż pamięć RAM używana tylko do uruchomienia ArcMap. Kafelkowanie w ArcGIS jest automatyczne - nawet nie możesz go kontrolować (chyba że programujesz w interfejsie C / Fortran). Wygląda na to, że ograniczenia pamięci RAM nie mają większego znaczenia.con
dla mnie pracował, pod warunkiem"Value" >= 41 AND "Value" <= 43
. Wybrałbym to rozwiązanie, ale nie jestem pewien, czy dodatkowe wartości rastrowe będą w przyszłości interesujące. Oczywiście mógłbym dodaćOR
do klauzuli where, ale potem zaczyna się to komplikować.InList
wydaje się najprostszym rozwiązaniem w zakresie czytelności i łatwości konserwacji.Odpowiedzi:
Pierwszy dołączony skrypt pomyślnie przeklasyfikował dane AK NLCD w ciągu około 15 minut (i7, 12 GB pamięci RAM). Ponieważ oryginalny zestaw danych ma prawie 7 GB, możesz mieć problemy z pamięcią. Jeśli nie możesz przetworzyć całego zestawu danych w jednym fragmencie, spróbuj podzielić go na drugi skrypt przed przeklasyfikowaniem. Polecam wziąć niewielki podzbiór danych (kliknij prawym przyciskiem myszy warstwę rastrową w Spisie treści> Dane> Eksportuj dane> Rozszerz (ramka danych) i przetestuj pierwszy skrypt. Po wybraniu parametrów polecenia przeklasyfikowania, przejdź do przeklasyfikowania cały zestaw danych lub jego podział. Alternatywnie spróbuj pobrać 64-bitowy produkt Geoprocessing w tle dla ArcGIS 10.1 SP1, dostępny tutaj . Powodzenia.
Skrypt 1
Edycja : jeśli musisz podzielić swoje dane przed przetwarzaniem, ten skrypt powinien pomóc:
Skrypt 2
źródło
whuber skomentował użycie narzędzi logicznych do wyrażenia tej przeklasyfikowania . Po krótkim kopaniu znalazłem InList , jako część zestawu narzędzi Logical Math programu Spatial Analyst, który spełnił moją potrzebę.
Jest to zdecydowanie najprostsze rozwiązanie, jakie udało mi się znaleźć, działa najszybciej i nie wymaga uwzględnienia oryginalnego zestawu danych. Nie ma potrzeby rozważania dostępnej pamięci RAM maszyny, ponieważ to narzędzie będzie czytać bezpośrednio z dysku i zapisywać wyniki z powrotem na dysku.
źródło
SplitRaster_management
bierze 7,04 sekundy.Użyłem zestawu danych wspomnianego w oryginalnym poście z wersją arcmap w wersji 10.4 dev. Przeklasyfikowanie kończy się niepowodzeniem, gdy wyjściowym rastrem jest siatka, ponieważ liczba przeklasyfikowanych komórek jest przepełniona, co można zapisać w polu COUNT podatku VAT od siatki. Kiedy wyjściowy raster jest fgdb, wykonuje się dla mnie z powodzeniem za około 11 minut na starszym 4-rdzeniowym komputerze z systemem Windows 8. Nie-gridowe formaty rastrowe powinny działać, ponieważ używają zmiennoprzecinkowych wartości podwójnej precyzji dla pola zliczania. Oczekuję, że powinieneś uzyskać takie samo zachowanie w wersjach wydanych 10.2 lub 10.3. Zbadamy użycie innego formatu rastrowego jako domyślnego wyjścia dla Przeklasyfikowania.
źródło