Linguagem de programação recomendada para sensoriamento remoto?

14

Estou iniciando estudos que, esperançosamente, levarão a uma longa carreira como especialista em sensoriamento remoto. Atualmente, estou trabalhando com o ArcGIS para algumas aplicações e aprendendo o ENVI para outras. Percebi que é imperativo que eu aprenda uma linguagem de programação e estou enfrentando uma escolha entre IDL e Python. Eu adoraria ouvir qual linguagem de programação a comunidade recomenda para o sensoriamento remoto dos processos da superfície terrestre.

Emily
fonte

Respostas:

28

IDL é uma fantástica linguagem de programação independente (você não precisa do ENVI). Particularmente gosto para o processamento matricial muito rápido em matrizes grandes. O @Aaron torna o IDL muito menos flexível do que realmente é. A maior parte do desenvolvimento da IDL veio das comunidades de Física e Astronomia. Existe um suporte robusto para programação matemática e estatística. Se incluído no ENVI, você terá todas as chamadas (funções) da biblioteca disponíveis no ENVI, incluindo suporte para objetos vetoriais espaciais. Há também um grande número de funções e modelos desenvolvidos pela comunidade de usuários. Uma vantagem de aprender o IDL é que ele o tornará comercializável em lojas de sensoriamento remoto "analíticas".

Além disso, não esqueça que o ERDAS possui uma linguagem de script (EML) bastante boa e fácil de aprender. EML é a espinha dorsal do modelador gráfico e os gmd são apenas scripts EML empacotados que ficam embaixo da interface do modelador gráfico. A vantagem de usar EML diretamente é que você pode usar loops for / while e ter acesso a mais funcionalidade do ERDAS em uma linguagem de script.

O MATLAB também é muito bom para o processamento de matrizes e existem versões de código aberto (por exemplo, Octave) que possuem exatamente a mesma sintaxe com referências semelhantes. Essa é uma linguagem altamente flexível e com considerável poder. É um dos idiomas preferidos para matemática aplicada e engenharia.

As alternativas Python NumPy e SciPy são flexíveis, mas não tão otimizadas quanto IDL e MATLAB. Como tal, você precisa lidar com espaço e velocidade de endereçamento ao trabalhar com matrizes grandes. Uma enorme vantagem do Python são as bibliotecas adicionais para executar uma variedade de tarefas analíticas. Existem pacotes para sensoriamento remoto , estatísticas não paramétricas , ligações a classes espaciais (por exemplo, GDAL, LibLAS) para citar apenas algumas das funcionalidades adicionais disponíveis nos pacotes.

Isso nos leva a R. Eu sou principalmente um estatístico espacial, portanto, essa é a minha linguagem cotidiana. O número de pacotes disponíveis é impressionante, o que, por sua vez, fornece acesso a metodologias estatísticas interdisciplinares de ponta. No entanto, devo dizer que é muito complicado ao lidar com grandes problemas de dados. As classes espaciais estão ficando muito melhores e, devido ao pacote raster fornecer a capacidade de reter grandes dados da memória, agora sou capaz de implementar alguns modelos estatísticos bastante complexos, utilizando grandes matrizes raster. Ainda assim, R é lento ao lidar com grandes problemas de memória. O pacote BigMatrix permite gravar e processar enormes matrizes a partir do disco, mas a sobrecarga de codificação não é insignificante. Também existem ligações ao software GDAL e GIS (por exemplo, GRASS, SAGA) que permitem que o processamento de objetos espaciais ocorra fora do R em um software específico de GIS, que é como eu interajo com o software GIS atualmente. Isso me permite alavancar a funcionalidade em vários softwares sem sair de R.

Então, agora que a líder de torcida do software está fora do caminho, minha recomendação é "sim para todas as opções acima". A programação é uma habilidade que, uma vez aprendida, é facilmente aplicada a outros idiomas. Existem semelhanças notáveis ​​entre C ++, R, IDL e Python. Além de algumas idiocentricidades de codificação, o que se deve aprender são as funções disponíveis para implementar um determinado modelo / tarefa. Feito isso, é apenas uma questão de sintaxe que implementa estruturas comuns de codificação.

Às vezes, existem coisas que funcionam melhor em um software ou idioma diferente. Ocasionalmente, escrevo código em FORTRAN ou C ++, porque é apenas a melhor opção para uma determinada tarefa. É uma questão de adaptabilidade. Você pode começar com o Python porque, como uma linguagem de script, ele pode ser aplicado a várias tarefas, além de oferecer pacotes de análises especializadas, possuir vários recursos online gratuitos e é um pouco fácil de aprender.

Jeffrey Evans
fonte
Votei isso não apenas porque é bem escrito e responsivo, mas também porque tive experiências semelhantes (incluindo uma incursão ocasional no Fortran :-) e tirei conclusões semelhantes sobre esses idiomas e ambientes de aplicativos.
whuber
+1 Um bom resumo das ferramentas disponíveis por aí. Obrigado por mencionar o EML. De uma perspectiva de script, o EML é um pouco desajeitado em comparação com o Python (IMOP), embora seja muito útil se Erdas for a sua GUI RS preferida. Infelizmente, não existe um idioma unificado que traga o melhor do GIS e do RS. Eu concordo absolutamente que cada pessoa precisa usar o melhor método disponível e ter uma variedade de idiomas à sua disposição. Um especialista em RS em um idioma é raro no campo, acredito.
Aaron
Concordo que começar com Python soa como minha melhor aposta, dado que é de código aberto e que existem muitos recursos online disponíveis. Eu tenho acesso ao ENVI, mas para minha pesquisa atual, posso gerenciar sem conhecer o IDL. Também estou estudando estatística espacial, então R também será importante. @Aaron parece estar certo - os especialistas em RS devem ser multilíngues! Mais uma vez obrigado pela resposta detalhada. Isso é realmente uma grande ajuda para alguém que está começando no campo.
217 Emily Emily
@ Emily, para estatísticas espaciais em Python, dê uma olhada no pacote PySAL ( geodacenter.asu.edu/pysal ). Há um livro de Kenneth Bowman, "Uma introdução à programação com IDL", que é uma introdução geral bastante boa. Eu acho que você ficaria surpreso com o quão longe chegaria trabalhando neste livro. Como mencionei, grande parte da sintaxe e da estrutura de codificação são semelhantes entre os idiomas mencionados, portanto, não há perda de tempo. Como você está trabalhando com a ENVI, alguns conhecimentos básicos de IDL seriam úteis em sua pesquisa. Não é tudo ou nada com um determinado idioma.
Jeffrey Evans
este post é um bom resumo - uma adição à minha experiência: Considerando o alto preço do ArcGis, Envi, Matlab e outras ferramentas, prefiro o OpenSource, que é gratuito. Para mim, uma combinação de Python / gdal e QuantumGIS funciona perfeitamente. Outros no meu local de trabalho usam o Matlab (mas também são muito caros). Nos meus arredores, R parece ser usado principalmente por biólogos por algum motivo.
Max
15

De uma perspectiva de sensoriamento remoto, o principal benefício do IDL é que ele estende a capacidade do ENVI, semelhante à maneira como o pacote de sites do Python estende a funcionalidade do ArcGIS. Se você não terá acesso à plataforma ENVI, considere aprender uma linguagem de programação diferente. Além disso, o IDL é um produto comercial, enquanto o Python é de código aberto e possui uma enorme base de suporte.

Do ponto de vista prático, Python , R (código aberto) e MATLAB (comercial) são as linguagens mais importantes para o meu trabalho diário de sensoriamento remoto. Uso MATLAB para grande parte do processamento de imagens digitais, Python para tarefas relacionadas ao GIS e R para fins gráficos / analíticos.

Finalmente, se eu tivesse que concentrar todos os meus esforços em um idioma, eu escolheria aprender Python principalmente porque a funcionalidade Python é muito mais adequada ao processamento relacionado ao GIS, além da funcionalidade baseada em RS. Em outras palavras, Python é um pau para toda obra, enquanto o IDL não é. Além disso, a NASA usa Python !

Aaron
fonte
1
Existem muitos módulos no python, como pyh5 e numpy / scipy. Também existem bibliotecas maiores, como o OSSIM , especificamente para processamento de imagens.
Roland
1
+1 em python. É uma linguagem de uso geral e, se você precisar usar ferramentas que podem ser "usadas imediatamente" nos scripts GIS, o python poderá fazê-lo.
Obrigado pessoal, parece que vou começar a trabalhar no Python e expandir para outros idiomas assim que eu tiver um. Muito obrigado pela sua ajuda.
217 Emily Emily
1
Não se esqueça do Rasterio: github.com/mapbox/rasterio, uma nova biblioteca de rasters para Python.
Alex Leith
2

Eu sugiro fortemente o aprendizado da teoria básica da ciência da computação, em vez de focar em uma linguagem processual. Adquirir uma base na teoria de CS permitiria o uso de linguagens de programação de maneira intercambiável. No dia-a-dia, uso de duas a três linguagens para escrever código (principalmente Matlab, R, Python) e, no último mês, também escrevi código em VB, BATCH e EASE (PCI Focus).

Isso é importante não apenas para aprender facilmente vários idiomas, mas para evitar erros básicos.

Alguns tópicos recomendados são:

  • tipos de dados, uso de memória
  • condições
  • iteração
  • correspondência de padrões
  • paradigma processual, modularidade

Além disso, se você estiver com problemas para escrever código, dê um passo atrás e escreva o pseudocódigo. Basicamente, escreva passo a passo a lógica por trás do seu código e o que você deseja que ele realize.

Se você é um estudante, recomendo fazer o primeiro e o segundo ano de cursos de ficção científica.

Felicidades.

Jean B.
fonte
2

Acho que vale a pena uma resposta separada: Uma página absolutamente ótima para aprender como usar o Python para Sensoriamento Remoto é esta, as notas da aula são um ótimo tutorial: http://www.gis.usu.edu/~chrisg/python / 2009 /

Para mim, uma combinação de Python e QuantumGIS resolve todas as minhas necessidades de Sensoriamento Remoto e GIS.

Máx.
fonte
0

depende realmente dos pacotes que você espera usar no sensoriamento remoto (análise de imagem). O ArcGIS (ESRI) não é um pacote de sensoriamento remoto. Se você quiser usar pacotes de código aberto, eu concordaria que Python e R são ótimas linguagens. Eu também consideraria C ++ e C, para que você possa se aprofundar em algumas das bibliotecas (ou seja: GDAL). Se você deseja manter os pacotes comerciais prontos para uso (COTS), deverá procurar mais nas linguagens C (C, C ++ e C #). Feliz codificação.

Ryan Garnett
fonte