Tìm kiếm

Biểu diễn sự thay đổi của lòng sông bằng ảnh động

Sông Hồng tại địa phận Thành phố Hà Nội (Việt Nam) có sự biến động dòng chảy mạnh mẽ (đoạn qua huyện Đan Phượng và Mê Linh) trong giai đoạn ...


Sông Hồng tại địa phận Thành phố Hà Nội (Việt Nam) có sự biến động dòng chảy mạnh mẽ (đoạn qua huyện Đan Phượng và Mê Linh) trong giai đoạn 1990-2000. Để theo dõi quá trình biến động này, ứng dụng Google Earth Engine truy xuất dữ liệu mặt nước hàng năm của JRC (Jean-Francois Pekel, Andrew Cottam, Noel Gorelick, Alan S. Belward, High-resolution mapping of global surface water and its long-term changes. Nature 540, 418-422 (2016). (doi:10.1038/nature20584) sẽ cho phép tạo ảnh động để diễn tả các biến đổi này.


Đoạn mã dưới đây được tham khảo từ mã nguồn của Justin Braaten sẽ minh họa cho ý tưởng trên.

 

var rect = 
    /* color: #00ffff */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[105.56669468195913, 21.20241967085154],
          [105.56669468195913, 21.03203770961315],
          [105.85371250422476, 21.03203770961315],
          [105.85371250422476, 21.20241967085154]]], null, false);
          
var col = ee.ImageCollection('JRC/GSW1_1/YearlyHistory').map(function(img) {
 var year = img.date().get('year');
 var yearImg = img.gte(2).multiply(year);
 var despeckle = yearImg.connectedPixelCount(15, true).eq(15);
 return yearImg.updateMask(despeckle).selfMask().set('year', year);
});

function appendReverse(col) {
 return col.merge(col.sort('year', false));
}

var bgColor = 'FFFFFF'; // Assign white to background pixels.
var riverColor = '0D0887'; // Assign blue to river pixels.
var annualCol = col.map(function(img) {
 return img.unmask(0)
 .visualize({min: 0, max: 1, palette: [bgColor, riverColor]})
 .set('year', img.get('year'));
});
var basicAnimation = appendReverse(annualCol);

var aoi = rect;
var videoArgs = {
 dimensions:
 600, // Max dimension (pixels), min dimension is proportionally scaled.
 region: aoi,
 framesPerSecond: 5
};

var bgImg = ee.Image(1).visualize({palette: bgColor});
var fadeFilter = ee.Image(1).visualize({palette: bgColor, opacity: 0.1});
var fadeFilterCol = col.map(function(img) {
 var imgVis = img.visualize({palette: riverColor});
 return imgVis.blend(fadeFilter).set('year', img.get('year'));
});
var yearSeq = ee.List.sequence(1984, 2018);
var fadeCol = ee.ImageCollection.fromImages(yearSeq.map(function(year) {
 var fadeComp =
 fadeFilterCol.filter(ee.Filter.lte('year', year)).sort('year').mosaic();
 var thisYearImg = col.filter(ee.Filter.eq('year', year)).first().visualize({
 palette: riverColor
 });
 return bgImg.blend(fadeComp).blend(thisYearImg).set('year', year);
}));


print(ui.Thumbnail(appendReverse(fadeCol), videoArgs));

Map.addLayer(rect,{},"Observed region");


Source code:


Xem thêm

0 Comments