Ngôn ngữ lập trình được đề xuất cho viễn thám?


14

Tôi đang bắt đầu các nghiên cứu hy vọng sẽ dẫn đến một sự nghiệp lâu dài như một chuyên gia viễn thám. Tôi hiện đang làm việc với ArcGIS cho một số ứng dụng và học ENVI cho những người khác. Tôi đã nhận ra rằng bắt buộc tôi phải học một ngôn ngữ lập trình và bị mắc kẹt khi phải đối mặt với sự lựa chọn giữa IDL và Python. Tôi rất thích nghe ngôn ngữ lập trình nào mà cộng đồng đề xuất cho việc viễn thám các quy trình trên mặt đất.

Câu trả lời:


28

IDL là một ngôn ngữ lập trình độc lập tuyệt vời (bạn không cần ENVI). Tôi đặc biệt thích nó để xử lý ma trận rất nhanh trên các mảng lớn. @Aaron làm cho IDL âm thanh kém linh hoạt hơn nhiều thì thực sự là như vậy. Phần lớn sự phát triển của IDL ra khỏi cộng đồng Vật lý và Thiên văn. Có sự hỗ trợ mạnh mẽ cho lập trình toán học và thống kê. Nếu được gói cùng với ENVI, bạn có tất cả các lệnh gọi thư viện (hàm) có sẵn trong ENVI, bao gồm hỗ trợ cho các đối tượng vectơ không gian. Ngoài ra còn có một số lượng lớn các chức năng và mô hình được phát triển bởi cộng đồng người dùng. Một lợi thế khi học IDL là nó sẽ giúp bạn tiếp thị được trong các cửa hàng viễn thám "phân tích".

Ngoài ra, đừng quên rằng ERDAS có ngôn ngữ kịch bản (EML) khá tốt và dễ học. EML là xương sống của trình tạo mô hình đồ họa và gmd chỉ là các tập lệnh EML được đóng gói nằm dưới giao diện của trình tạo mô hình đồ họa. Ưu điểm của việc sử dụng EML trực tiếp là bạn có thể sử dụng các vòng lặp for / while và có quyền truy cập vào nhiều chức năng ERDAS hơn bằng ngôn ngữ kịch bản.

MATLAB cũng rất tốt để xử lý ma trận và có các phiên bản nguồn mở (ví dụ, Octave) có cùng một cú pháp với các điểm chuẩn tương tự. Đây là một ngôn ngữ rất linh hoạt với sức mạnh đáng kể. Đây là một trong những ngôn ngữ ưa thích cho toán học ứng dụng và kỹ thuật.

Các lựa chọn thay thế Python NumPy và SciPy rất linh hoạt nhưng không được tối ưu hóa như IDL và MATLAB. Như vậy, bạn cần xử lý không gian và tốc độ khi làm việc với các mảng lớn. Một lợi thế rất lớn của Python là các thư viện bổ sung để thực hiện nhiều nhiệm vụ phân tích. Có các gói cho viễn thám , thống kê phi tham số , các ràng buộc với các lớp không gian (ví dụ: GDAL, LibLAS) để đặt tên cho một số chức năng được thêm vào có sẵn thông qua các gói.

Điều này đưa chúng ta đến R. Tôi chủ yếu là một nhà thống kê không gian, vì vậy, đây là ngôn ngữ hàng ngày của tôi. Số lượng các gói có sẵn là đáng kinh ngạc, lần lượt, cung cấp quyền truy cập vào các phương pháp thống kê xuyên ngành tiên tiến. Tuy nhiên, tôi phải nói rằng nó rất cồng kềnh khi xử lý các vấn đề dữ liệu lớn. Các lớp không gian đang trở nên tốt hơn nhiều và do gói raster cung cấp khả năng giữ dữ liệu lớn trong bộ nhớ, giờ đây tôi có thể thực hiện một số mô hình thống kê khá phức tạp sử dụng các mảng raster lớn. Tuy nhiên, R vẫn chậm khi xử lý các vấn đề bộ nhớ lớn. Gói BigMatrix cho phép ghi và xử lý các mảng lớn từ đĩa nhưng chi phí mã hóa không đáng kể Ngoài ra còn có các ràng buộc với phần mềm GDAL và GIS (ví dụ: GRASS, SAGA) cho phép xử lý đối tượng không gian xảy ra bên ngoài R trong một phần mềm cụ thể của GIS, đó là cách tôi tương tác với phần mềm GIS hiện nay. Điều này cho phép tôi tận dụng chức năng trên nhiều phần mềm mà không cần rời R.

Vì vậy, bây giờ khi phần mềm cổ vũ không còn hoạt động nữa, khuyến nghị của tôi là "có cho tất cả các tùy chọn trên". Lập trình là một kỹ năng mà một khi đã học được dễ dàng áp dụng cho các ngôn ngữ khác. Có những điểm tương đồng nổi bật giữa C ++, R, IDL và Python. Ngoài một số thành ngữ mã hóa, những gì người ta phải học là các chức năng có sẵn để thực hiện một mô hình / nhiệm vụ nhất định. Một khi điều này được thực hiện, nó chỉ là một vấn đề cú pháp thực hiện các cấu trúc mã hóa phổ biến.

Đôi khi có những thứ chỉ hoạt động tốt hơn trong một phần mềm hoặc ngôn ngữ khác. Thỉnh thoảng tôi viết mã bằng FORTRAN hoặc C ++ vì đó chỉ là lựa chọn tốt nhất cho một tác vụ nhất định. Đó là một vấn đề về khả năng thích ứng. Bạn có thể muốn bắt đầu với Python vì, như một ngôn ngữ kịch bản, nó có thể được áp dụng cho nhiều tác vụ, nó cũng cung cấp các gói để phân tích chuyên ngành, có một số tài nguyên trực tuyến miễn phí và hơi dễ học.


Tôi ủng hộ điều này không chỉ bởi vì nó được viết và phản hồi tốt mà còn bởi vì tôi đã có những trải nghiệm tương tự (bao gồm cả sự đột phá trở lại vào Fortran :-) và đưa ra kết luận tương tự về các ngôn ngữ và môi trường ứng dụng này.
whuber

+1 Một bản tóm tắt tốt về các công cụ có sẵn ngoài kia. Cảm ơn đã đề cập đến EML. Từ góc độ kịch bản, EML có một chút lộn xộn so với Python (IMOP), mặc dù rất tiện dụng nếu Erdas là GUI RS bạn chọn. Thật không may, không có một ngôn ngữ thống nhất nào mang lại điều tốt nhất từ ​​GIS và RS. Tôi hoàn toàn đồng ý rằng mỗi người cần sử dụng phương pháp tốt nhất hiện có và có nhiều ngôn ngữ theo ý của họ. Một chuyên gia RS một ngôn ngữ là rất hiếm trong lĩnh vực này, tôi tin.
Aaron

Tôi đồng ý rằng bắt đầu với Python nghe giống như đặt cược tốt nhất của tôi, thực tế là nó là nguồn mở và có nhiều tài nguyên trực tuyến có sẵn. Tôi có quyền truy cập ENVI, nhưng đối với nghiên cứu hiện tại của tôi, tôi có thể quản lý mà không cần biết IDL. Tôi cũng đang nghiên cứu thống kê không gian, vì vậy R cũng sẽ quan trọng. @Aaron có vẻ đúng - Chuyên gia RS phải đa ngôn ngữ! Cảm ơn một lần nữa cho các phản ứng chi tiết. Đây thực sự là một trợ giúp rất lớn cho một người mới bắt đầu trong lĩnh vực này.
Emily

@Emily, để biết số liệu thống kê không gian trong Python, hãy xem gói PySAL ( geodacenter.asu.edu/pysal ). Có một cuốn sách của Kenneth Bowman, "Giới thiệu về lập trình với IDL" là một giới thiệu chung khá hay. Tôi nghĩ rằng bạn sẽ ngạc nhiên khi bạn sẽ đi được bao xa chỉ bằng cách làm việc thông qua cuốn sách này. Như tôi đã đề cập, phần lớn cú pháp và cấu trúc mã hóa giống nhau giữa các ngôn ngữ được đề cập như vậy, không lãng phí thời gian. Vì bạn đang làm việc với ENVI, một số kiến ​​thức cơ bản về IDL sẽ hữu ích trong nghiên cứu của bạn. Nó không phải là tất cả hoặc không có gì với một ngôn ngữ nhất định.
Jeffrey Evans

bài đăng này là một bản tóm tắt tốt - một bổ sung từ kinh nghiệm của tôi: Xem xét mức giá cao của ArcGis, Envi, Matlab và các công cụ khác, tôi thích OpenSource, miễn phí. Đối với tôi, sự kết hợp giữa Python / gdal và QuantumGIS hoạt động hoàn hảo. Những người khác tại nơi làm việc của tôi sử dụng Matlab (nhưng cũng rất đắt tiền). Trong môi trường xung quanh tôi, R dường như chủ yếu được sử dụng bởi các nhà sinh học vì một số lý do.
Tối đa

15

Từ góc độ viễn thám, lợi ích chính của IDL là nó mở rộng khả năng của ENVI tương tự như cách gói trang web Python Arcpy mở rộng chức năng của ArcGIS. Nếu bạn sẽ không có quyền truy cập vào nền tảng ENVI, hãy xem xét việc học một ngôn ngữ lập trình khác. Ngoài ra, IDL là một sản phẩm thương mại trong khi Python là nguồn mở và có một cơ sở hỗ trợ rất lớn.

Từ góc độ thực tế, Python , R (nguồn mở) và MATLAB (thương mại) là những ngôn ngữ quan trọng nhất cho công việc dựa trên viễn thám hàng ngày của tôi. Tôi sử dụng MATLAB cho phần lớn xử lý hình ảnh kỹ thuật số, Python cho nhiều tác vụ liên quan đến GIS và R cho mục đích đồ họa / phân tích.

Cuối cùng, nếu tôi phải tập trung tất cả nỗ lực vào một ngôn ngữ, tôi sẽ chọn học Python chủ yếu vì chức năng Python phù hợp hơn nhiều với xử lý liên quan đến GIS ngoài chức năng dựa trên RS. Nói cách khác, Python là một công cụ giao dịch trong khi IDL thì không. Bên cạnh đó, NASA sử dụng Python !


1
Có nhiều mô-đun trong python, như pyh5 và numpy / scipy. Ngoài ra còn có các thư viện lớn hơn như OSSIM , đặc biệt để xử lý hình ảnh.
Roland

1
+1 trên con trăn. Đó là ngôn ngữ có mục đích chung và nếu bạn cần sử dụng các công cụ có thể rơi ra khỏi hộp 'với kịch bản GIS, python có thể làm điều đó.

Cảm ơn mọi người, có vẻ như tôi sẽ bắt đầu làm việc với Python và mở rộng sang các ngôn ngữ khác sau khi tôi có ngôn ngữ đó. Rất cảm ơn vì sự giúp đỡ của bạn.
Emily

1
Đừng quên Rasterio: github.com/mapbox/rasterio một thư viện mới dành cho raster cho Python.
Alex Leith

2

Tôi thực sự khuyên bạn nên học lý thuyết khoa học máy tính cơ bản thay vì tập trung vào một ngôn ngữ thủ tục. Có được một nền tảng trong lý thuyết CS sẽ cho phép bạn sử dụng các ngôn ngữ lập trình thay thế cho nhau. Trên cơ sở hàng ngày, tôi sử dụng hai đến ba ngôn ngữ để viết mã (Chủ yếu là Matlab, R, Python) và trong tháng trước tôi cũng đã viết mã bằng VB, BATCH và EASE (PCI Focus).

Điều này không chỉ quan trọng để có thể dễ dàng học nhiều ngôn ngữ, mà còn tránh mắc các lỗi cơ bản.

Một vài chủ đề được đề xuất là:

  • kiểu dữ liệu, sử dụng bộ nhớ
  • điều kiện
  • lặp đi lặp lại
  • khớp mẫu
  • mô hình thủ tục, mô đun

Ngoài ra, nếu bạn gặp vấn đề với việc viết mã, hãy lùi lại một bước và viết mã giả. Về cơ bản hãy viết từng bước logic đằng sau mã của bạn và những gì bạn muốn nó thực hiện.

Nếu bạn là sinh viên, tôi khuyên bạn nên tham gia các khóa học compi năm thứ nhất và năm thứ hai.

Chúc mừng.


2

Tôi nghĩ rằng đây là một câu trả lời riêng biệt: Một trang hoàn toàn tuyệt vời để tìm hiểu về cách sử dụng Python cho Viễn thám là trang này, ghi chú bài giảng là một hướng dẫn tuyệt vời: http://www.gis.usu.edu/~chrisg/python / 2009 /

Đối với tôi, sự kết hợp giữa Python và QuantumGIS giải quyết tất cả các nhu cầu về Viễn thám và GIS của tôi.


0

nó thực sự phụ thuộc vào các gói bạn hy vọng sẽ sử dụng trong viễn thám (phân tích hình ảnh). ArcGIS (ESRI) không phải là gói viễn thám. Nếu bạn muốn sử dụng các gói nguồn mở, tôi đồng ý rằng Python và R là những ngôn ngữ tuyệt vời. Tôi cũng sẽ xem xét C ++ và C, vì vậy bạn có thể đi sâu hơn vào một số thư viện (ví dụ: GDAL). Nếu bạn muốn gắn bó với các gói thương mại (COTS), thì bạn sẽ muốn tìm hiểu thêm về các ngôn ngữ C (C, C ++ và C #). Chúc mừng mã hóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.