Xây dựng bản đồ sử dụng đất sử dụng mẫu thời gian
Landuse map from temporal signature
Một ví dụ bản đồ hiện trạng sử dụng đất từ ảnh lưu trữ Landsat
- Nhập Import tập hợp ảnh Landsat 5, 7 và 8 ImageCollections.
2. Xác định khoảng thời gian cần quan tâm.
// Định nghĩa khoảng thời gianvar startyear = 2006;var endyear = 2016; // Đặt lịch theo định dạng ngày tháng:var startdate = ee.Date.fromYMD(startyear,1,1);var enddate = ee.Date.fromYMD(endyear,12,31) | |
3. Import một fusion table (file vector) của khu vực nghiên cứu mà bạn quan tâm.
// Lưu vực song Cảvar Ca = ee.FeatureCollection('ft:1ILFPzWUf4dL_tKNY0Rd3EhGtRQoLfzmk_00i9xC3'); |
4. Lựa chọn ImageCollections dựa trên thời gian và khu vực quan tâm.
// Lọc ảnh theo thòi gian chụp và vùng baovar l5images = l5.filterDate(startdate,enddate).filterBounds( Ca);var l7images = l7.filterDate(startdate,enddate).filterBounds( Ca);var l8images = l8.filterDate(startdate,enddate).filterBounds( Ca); |
5. Bao gồm cả hàm để loại bỏ mây
// Xác định ngưỡng mâyvar cloud_thresh = 40; // Hàmvar cloudfunction = function(image){ //use add the cloud likelihood band to the image var CloudScore = ee.Algorithms.Landsat.simpleCloudScore(image); //isolate the cloud likelihood band var quality = CloudScore.select('cloud'); //get pixels above the threshold var cloud01 = quality.gt(cloud_thresh); //create a mask from high likelihood pixels var cloudmask = image.mask().and(cloud01.not()); //mask those pixels from the image return image.updateMask(cloudmask);}; |
6. Chạy hàm loại bỏ mây cho tất cả các ảnh trong tập hợp ảnh được lựa chọn
// mask all clouds in the image collectionl5images = l5images.map(cloudfunction);l7images = l7images.map(cloudfunction);l8images = l8images.map(cloudfunction); |
7. Chọn band Red và NIR (cận hồng ngoại).
// Select the red and NIR bandsl5images = l5images.select(["B4","B3"]);l7images = l7images.select(["B4","B3"]);l8images = l8images.select(["B5","B4"]); |
8. Tính NDVI cho tất cả các ảnh.
// calculate ndvi from landsat 8function l8ndvi(img) { var ndvi = img.normalizedDifference(['B5', 'B4']).rename('NDVI'); return img.addBands(ndvi);} // calculate ndvi from landsat 5 & 7function l57ndvi(img) { var ndvi = img.normalizedDifference(['B4', 'B3']).rename('NDVI'); return img.addBands(ndvi);} // calculate ndwi for each image in imagecollectionvar l5ndvi = l5images.map(l57ndvi);var l7ndvi = l7images.map(l57ndvi);var l8ndvi = l8images.map(l8ndvi); |
9. Gộp tất cả các ảnh vào một bộ sưu tập ảnh.
// combine all data in single image collectionvar allcollection = ee.ImageCollection((l5ndvi.merge(l7ndvi)).merge(l8ndvi)); |
10. Tính trung bình (Mean) NDVI cho từng tháng.
// create list for yearsvar months = ee.List.sequence(1,12); // calculate the ndvi for each monthvar monthlyNDVI = ee.ImageCollection.fromImages( months.map(function(m){ var w = allcollection.select("NDVI").filter(ee.Filter.calendarRange(m, m, 'month')) .mean(); return w.set('year', 2000) .set('month', m) .set('date', ee.Date.fromYMD(2000,m,1)) .set('system:time_start',ee.Date.fromYMD(2000,m,1)) }).flatten()); |
11. Hiển thị ảnh Mean NDVI của tập hợp ảnh đã chọn
// the vizualization settingsvar ndvi_viz = {min:0.0, max:0.70, palette:"ffe60a,dfffd1,277005"}; // add map to canvasMap.addLayer(monthlyNDVI.select("NDVI").mean().clip(Ca),ndvi_viz ,"ndvi") |
Bây giờ chúng ta sẽ vẽ các mẫu thời gian (temporal signature)
12. Dùng công cụ vẽ Select the polygon drawing tool.
13. Vẽ một vùng mẫu cho các lớp sử dụng đất cần quan tâm
14. Đặt tên cho vùng mẫu. Lựa chọn tập hợp đối tượng có cùng đặc điểm và đặt cho nó cùng 1 giá trị = 0
.
15. Lặp lại công việc này đối với các lớp khác bằng cách tạo ra new layer. Đảm bảo rằng các lớp khác nhau có giá trị khác nhau
16. Gộp các lớp khác nhau thành 1 tập hợp mẫu
// merge into one feature collectionvarmergedtable = rice //0.merge(urban) //1.merge(water) //2.merge(richforest) //3.merge(annualcrops) //4.merge(secondaryforest) //5 |
17. Hiển thị mẫu thời gian dưới dạng đồ thị
17 | // Predefine the chart titles.var title = { title: 'landuseclass', hAxis: {title: 'Time'}, vAxis: {title: 'ndvi'},}; // create chartvar chart = ui.Chart.image.seriesByRegion(monthlyNDVI, mergedtable, ee.Reducer.mean(), 'NDVI', 30, 'system:time_start', 'class').setOptions(title); print(chart); |
Bây giờ chúng ta cần đưa thêm vào 12 ảnh (ảnh của mỗi tháng) coi như là một band ảnh của một tập hợp ảnh mới. việc này có thể thực hiện nhờ đoạn code dưới đây.
18. Copy và paste đoạn code này vào Code Editor
// Create a list with monthsvarmonthnames = ["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"] // make a list of from the imagecollectionvarmyNDVIlist = monthlyNDVI.select("NDVI").toList(12); // create a new image from the month JanuaryvarmyCollection = ee.Image(myNDVIlist.get(0)).rename("jan"); // add the image of each month as band to the imagefor (vari = 1; i<myNDVIlist.length().getInfo(); i++) { varmymap = ee.Image(myNDVIlist.get(i)).rename(monthnames[i]); myCollection = myCollection.addBands(mymap);} |
19. Sử dụng đoạn code dưới đây để phân loại ảnh.
// set training image collection
varTrainingImage = myCollection;
// define training features
vartrainingFeatures = mergedtable;
// define predicion bands
varpredictionBands = myCollection.bandNames();
// set training classifier
var classifierTraining = TrainingImage.select(predictionBands).sampleRegions({collection: trainingFeatures, properties: ['class'], scale: 30 });
// set classifier
var classifier = ee.Classifier.svm()
.train({features:classifierTraining, classProperty:'class', inputProperties: predictionBands});
// classify
var classified = TrainingImage.select(predictionBands).classify(classifier);
// add the result to the Map
Map.addLayer(classified.clip(Ca), {min: 0, max: 5,
palette: ['f0ff00','616343','2f00ff','125610','a93e9f','b8fbc0']},'landuse classification'
]]>