Hiển thị hình ảnh vệ tinh trên bản đồ google
This introductory training is part of the official training materials prepared by the United States Department of Agriculture.
Google Earth Engine làm việc thông qua Giao Diện Trực tuyến của Ứng Dụng JavaScript (API) được gọi là Code Editor. Trên giao diện này, người dùng có thể viết và chạy các tập lệnh/script để chia sẻ và lặp lại các quy trình phân tích cũng như xử lý dữ liệu không gian địa lý. Code Editor giúp người dùng thực hiện toàn bộ các chức năng có trong Earth Engine. Trong bài tập này, chúng ta sẽ bắt đầu tìm hiểu về Code Editor và một số khái niệm cơ bản trong lập trình với JavaScript. Hiểu biết cơ bản về lập trình/coding và JavaScript là yêu cầu đầu tiên để sử dụng Earth Engine.
Làm việc với ảnh
Mở một script mới
1. Mở Code Editor trên Google Chrome, nếu bạn đã đóng sau phần thực hành trước:
https://code.earthengine.google.com/
2. Click vào biểu tượng đầu mũi tên cạnh nút Reset và chọn Clear script
Tạo biến hiển thị một ảnh Landsat 8
1. Sử dụng dòng lệnh dưới đây để tạo biến ee.Image đại diện cho một ảnh Landsat 8 – 2014
i. Copy và paste dòng code dưới đây Code Editor
// Get the image. var LC8_image = ee.Image('LANDSAT/LC8_L1T_TOA/LC81290502015036LGN00');
Ghi chú về cú pháp JavaScript: Có rất nhiều thứ được thực hiện chỉ trong hai dòng lệnh trên. Hãy đọc kỹ từng phần của lệnh mà chúng ta vừa copy vào GEE (chú ý, có thể vào phần Mục lục/Appendices để tìm hiểu thêm về cú pháp JavaScript cũng như các khái nhiệm cơ bản về lập trình.)
1) Hai dấu gạch chéo //, thường dùng cho các ghi chú trong JavaScript. Chúng giúp các đoạn ghi chú không bị nhầm thành lệnh chạy. Các ký hiệu này rất hữu ích khi bạn muốn viết ghi chú trong tập lệnh của mình.
2) Các biến được khai báo trong JavaScript sử dụng từ khóa var. Các biến có thể ở dạng số (numbers), chuỗi (string), đối tượng (objects), hoặc tập hợp đối tượng (object collection)… Các biến được dùng để chứa các thông tin sử dụng trong sript/tập lệnh. Trong dòng lệnh phía trên, bạn đang đặt tên biến là LC8_image và dùng nó để chỉ dữ liệu dạng raster mình muốn phân tích
3) ee.Image() là một hàm của GEE cho GEE biết bạn muốn tải ảnh như một đối tượng (và trong trường hợp này, là lưu trữ ảnh với biến có tên là ‘LC8_image’). Trong JavaScript, các hàm được bắt đầu bằng các chữ cái và có một cặp dấu ngoặc đơn ở cuối. Các hàm thường bao gồm đầu vào/input hay tham số/parameter, chúng giúp các hàm biết cần phải làm gì và được định rõ trong phần ngoặc đơn của hàm. Trong trường hợp này, các tham số/ parameter bạn đã định rõ trong phần ngoặc đơn là ID của ảnh.
Dạng đơn giản của dòng lệnh trên là ee.Image(‘image_id’). ‘image_id’ là ảnh mà bạn muốn tải về (‘LANDSAT/LC8_L1T_TOA/LC81290502015036LGN00’) và khai báo là biến (LC8_image)
4) Cú pháp để xác định ID ảnh trong hàm (ee.Image) đó là đặt toàn chuỗi ký tự (ID ảnh, ‘LANDSAT/LC8_L1T_TOA/LC81290502015036LGN00’) trong cặp dấu trính dẫn ‘’. ID ảnh phải đặt trong dấu trích dẫn bởi vì tập hợp và tên ảnh cùng ở dạng chuỗi/string. String là tập các ký tự trong ví dụ này, tên của một tập dữ liệu cụ thể.
a. ID của từng cảnh ảnh Landsat có thể được tìm ở glovis.usgs.gov. Bạn sẽ tìm hiểu thêm ở bài tập 3
5) Các câu lệnh JavaScript kết thúc bằng dấu chấm phẩy;
2. Run/Chạy code và quan sát kết quả
i. Click nút Run và chú ý rằng không có gì xảy ra trên cửa sổ xuất kết quả bản đồ hoặc trên cửa sổ console. Code này chỉ đơn thuần tạo biến và chưa có gì được in ra hoặc biểu diễn.
Đưa ảnh vào cửa sổ bản đồ trong Co
1. Copy và paste, hoặc gõ lại dòng code dưới đây vào script/tập lệnh của bạn. Những dòng lệnh này sẽ giúp đưa ảnh Landsat vào của sổ bản đồ. Thêm những dòng code này ngay dưới phần code của bước trước. GEE sẽ thực hiện lệnh theo thứ tự sau khi bạn click Run
//Add the image to the map. Map.addLayer(LC8_image);
2. Run/Chạy code và kiểm tra kết quả
i. Click vào nút Run. Bây giờ ảnh đã hiện lên Cửa sổ xuất kết quả bản đồ/Map Output window. Nếu bạn không phóng to đến Hoa Kỳ, trung tâm Utah, bạn sẽ không thấy gì cả
ii. Dùng con trỏ để di chuyển (click chuột trái và nhả chuột) đến Utah và tìm ảnh mà bạn đã gọi ra. Các script/tập lệnh cũng có thể giúp bạn thực hiện thao tác này, chúng ta sẽ thực hiện nó trong bước sau đây.
Di chuyển về trung tâm và phóng to thu nhỏ trong cửa sổ xuất kết quả bản đồ
Tiếp sau đây, bạn sẽ thêm vào các dòng lệnh để thực hiện thao tác phóng to thu nhỏ cũng như tìm đến phần trung tâm trong cửa sổ xuất kết quả bản đồ (map output window). Hàm Map.centerObject() sẽ cho GEE biết nên đặt cửa sổ xuất kết quả bản đồ ở vị trí nào
1. Copy và paste hai dòng code sau đây ngay phía dưới 4 dòng code bạn vừa thực hiện trên GEE code editor. Click Run/Chạy.
//center map on the tile Map.centerObject(LC8_image, 8);
2. Để thu nhỏ/zoom out, giảm tham số thứ hai xuống giá trị nhỏ hơn 8. Để phóng to/zoom in, tăng giá trị tham số đầu vào thứ hai (thử với 10). Thay đổi/ Modify dòng lệnh của bạn giống như hai dòng dưới đây và click Run. Bạn thấy gì?
3. Tại thanh công cụ phía trên bên trái, chuyển từ tab Scripts sang tab Docs. Gõ Map.centerObject() vào phần tìm kiếm/search bar của Docs. Khoảng giới hạn phóng to thu nhỏ là bao nhiêu?
//center map on the tile Map.centerObject(LC8_image, 10);
Tìm hiểu các công cụ trên của sổ xuất kết quả bản đồ
1. Tìm hiểu về ảnh này, LC8_image (‘LANDSAT/LC8_L1T_TOA/LC81290502015036LGN00’) với các công cụ map viewer của Code Editor
i. Bạn có thể phóng to thu nhỏ và sử dụng các công cụ phía trái trên cửa sổ xuất kết quả bản đồ (xem hình sau)
ii. Sử dụng công cụ Layers (ở phía phải cửa sổ xuất kết quả bản đồ) để mở hoặc đóng ảnh (Layer 1) (như hình dưới)
Ghi chú: Mặc dù bạn đã lưu ảnh LANDSAT/LC8_L1T_TOA/LC81290502015036LGN00 dưới biến có tên là LC8_image, tên của ảnh được ký hiệu là Layer_1 theo mặc định/default trong Layers Legend tại cửa sổ xuất kết quả bản đồ. Như bạn sẽ thấy trong các phần thực hành sau, chúng ta có thể thay đổi tên đối tượng hiện lên công cụ Layers để mô tả rõ hơn về dữ liệu đang được hiển thị
iii. Thay đổi độ trong suốt/transparency (sử dụng thanh trượt ở phía phải của tên layer). Công cụ này giúp ‘Layer 1’ trong hơn, có thể thấy rõ bản đồ nền phía dưới.
Tìm hiểu cửa sổ Inspector
1. Click vào Tab Inspector Tab ở góc trên bên trái trong giao diện Earth Engine Code Editor. Con trỏ sẽ chuyển sang hình vòng tròn tâm chữ thập khi dịch chuyển trên cửa sổ bản đồ.
2. Bây giờ click và bất cứ đâu trên bản đồ sử dụng Inspector, vòng tròn tâm chữ thập, để xác định giá trị của pixel cho mỗi band/kênh phổ ảnh tại một địa điểm cụ thể (tham khảo ví dụ dưới đây để đọc kết quả)
Thay đổi thông số để tang cường ảnh hiển thị
Bây giờ bạn có thể nhìn thấy ảnh, tuy nhiên thông số về màu vẫn chưa thực sự phù hợp. Sau đây, bạn sẽ thay đổi thông số hiển thị
1. Mở chỉ dẫn cho hàm addLayer trong nhóm Map bằng cách click vào tab Docs tại thanh công cụ bên trái của Code Editor.
i. Mở rộng/Expand nhóm Map và chọn Map.addLayer trong danh sách (như hình dưới), hoặc
ii. Tìm Map.addLayer trong Filter methods… tại phần tìm kiếm (search bar)
2. Đọc phần chỉ dẫn xuất hiện (hình trên). Chúng cung cấp thông tin về cách sử dụng và các đối số/agurment cho hàm này
i. Chú ý về lựa chọn tham số đầu vào (ví dụ như vis) được in nghiêng trong phần chỉ dẫn. Thế có nghĩa rằng đây là một thông số tùy chọn, có thể được xác định hoặc không trong hàm Map.addLayer. Nếu bạn muốn bỏ qua thông số tùy chọn, hãy điền “undefined” vào. Xem dòng lệnh phía dưới làm ví dụ.
Map.addLayer(LC8_image,undefined, 'Landsat8scene');
Ghi chú: Thứ chúng ta quan tâm nhất ở đây chính là Các Thông Số Hiển Thị Tùy Chọn/Feature Visualization Parameters (như vis.). Trong trường hợp này, phần chỉ dẫn không được chi tiết. Bạn có thể học thêm bằng cách mở phần chỉ dẫn của hàm ee.data.getMapId. Gợi ý, tìm chỉ dẫn của các hàm này bằng cách mở rộng nhóm ee.data. Bạn cũng có thể tìm thấy các mẫu script/tập lệnh để xem chúng làm việc ra sao.
Có rất nhiều lựa chọn để điều chỉnh hiện thỉ ảnh. Thông tin nằm trong ngoặc đơn của mỗi lựa chọn cho thấy cách định dạng thông tin – ví dụ, định dạng dữ liệu nào được yêu cầu (dạng số, chuỗi hay dãy)
Những tham số đầu vào thường được dùng để điều chỉnh cài đặt hiển thị như sau:
Các Band/Kênh phổ: cho phép người dùng lựa chọn các band/kênh phổ để hiển thị ảnh như đỏ, lục hay lam
Min và max: xác định biên độ của phổ màu. Biên độ này không phụ thuộc vào định dạng dữ liệu. Ví dụ như ảnh unsigned 16-bit có khoảng giá trị từ 0 đến 65,536. Lựa chọn này giúp bạn cài đặt hiển thị theo một khoảng thuộc biên độ này.
Palette/Bảng màu: xác định bảng màu dùng để hiển thị. Bạn sẽ được tìm hiểu kỹ hơn về lựa chọn này trong phần sau của hưỡng dẫn.
Cách thức đặt tên (trong Layers Legend): bạn có thể xác định tên hiển thị trên layers legend tại đây. Chúng ta đã đặt tên cho lớp ‘Landsat8scene’ trong dòng code sau
Cú pháp/Syntax: Phần lớn các thông số tùy chọn được nhập như những cặp giá trị khóa. Cú pháp/Syntax:
{vis_param1: number, number, number
vis_param2: ‘string, string, string’,
// or an array of strings like this:
vis_param2: [‘string’, ‘string’, ‘string’]}
1. Sửa đổi hàm Map.addLayer() để hiển thị ảnh tổ hợp màu giả và áp dụng biên độ màu/stretch để nâng cao hiển thị. Sửa đổi câu lệnh Map.addLayer() từ các bước trước theo như dòng code dưới đây. Dòng lệnh này bao gồm thông số tùy chọn về các band/kênh phổ dùng để hiển thị (band 6, 5 và 4), xác định cụ thể biên độ màu để tăng cường ảnh hiển thị và cuối cùng là đặt tên hiển thị cho ảnh.
2. Click Run và sử dụng các công cụ trên cửa sổ xuất kết quả bản đồ để tìm hiểu kết quả. Chú ý rằng tên ở cửa sổ Layers bây giờ sẽ là Landsat8scene
Map.addLayer(LC8_image,{bands:'B6,B5,B4',min: 0.05, max: 0.8,gamma: 1.6}, 'Landsat8scene');
Ghi chú: Trong dòng lệnh trên, tên của các band/kênh phổ được đưa vào sẵn cho bạn. Nếu bạn muốn tự tra cứu, bạn có thể dùng hàm print (hoặc Inspector) để xác định xem các band/kênh phổ được đặt tên là gì (ví dụ B6,B5, B4)
3. Bạn có xác định các band/kênh phổ theo dạng chuỗi hoặc dãy. Xem dòng lệnh dưới đây, dòng lệnh này sẽ thực hiện giống như câu lệnh trên. Bạn có thấy gì khác biệt trong cú pháp câu lệnh. Khá khó tìm ra phải không?
// Add the image to map as a false color composite. Map.addLayer(LC8_image,{bands:['B6', 'B5', 'B4'],min: 0.05, max: 0.8,gamma: 1.6}, 'Landsat8scene');
4. Copy và paste câu lệnh dưới đây vào code editor. Sau đó click Run.
print(LC8_image);
5. Bây giờ, trong tab Console, click vào biểu tượng đầu mũi tên cạnh Image LANDSAT/… để hiển thị thuộc tính ảnh. Sau đó click vào biểu tượng đầu mũi tên cạnh bands: để hiển thị thuộc tính band/kênh phổ. Bạn sẽ thấy band/kênh phổ đàu tiên (số 0) được gọi là “B1”, band thứ 2 (số 1) được gọi là B2 …Tham khảo hình dưới đây (chú ý: các giá trị hiển thị trong hình sẽ không tương tự như của bạn, vì hình này biểu diễn giá trị cho một cảnh ảnh ở Hoa Kỳ).
Chú ý: để hiểu rõ về kết hợp các band/kênh phổ để hiển thị ảnh Landsat 8, 5 hoặc 7 hãy đọc so sánh giữa các band Landsat tại đây: http://landsat.usgs.gov/L8_band_combos.php.
6. Click vào nút Save ở phía trên bên phải của Code Editor để lưu script/tập lệnh mẫu
i. Đặt tên script/tập lệnh là Visualize a Landsat 8 image
Chú ý: Có rất nhiều lựa chọn để hiển thị dữ liệu trong của sổ xuất kết quả bản đồ, ví dụ như lọc/mask hoặc ghép 2 dữ liệu với nhau. Để biết thêm về các lựa chọn này, thao khảo Hướng Dẫn của Google Earth Engine tại https://developers.google.com/earth-engine/image_visualization#styled-layer-descriptors