Рекомендуемый язык программирования для дистанционного зондирования?

14

Я начинаю исследования, которые, надеюсь, приведут к долгой карьере специалиста по дистанционному зондированию. В настоящее время я работаю с ArcGIS для некоторых приложений и изучаю ENVI для других. Я понял, что я обязательно изучу язык программирования, и я застрял перед выбором между IDL и Python. Я хотел бы услышать, какой язык программирования сообщество рекомендует для дистанционного зондирования процессов на поверхности земли.

Эмили
источник

Ответы:

28

IDL - это фантастический автономный язык программирования (вам не нужен ENVI). Мне особенно нравится это для очень быстрой обработки матрицы на больших массивах. @ Аарон делает звук IDL гораздо менее гибким, чем он есть на самом деле. Большинство разработок IDL пришли из сообществ физики и астрономии. Существует надежная поддержка математического и статистического программирования. Если в комплекте с ENVI, у вас есть все библиотечные вызовы (функции), доступные в ENVI, включая поддержку пространственных векторных объектов. Существует также большое количество функций и моделей, разработанных сообществом пользователей. Одним из преимуществ изучения IDL является то, что он сделает вас конкурентоспособным в «аналитических» магазинах дистанционного зондирования.

Кроме того, не забывайте, что в ERDAS есть язык сценариев (EML), который довольно хорош и прост в освоении. EML является основой графического моделера, а gmd - это просто упакованные EML-скрипты, которые находятся под интерфейсом графического моделера. Преимущество непосредственного использования EML заключается в том, что вы можете использовать циклы for / while и иметь доступ к дополнительным функциям ERDAS на языке сценариев.

MATLAB также очень хорош для обработки матриц, и есть версии с открытым исходным кодом (например, Octave), которые имеют точно такой же синтаксис с аналогичными тестами. Это очень гибкий язык со значительной силой. Это один из предпочтительных языков для прикладной математики и техники.

Альтернативы Python NumPy и SciPy являются гибкими, но не такими оптимизированными, как IDL и MATLAB. Таким образом, вам нужно иметь дело с адресным пространством и скоростью при работе с большими массивами. Одним из огромных преимуществ Python являются дополнительные библиотеки для выполнения различных аналитических задач. Существуют пакеты для дистанционного зондирования , непараметрической статистики , привязок к пространственным классам (например, GDAL, LibLAS), чтобы назвать лишь некоторые из дополнительных функций, доступных через пакеты.

Это подводит нас к R. Я прежде всего пространственный статистик, так что это мой повседневный язык. Количество доступных пакетов ошеломляет, что, в свою очередь, обеспечивает доступ к самым современным междисциплинарным статистическим методологиям. Однако я должен сказать, что это очень громоздко при работе с большими данными. Пространственные классы становятся намного лучше, и благодаря растровому пакету, позволяющему хранить большие данные в памяти, я теперь могу реализовать некоторые довольно сложные статистические модели, использующие большие растровые массивы. Но все же R медленно работает с большими проблемами с памятью. Пакет BigMatrix позволяет записывать и обрабатывать огромные массивы с диска, но накладные расходы на кодирование не являются незначительными. Существуют также привязки к программному обеспечению GDAL и ГИС (например, GRASS, SAGA), которые позволяют обрабатывать пространственные объекты за пределами R в программном обеспечении, специально предназначенном для ГИС, и именно так я сегодня взаимодействую с программным обеспечением ГИС. Это позволяет мне использовать функциональность нескольких программ, не покидая R.

Итак, теперь, когда поддержка программного обеспечения уже не существует, я рекомендую «да, для всех вышеупомянутых вариантов». Программирование - это навык, который после изучения легко применяется к другим языкам. Есть поразительное сходство между C ++, R, IDL и Python. Помимо некоторой идиоцентричности кодирования, необходимо изучить доступные функции для реализации данной модели / задачи. Как только это сделано, это всего лишь вопрос синтаксиса, который реализует общие структуры кодирования.

Иногда есть вещи, которые лучше работают на другом программном обеспечении или языке. Я иногда пишу код на FORTRAN или C ++, потому что это просто лучший выбор для данной задачи. Это вопрос приспособляемости. Возможно, вы захотите начать с Python, потому что, как язык сценариев, он может применяться к многочисленным задачам, он также обеспечивает доступность пакетов для специализированного анализа, имеет ряд бесплатных онлайн-ресурсов и несколько прост в освоении.

Джеффри Эванс
источник
Я проголосовал за это не только потому, что он хорошо написан и отзывчив, но и потому, что у меня был похожий опыт (включая случайные набеги на Фортран :-) и я делаю аналогичные выводы об этих языках и средах приложений.
whuber
+1 Хорошее резюме доступных инструментов там. Спасибо за упоминание EML. С точки зрения сценариев, EML немного неуклюжий по сравнению с Python (IMOP), хотя и очень удобен, если Erdas - ваш выбор RS GUI. К сожалению, нет единого языка, который принес бы лучшее от ГИС и РС. Я абсолютно согласен с тем, что каждый человек должен использовать наилучший доступный метод и иметь в своем распоряжении множество языков. Я считаю, что специалист по РС с одним языком встречается редко.
Аарон
Я согласен, что начинать с Python звучит как моя лучшая ставка, учитывая тот факт, что это открытый исходный код и что доступно много онлайн-ресурсов. У меня есть доступ к ENVI, но для моего текущего исследования я могу управлять, не зная IDL. Я также изучаю пространственную статистику, поэтому R также будет иметь важное значение. @ Аарон, похоже, прав - специалисты по РС должны быть многоязычными! Еще раз спасибо за подробный ответ. Это действительно огромная помощь для тех, кто только начинает работать в этой области.
Эмили
@ Emily, для пространственной статистики в Python взгляните на пакет PySAL ( geodacenter.asu.edu/pysal ). Есть книга Кеннета Боумена «Введение в программирование с IDL», которая является довольно хорошим общим введением. Я думаю, что вы будете удивлены, насколько далеко вы продвинетесь, просто работая над этой книгой. Как я уже говорил, большая часть синтаксиса и структуры кодирования одинаковы в упомянутых языках, поэтому не теряйте времени. Поскольку вы работаете с ENVI, некоторые базовые знания IDL будут полезны в ваших исследованиях. Это не все или ничего с данным языком.
Джеффри Эванс
этот пост - хорошее резюме - дополнение из моего опыта: учитывая высокую стоимость ArcGis, Envi, Matlab и других инструментов, я предпочитаю OpenSource, который является бесплатным. Для меня сочетание Python / GDAL и QuantumGIS работает отлично. Другие на моем рабочем месте используют Matlab (но тоже очень дорого). В моем окружении, R, по некоторым причинам, в основном используется биологами.
Макс
15

С точки зрения дистанционного зондирования, основное преимущество IDL заключается в том, что он расширяет возможности ENVI, подобно тому, как пакет Python для Arcpy расширяет функциональность ArcGIS. Если у вас не будет доступа к платформе ENVI, подумайте об изучении другого языка программирования. Кроме того, IDL является коммерческим продуктом, тогда как Python является открытым исходным кодом и имеет огромную базу поддержки.

С практической точки зрения Python , R (с открытым исходным кодом) и MATLAB (коммерческий) являются наиболее важными языками для моей повседневной работы, основанной на дистанционном зондировании. Я использую MATLAB для большей части обработки цифровых изображений, Python для задач, связанных с ГИС, и R для графических / аналитических целей.

Наконец, если бы мне пришлось сосредоточить все свои усилия на одном языке, я бы предпочел изучать Python главным образом потому, что функциональность Python гораздо больше подходит для обработки, связанной с ГИС, в дополнение к функциональности на основе RS. Другими словами, Python - мастер на все руки, а IDL - нет. Кроме того, НАСА использует Python !

Аарон
источник
1
В Python есть много модулей, таких как pyh5 и numpy / scipy. Существуют также большие библиотеки, такие как OSSIM , специально для обработки изображений.
Роланд
1
+1 на питоне. Это язык общего назначения, и если вам нужно использовать инструменты, которые могут выпасть «из коробки» при использовании сценариев ГИС, Python может сделать это.
Спасибо, ребята, звучит так, будто я начну работать над Python и перейду к другим языкам, как только у меня будет этот вариант. Большое спасибо за вашу помощь.
Эмили
1
Не забудьте о Rasterio: github.com/mapbox/rasterio - новая библиотека для растров для Python.
Алекс Лейт
2

Я настоятельно рекомендую изучать основную теорию информатики вместо того, чтобы сосредоточиться на одном процедурном языке. Приобретение основ в теории CS позволит вам использовать языки программирования взаимозаменяемо. Для повседневной работы я использую два-три языка для написания кода (в основном Matlab, R, Python), а в прошлом месяце я также написал код на VB, BATCH и EASE (PCI Focus).

Это важно не только для того, чтобы легко выучить несколько языков, но и для избежания основных ошибок.

Несколько рекомендуемых тем:

  • типы данных, использование памяти
  • условия
  • итерация
  • сопоставление с образцом
  • процессуальная парадигма, модульность

Также, если у вас возникли проблемы с написанием кода, сделайте шаг назад и напишите псевдокод. По сути, напишите пошаговую логику вашего кода и то, что вы хотите, чтобы он выполнял.

Если вы студент, я рекомендую пройти первый и второй курс по компьютерным наукам.

Приветствия.

Жан Б.
источник
2

Я думаю, что это стоит отдельного ответа: абсолютно отличная страница для изучения того, как использовать Python для дистанционного зондирования, это лекционные заметки, являющиеся отличным учебным пособием: http://www.gis.usu.edu/~chrisg/python / 2009 /

Для меня сочетание Python и QuantumGIS решает все мои потребности в дистанционном зондировании и ГИС.

Максимум
источник
0

это действительно зависит от пакетов, которые вы надеетесь использовать для дистанционного зондирования (анализа изображений). ArcGIS (ESRI) не является пакетом дистанционного зондирования. Если вы хотите использовать пакеты с открытым исходным кодом, я бы согласился, что Python и R - отличные языки. Я бы также рассмотрел C ++ и C, чтобы вы могли глубже погрузиться в некоторые библиотеки (например, GDAL). Если вы хотите придерживаться коммерческих готовых пакетов (COTS), то вам нужно больше взглянуть на языки C (C, C ++ и C #). Удачного кодирования.

Райан Гарнетт
источник