Display land cover with legend

Globcover with legend and percentage of each class.

Use the code below or click this link.


// select the landcover band
var cover = globcover.select("landcover");

// add fusion table
var ft = ee.FeatureCollection("ft:1_posMR8h1zxkeyH6hYgWWq2mUNV4FtvqjPPJzhSZ");

// select polygon based on BASIN_ID
var myBasin = ft.filter(ee.Filter.eq("BASIN_ID",57719));

var frequency  =cover.reduceRegion({
  reducer:ee.Reducer.frequencyHistogram(),
  geometry:myBasin.geometry(),
  scale:1000
});

var dict = ee.Dictionary(frequency.get('landcover'));
var sum = ee.Array(dict.values()).reduce(ee.Reducer.sum(),[0]).get([0]);
var new_dict = dict.map(function(k,v) {
  return ee.Number(v).divide(sum).multiply(100).round();
});

// get
var d = new_dict.map(function(k, v) {
  var names = ee.List(cover.get('landcover_class_names'))
  var values = ee.List(cover.get('landcover_class_values'))
  return names.get(values.indexOf(ee.Number.parse(k))), v;
})

// get color
var c = new_dict.map(function(k, v) {
  var names = ee.List(cover.get('landcover_class_palette'))
  var values = ee.List(cover.get('landcover_class_values'))
  return ee.String(names.get(values.indexOf(ee.Number.parse(k))));
})

var namez = new_dict.map(function(k, v) {
  var names = ee.List(globcover.get('landcover_class_names'))
  var values = ee.List(globcover.get('landcover_class_values'))
  return [names.get(values.indexOf(ee.Number.parse(k)))];
}).values().flatten()

/************************ legend ****************************/

// set position of panel
var legend = ui.Panel({
  style: {
    position: 'bottom-left',
    padding: '8px 15px'
  }
});

// Create legend title
var legendTitle = ui.Label({
  value: 'Land Cover',
  style: {
    fontWeight: 'bold',
    fontSize: '18px',
    margin: '0 0 4px 0',
    padding: '0'
    }
});

// Add the title to the panel
legend.add(legendTitle);

// Creates and styles 1 row of the legend.
var makeRow = function(color, name) {

      // Create the label that is actually the colored box.
      var colorBox = ui.Label({
        style: {
          backgroundColor: '#' + color,
          // Use padding to give the box height and width.
          padding: '8px',
          margin: '0 0 4px 0'
        }
      });

      // Create the label filled with the description text.
      var description = ui.Label({
        value: name,
        style: {margin: '0 0 4px 6px'}
      });

      // return the panel
      return ui.Panel({
        widgets: [colorBox, description],
        layout: ui.Panel.Layout.Flow('horizontal')
      });
};

//  Palette with the colors
var palette = ee.List(c.values());

// name of the legend
var names = ee.List(d.values());

// Add color and and names
for (var i = 0; i < 18; i++) {
   var myPercentage = ee.Number(names.get(i).getInfo());
   var myName = ee.String(namez.get(i).getInfo());
   var txt = myName.cat(" (").cat(myPercentage.toInt()).cat("%)");
   legend.add(makeRow(palette.get(i).getInfo(),txt.getInfo() ));
  }  

Map.addLayer(cover.clip(myBasin));

// add legend to map (alternatively you can also print the legend to the console)
Map.add(legend);

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s