Zalecany język programowania dla teledetekcji?

14

Zaczynam studia, które, mam nadzieję, doprowadzą do długiej kariery jako specjalista ds. Teledetekcji. Obecnie pracuję z ArcGIS dla niektórych aplikacji i uczę się ENVI dla innych. Zdałem sobie sprawę, że koniecznie muszę nauczyć się języka programowania i utknąłem w obliczu wyboru między IDL a Pythonem. Bardzo chciałbym usłyszeć, który język programowania jest zalecany przez społeczność do zdalnego wykrywania procesów na powierzchni ziemi.

Emilia
źródło

Odpowiedzi:

28

IDL to fantastyczny autonomiczny język programowania (nie potrzebujesz ENVI). Szczególnie podoba mi się to w przypadku bardzo szybkiego przetwarzania matrycy na dużych tablicach. @Aaron sprawia, że ​​IDL brzmi znacznie mniej elastycznie, niż jest w rzeczywistości. Większość rozwoju IDL pochodzi od społeczności fizyki i astronomii. Istnieje solidne wsparcie dla programowania matematycznego i statystycznego. W pakiecie z ENVI dostępne są wszystkie wywołania (funkcje) biblioteki dostępne w ENVI, w tym obsługa wektorów przestrzennych. Istnieje również duża liczba funkcji i modeli opracowanych przez społeczność użytkowników. Jedną z zalet nauki IDL jest to, że sprawi, że będziesz sprzedawać ją w „analitycznych” sklepach z teledetekcją.

Nie zapominaj również, że ERDAS ma język skryptowy (EML), który jest całkiem dobry i łatwy do nauczenia. EML jest podstawą projektanta grafiki, a gmd to po prostu spakowane skrypty EML, które znajdują się pod interfejsem projektanta grafiki. Zaletą bezpośredniego używania EML jest to, że można używać pętli for / while i mieć dostęp do większej liczby funkcji ERDAS w języku skryptowym.

MATLAB jest również bardzo dobry do przetwarzania macierzy i istnieją wersje open source (np. Octave), które mają dokładnie tę samą składnię z podobnymi testami porównawczymi. Jest to bardzo elastyczny język o znacznej mocy. Jest to jeden z preferowanych języków dla matematyki stosowanej i inżynierii.

Alternatywy Python NumPy i SciPy są elastyczne, ale nie tak zoptymalizowane jak IDL i MATLAB. Jako taki, musisz poradzić sobie z adresowaniem przestrzeni i szybkości podczas pracy z dużymi tablicami. Ogromną zaletą Pythona są dodatkowe biblioteki do wykonywania różnych zadań analitycznych. Istnieją pakiety do teledetekcji , statystyki nieparametryczne , powiązania z klasami przestrzennymi (np. GDAL, LibLAS), aby wymienić tylko niektóre z dodatkowych funkcji dostępnych za pośrednictwem pakietów.

To prowadzi nas do R. Jestem przede wszystkim statystyką przestrzenną, więc to jest mój codzienny język. Liczba dostępnych pakietów jest oszałamiająca, co z kolei zapewnia dostęp do najnowocześniejszych międzydyscyplinarnych metod statystycznych. Muszę jednak powiedzieć, że jest to bardzo kłopotliwe w przypadku problemów z dużymi danymi. Klasy przestrzenne stają się coraz lepsze, a dzięki pakietowi rastrowemu, który umożliwia przechowywanie dużych danych poza pamięcią, jestem teraz w stanie zaimplementować dość złożone modele statystyczne wykorzystujące duże tablice rastrowe. Ale nadal R jest powolny w przypadku problemów z dużą pamięcią. Pakiet BigMatrix umożliwia zapisywanie i przetwarzanie ogromnych tablic z dysku, ale narzut kodowania nie jest nieznaczny. Istnieją również powiązania z oprogramowaniem GDAL i GIS (np. GRASS, SAGA), które zezwalają na przetwarzanie obiektów przestrzennych poza R w oprogramowaniu specyficznym dla GIS, w ten sposób współdziałam obecnie z oprogramowaniem GIS. To pozwala mi korzystać z funkcjonalności wielu programów bez opuszczania R.

Więc teraz, gdy cheerleadowanie oprogramowania jest już na uboczu, moje zalecenie brzmi „tak dla wszystkich powyższych opcji”. Programowanie to umiejętność, którą po opanowaniu można łatwo zastosować w innych językach. Istnieją uderzające podobieństwa między C ++, R, IDL i Python. Oprócz niektórych idiocentryczności kodowania, należy nauczyć się dostępnych funkcji do implementacji danego modelu / zadania. Po wykonaniu tej czynności jest to tylko kwestia składni, która implementuje wspólne struktury kodowania.

Czasami są rzeczy, które po prostu działają lepiej w innym oprogramowaniu lub języku. Czasami piszę kod w FORTRAN lub C ++, ponieważ jest to najlepszy wybór dla danego zadania. Jest to kwestia zdolności adaptacyjnych. Możesz zacząć od Pythona, ponieważ jako język skryptowy może być stosowany do wielu zadań, zapewnia także dostępność pakietów do specjalistycznej analizy, ma wiele bezpłatnych zasobów online i jest dość łatwy do nauczenia.

Jeffrey Evans
źródło
Poparłem to nie tylko dlatego, że jest dobrze napisane i responsywne, ale także dlatego, że miałem podobne doświadczenia (w tym sporadyczne wypadki z powrotem do Fortran :-) i wyciągam podobne wnioski na temat tych języków i środowisk aplikacji.
whuber
+1 Dobre podsumowanie dostępnych narzędzi. Dzięki za wzmiankę o EML. Z punktu widzenia skryptów EML jest nieco nieporadny w porównaniu do Pythona (IMOP), chociaż bardzo przydatny, jeśli Erdas jest twoim wybranym interfejsem RS. Niestety nie ma zunifikowanego języka, który najlepiej wykorzystuje GIS i RS. Absolutnie zgadzam się, że każda osoba musi korzystać z najlepszej dostępnej metody i mieć do dyspozycji różnorodne języki. Uważam, że jednojęzyczny specjalista RS jest rzadkością w tej dziedzinie.
Aaron
Zgadzam się, że rozpoczęcie od Pythona brzmi jak mój najlepszy wybór, biorąc pod uwagę fakt, że jest to oprogramowanie typu open source i że dostępnych jest wiele zasobów online. Mam dostęp do ENVI, ale do moich bieżących badań mogę zarządzać bez znajomości IDL. Studiuję także statystyki przestrzenne, więc R również będzie ważne. @Aaron wydaje się mieć rację - specjaliści RS muszą być wielojęzyczni! Jeszcze raz dziękuję za szczegółową odpowiedź. To naprawdę ogromna pomoc dla kogoś, kto dopiero zaczyna pracę w terenie.
Emily
@Emily, dla statystyk przestrzennych w Pythonie spójrz na pakiet PySAL ( geodacenter.asu.edu/pysal ). Jest książka Kennetha Bowmana „Wprowadzenie do programowania w IDL”, która jest całkiem dobrym wstępem. Myślę, że zdziwiłbyś się, jak daleko byś doszedł, czytając tylko jedną książkę. Jak wspomniałem, znaczna część składni i struktury kodowania jest podobna w wymienionych językach, więc nie trzeba tracić czasu. Ponieważ pracujesz z ENVI, podstawowa wiedza na temat IDL byłaby pomocna w twoich badaniach. W danym języku nie jest to wszystko albo nic.
Jeffrey Evans
ten post jest dobrym podsumowaniem - uzupełnieniem mojego doświadczenia: Biorąc pod uwagę wysoką cenę ArcGis, Envi, Matlab i innych narzędzi, wolę OpenSource, który jest bezpłatny. Dla mnie połączenie Python / gdal i QuantumGIS działa idealnie. Inni w moim miejscu pracy używają Matlaba (ale także bardzo drogiego). W moim otoczeniu R wydaje się być z jakiegoś powodu najczęściej używany przez biologów.
Maks.
15

Z punktu widzenia teledetekcji główną zaletą IDL jest to, że rozszerza on możliwości ENVI podobnie do tego, w jaki sposób pakiet witryny Arcpy Pythona rozszerza funkcjonalność ArcGIS. Jeśli nie będziesz mieć dostępu do platformy ENVI, rozważ naukę innego języka programowania. Ponadto IDL jest produktem komercyjnym, podczas gdy Python jest oprogramowaniem typu open source i ma ogromną bazę wsparcia.

Z praktycznego punktu widzenia Python , R (open-source) i MATLAB (reklama) są najważniejszymi językami w mojej codziennej pracy opartej na teledetekcji. Używam MATLAB-a do dużej części cyfrowego przetwarzania obrazu, Pythona do innych zadań związanych z GIS i R do celów graficznych / analitycznych.

Wreszcie, gdybym musiał skoncentrować wszystkie swoje wysiłki na jednym języku, wolałbym uczyć się Pythona głównie dlatego, że funkcjonalność Pythona jest znacznie bardziej odpowiednia do przetwarzania związanego z GIS oprócz funkcjonalności opartej na RS. Innymi słowy, Python jest wszechstronny, podczas gdy IDL nie. Poza tym NASA używa Pythona !

Aaron
źródło
1
W Pythonie jest wiele modułów, takich jak pyh5 i numpy / scipy. Istnieją również większe biblioteki, takie jak OSSIM , specjalnie do przetwarzania obrazów.
Roland
1
+1 na python. Jest to język ogólnego przeznaczenia i jeśli potrzebujesz użyć narzędzi, które mogą wypaść „po wyjęciu z pudełka” ze skryptami GIS, python może to zrobić.
Dzięki chłopaki, wygląda na to, że zacznę pracować nad Pythonem i przejdę do innych języków, kiedy już będę mieć ten jeden. Wielkie dzięki za Twoją pomoc.
Emily
1
Nie zapomnij o Rasterio: github.com/mapbox/rasterio nowa biblioteka dla rastrów dla Pythona.
Alex Leith,
2

Zdecydowanie sugeruję naukę podstawowej teorii informatyki zamiast skupiania się na jednym języku proceduralnym. Zdobycie podstaw teorii CS pozwoliłoby na zamienne używanie języków programowania. Na co dzień używam dwóch do trzech języków do pisania kodu (głównie Matlab, R, Python), aw ostatnim miesiącu napisałem również kod w VB, BATCH i EASE (PCI Focus).

Jest to nie tylko ważne, aby móc łatwo nauczyć się wielu języków, ale także unikać podstawowych błędów.

Kilka zalecanych tematów to:

  • typy danych, wykorzystanie pamięci
  • warunki
  • iteracja
  • dopasowanie wzoru
  • paradygmat proceduralny, modułowość

Ponadto, jeśli masz problemy z pisaniem kodu, cofnij się i napisz pseudokod. Zasadniczo pisz krok po kroku logikę swojego kodu i co chcesz osiągnąć.

Jeśli jesteś studentem, zalecamy wzięcie udziału w kursach z pierwszego i drugiego roku.

Twoje zdrowie.

Jean B.
źródło
2

Myślę, że jest to warte osobnej odpowiedzi: absolutnie świetna strona do nauki używania Pythona do teledetekcji to ta, której notatki z wykładu są świetnym tutorialem: http://www.gis.usu.edu/~chrisg/python / 2009 /

Dla mnie połączenie Pythona i QuantumGIS rozwiązuje wszystkie moje potrzeby teledetekcji i GIS.

Max
źródło
0

tak naprawdę zależy to od pakietów, które mają zostać użyte w teledetekcji (analiza obrazu). ArcGIS (ESRI) nie jest pakietem teledetekcji. Jeśli chcesz korzystać z pakietów typu open source, zgodziłbym się, że Python i R są świetnymi językami. Zastanowiłbym się również nad C ++ i C, więc możesz zagłębić się w niektóre biblioteki (np .: GDAL). Jeśli chcesz trzymać się komercyjnych pakietów z półki (COTS), lepiej przyjrzyj się językom C (C, C ++ i C #). Szczęśliwego kodowania.

Ryan Garnett
źródło