Langage de programmation recommandé pour la télédétection?

14

Je commence des études qui, je l'espère, mèneront à une longue carrière en tant que spécialiste de la télédétection. Je travaille actuellement avec ArcGIS pour certaines applications et j'apprends ENVI pour d'autres. J'ai réalisé qu'il est impératif que j'apprenne un langage de programmation, et je suis coincé face à un choix entre IDL et Python. J'aimerais savoir quel langage de programmation la communauté recommande pour la télédétection des processus de surface terrestre.

Emilie
la source

Réponses:

28

IDL est un fantastique langage de programmation autonome (vous n'avez pas besoin d'ENVI). Je l'aime particulièrement pour un traitement matriciel très rapide sur de grands tableaux. @Aaron rend le son IDL beaucoup moins flexible qu'il ne l'est vraiment. La majorité du développement IDL provient des communautés de physique et d'astronomie. Il existe un support robuste pour la programmation mathématique et statistique. Si fourni avec ENVI, vous disposez de tous les appels de bibliothèque (fonctions) disponibles dans ENVI, y compris la prise en charge des objets vectoriels spatiaux. Il existe également un grand nombre de fonctions et de modèles développés par la communauté des utilisateurs. L'un des avantages de l'apprentissage de l'IDL est qu'il vous rendra commercialisable dans les magasins de télédétection "analytiques".

N'oubliez pas non plus qu'ERDAS possède un langage de script (EML) assez bon et facile à apprendre. EML est l'épine dorsale du modeleur graphique et les gmd ne sont que des scripts EML packagés qui se trouvent sous l'interface du modeleur graphique. L'avantage d'utiliser directement EML est que vous pouvez utiliser des boucles for / while et avoir accès à davantage de fonctionnalités ERDAS dans un langage de script.

MATLAB est également très bon pour le traitement matriciel et il existe des versions open source (par exemple, Octave) qui ont exactement la même syntaxe avec des benchmarks similaires. Il s'agit d'un langage très flexible avec une puissance considérable. C'est l'une des langues préférées pour les mathématiques appliquées et l'ingénierie.

Les alternatives Python NumPy et SciPy sont flexibles mais pas aussi optimisées que IDL et MATLAB. En tant que tel, vous devez gérer l'espace et la vitesse d'adressage lorsque vous travaillez avec de grandes baies. Un énorme avantage de Python sont les bibliothèques supplémentaires pour effectuer une variété de tâches analytiques. Il existe des packages pour la télédétection , des statistiques non paramétriques , des liaisons aux classes spatiales (par exemple GDAL, LibLAS) pour ne nommer que quelques-unes des fonctionnalités supplémentaires disponibles via les packages.

Cela nous amène à R. Je suis principalement un statisticien spatial donc, c'est mon langage de tous les jours. Le nombre de progiciels disponibles est stupéfiant, ce qui, à son tour, donne accès à des méthodologies statistiques interdisciplinaires de pointe. Cependant, je dois dire que c'est très lourd lorsque l'on traite de gros problèmes de données. Les classes spatiales s'améliorent beaucoup et grâce au package raster offrant la possibilité de conserver de grandes données hors de la mémoire, je suis maintenant en mesure de mettre en œuvre des modèles statistiques assez complexes en utilisant de grands tableaux raster. Mais encore, R est lent lorsqu'il s'agit de gros problèmes de mémoire. Le package BigMatrix permet d'écrire et de traiter d'énormes tableaux à partir du disque, mais la surcharge de codage n'est pas négligeable. Il existe également des liaisons avec les logiciels GDAL et GIS (par exemple, GRASS, SAGA) qui permettent au traitement des objets spatiaux de se produire en dehors de R dans un logiciel spécifique au SIG, c'est ainsi que j'interagis avec le logiciel SIG de nos jours. Cela me permet de tirer parti des fonctionnalités de plusieurs logiciels sans quitter R.

Donc, maintenant que le logiciel de cheerleading est à l'écart, ma recommandation est "oui à toutes les options ci-dessus". La programmation est une compétence qui, une fois apprise, est facilement applicable à d'autres langues. Il existe des similitudes frappantes entre C ++, R, IDL et Python. Mis à part quelques idiocentricités de codage, ce qu'il faut apprendre, ce sont les fonctions disponibles pour implémenter un modèle / tâche donné. Une fois cela fait, ce n'est qu'une question de syntaxe qui implémente des structures de codage communes.

Parfois, il y a des choses qui fonctionnent mieux dans un logiciel ou un langage différent. J'écris de temps en temps du code en FORTRAN ou C ++ parce que c'est juste le meilleur choix pour une tâche donnée. C'est une question d'adaptabilité. Vous voudrez peut-être commencer par Python car, en tant que langage de script, il peut être appliqué à de nombreuses tâches, il fournit également la disponibilité de packages pour une analyse spécialisée, dispose d'un certain nombre de ressources en ligne gratuites et est assez facile à apprendre.

Jeffrey Evans
la source
J'ai voté pour cela non seulement parce qu'il est bien écrit et réactif, mais aussi parce que j'ai eu des expériences similaires (y compris des incursions occasionnelles dans Fortran :-) et que je tire des conclusions similaires sur ces langages et environnements d'application.
whuber
+1 Un bon résumé des outils disponibles sur le marché. Merci d'avoir mentionné EML. Du point de vue des scripts, EML est un peu maladroit par rapport à Python (IMOP), bien que très pratique si Erdas est votre interface graphique RS de choix. Malheureusement, il n'y a pas de langage unifié qui apporte le meilleur du SIG et de RS. Je suis absolument d'accord que chaque personne doit utiliser la meilleure méthode disponible et avoir une variété de langues à sa disposition. Un spécialiste des langues unilingues est rare dans le domaine, je crois.
Aaron
Je suis d'accord que commencer avec Python semble être mon meilleur pari, étant donné qu'il est open source et qu'il existe de nombreuses ressources en ligne disponibles. J'ai accès à ENVI, mais pour mes recherches actuelles, je peux gérer sans connaître IDL. J'étudie également les statistiques spatiales, donc R sera également important. @Aaron semble avoir raison - les spécialistes RS doivent être multilingues! Merci encore pour la réponse détaillée. C'est vraiment une aide énorme pour quelqu'un qui débute dans le domaine.
Emily
@Emily, pour les statistiques spatiales en Python, jetez un œil au package PySAL ( geodacenter.asu.edu/pysal ). Il y a un livre de Kenneth Bowman, "An Introduction to Programming with IDL" qui est une assez bonne introduction générale. Je pense que vous seriez surpris de voir jusqu'où vous iriez en travaillant simplement sur ce livre. Comme je l'ai mentionné, une grande partie de la syntaxe et de la structure de codage sont similaires entre les langages mentionnés, donc pas de perte de temps. Puisque vous travaillez avec ENVI, une connaissance de base de l'IDL serait utile dans votre recherche. Ce n'est pas tout ou rien avec une langue donnée.
Jeffrey Evans
ce message est un bon résumé - un ajout de mon expérience: Compte tenu du prix élevé d'ArcGis, Envi, Matlab et d'autres outils, je préfère OpenSource, qui est gratuit. Pour moi, une combinaison de Python / gdal et QuantumGIS fonctionne parfaitement. D'autres sur mon lieu de travail utilisent Matlab (mais aussi très cher). Dans mon environnement, R semble être principalement utilisé par les biologistes pour une raison quelconque.
Max
15

Du point de vue de la télédétection, le principal avantage d'IDL est qu'il étend les capacités d'ENVI de la même manière que le package de site arcpy Python étend les fonctionnalités d'ArcGIS. Si vous n'avez pas accès à la plateforme ENVI, envisagez d'apprendre un langage de programmation différent. De plus, IDL est un produit commercial tandis que Python est open-source et dispose d'une énorme base de support.

D'un point de vue pratique, Python , R (open-source) et MATLAB (commercial) sont les langages les plus importants pour mon travail quotidien basé sur la télédétection. J'utilise MATLAB pour une grande partie du traitement d'image numérique, Python pour plus de tâches liées au SIG et R à des fins graphiques / analytiques.

Enfin, si je devais concentrer tous mes efforts sur une seule langue, je choisirais d'apprendre Python principalement parce que la fonctionnalité Python est beaucoup plus adaptée au traitement lié aux SIG en plus des fonctionnalités basées sur RS. En d'autres termes, Python est un jack-of-all-trades alors que l'IDL ne l'est pas. De plus, la NASA utilise Python !

Aaron
la source
1
Il existe de nombreux modules en python, comme pyh5 et numpy / scipy. Il existe également de plus grandes bibliothèques comme OSSIM , spécifiquement pour le traitement d'image.
Roland
1
+1 sur python. C'est un langage à usage général, et si vous avez besoin d'utiliser des outils qui peuvent tomber «hors de la boîte» avec les scripts SIG, python peut le faire.
Merci les gars, on dirait que je vais commencer à travailler sur Python et étendre à d'autres langues une fois que j'aurai celui-ci en panne. Merci beaucoup pour votre aide.
Emily
1
N'oubliez pas Rasterio: github.com/mapbox/rasterio une nouvelle bibliothèque de rasters pour Python.
Alex Leith
2

Je suggère fortement d'apprendre la théorie informatique de base au lieu de se concentrer sur un langage procédural. Acquérir une base dans la théorie CS vous permettrait d'utiliser les langages de programmation de manière interchangeable. Au quotidien, j'utilise deux à trois langues pour écrire du code (principalement Matlab, R, Python), et au cours du dernier mois, j'ai également écrit du code en VB, BATCH et EASE (PCI Focus).

Ceci est non seulement important pour pouvoir facilement apprendre plusieurs langues, mais pour éviter de faire des erreurs de base.

Quelques sujets recommandés sont:

  • types de données, utilisation de la mémoire
  • conditions
  • itération
  • correspondance de motifs
  • paradigme procédural, modularité

De plus, si vous rencontrez des problèmes pour écrire du code, prenez du recul et écrivez le pseudocode. Fondamentalement, écrivez étape par étape la logique derrière votre code et ce que vous voulez qu'il accomplisse.

Si vous êtes étudiant, je vous recommande de suivre des cours de science-fiction de première et deuxième années.

À votre santé.

Jean B.
la source
2

Je pense que cela mérite une réponse distincte: une page absolument géniale pour apprendre à utiliser Python pour la télédétection est celle-ci, les notes de cours étant un excellent tutoriel: http://www.gis.usu.edu/~chrisg/python / 2009 /

Pour moi, une combinaison de Python et QuantumGIS résout tous mes besoins en télédétection et SIG.

Max
la source
0

cela dépend vraiment des packages que vous espérez utiliser en télédétection (analyse d'images). ArcGIS (ESRI) n'est pas un package de télédétection. Si vous souhaitez utiliser des packages open source, je conviens que Python et R sont d'excellents langages. Je considérerais également le C ++ et le C, afin que vous puissiez approfondir certaines bibliothèques (par exemple: GDAL). Si vous souhaitez vous en tenir aux packages commerciaux standard (COTS), vous voudrez peut-être en savoir plus sur les langages C (C, C ++ et C #). Codage heureux.

Ryan Garnett
la source