GEE学习笔记 九十:在自己的APP中使用绘制矢量(下)

日期:

 这一篇文章讲一下如何使用ui.Map.DrawingTools(...),其实在上一节中可以看到DrawingTools这个API简单使用例子,具体如下:

  1. var geometry = ee.Geometry.Point([50, 50]);

  2.  
  3. Map.centerObject(geometry, 11);

  4.  
  5. var layer = ui.Map.GeometryLayer({

  6.  
  7.   geometries: [geometry],

  8.  
  9.   name: "p",

  10.  
  11.   color: "red",

  12.  
  13.   shown: true,

  14.  
  15.   locked: true

  16.  
  17. });

  18.  
  19. var drawingTools = Map.drawingTools();

  20.  
  21. drawingTools.setLinked(false);

  22.  
  23. drawingTools.layers().add(layer);

 

    这里通过Map.drawingTools()获取GEE自带的绘制工具,然后setLinked(false)设置加载的layer这个GeometryLayer不显示在import中,然后调用layers()中add()方法加载新的layer到绘制图层中。

1、drawingTools的API

 

这些方法主要包括:

(1)初始化方法

(2)设置各种属性set方法

(3)获取各种属性get方法

(4)回调监听方法

 

2、主要方法说明

(1)添加图层 

方法:addLayer(geometries, name, color, shown, locked)

  • geometries:矢量图形列表

  • name:图层名称

  • color:矢量图形颜色

  • shown:图层是否显示

  • locked:图层是否锁定

    添加图层方式,一种方式利用上面展示的额layers().add(layer)这种方式,另外一种方式可以直接将geometries添加到drawingTools中。

例子:

  1. var geometry = ee.Geometry.Point([50, 50]);

  2.  
  3. Map.centerObject(geometry, 11);

  4.  
  5. var layer = ui.Map.GeometryLayer({

  6.  
  7.   geometries: [geometry],

  8.  
  9.   name: "p",

  10.  
  11.   color: "red",

  12.  
  13.   shown: true,

  14.  
  15.   locked: true

  16.  
  17. });

  18.  
  19. var drawingTools = Map.drawingTools();

  20.  
  21. drawingTools.setLinked(false);

  22.  
  23. drawingTools.addLayer({

  24.  
  25.   geometries: [geometry],

  26.  
  27.   name: "p",

  28.  
  29.   color: "red",

  30.  
  31.   shown: true,

  32.  
  33.   locked: true

  34.  
  35. });

 

(2)启动编辑、绘制、删除等功能

  • edit

  • draw

  • clear

例子:

  1. //demo03

  2.  
  3. var geometry = ee.Geometry.Point([50, 50]);

  4.  
  5. Map.centerObject(geometry, 11);

  6.  
  7. var drawingTools = Map.drawingTools();

  8.  
  9. drawingTools.setLinked(false);

  10.  
  11. drawingTools.edit();

  12.  
  13. // drawingTools.draw();

  14.  
  15. // drawingTools.clear();

 

运行结果:

 

(3)获取DrawingTools的属性

  1. //demo04

  2.  
  3. var geometry = ee.Geometry.Point([50, 50]);

  4.  
  5. Map.centerObject(geometry, 11);

  6.  
  7. var drawingTools = Map.drawingTools();

  8.  
  9. drawingTools.setLinked(false);

  10.  
  11. print(drawingTools.get());

  12.  
  13. print(drawingTools.get("drawModes"));

  14.  
  15. print(drawingTools.getDrawModes());

  16.  
  17. print(drawingTools.getLinked());

 

(4)回调方法

  • onDraw:绘制矢量图形后回调方法

  • onEdit:编辑矢量图形后回调方法

  • onErase:删除矢量图形后回调方法

  1. //demo05

  2.  
  3. var srtm = ee.Image('USGS/SRTMGL1_003');

  4.  
  5. Map.addLayer(srtm, {min: 0, max: 5000}, 'SRTM');

  6.  
  7. var geometry = ee.Geometry.Point([110, 35]);

  8.  
  9. Map.centerObject(geometry, 4);

  10.  
  11. var drawingTools = Map.drawingTools();

  12.  
  13. drawingTools.setLinked(false);

  14.  
  15. drawingTools.setDrawModes(["point"]);

  16.  
  17. drawingTools.setShape("point");

  18.  
  19. var callFunc = ui.util.debounce(function(geom, geomLayer, drawingTools) {

  20.  
  21.   var points = geomLayer.toGeometry();

  22.  
  23.   var elevation = srtm.reduceRegion({

  24.  
  25.     reducer: ee.Reducer.mean(),

  26.  
  27.     geometry: points,

  28.  
  29.     scale: 30

  30.  
  31.   });

  32.  
  33.   print("----------begin--------------");

  34.  
  35.   print("points is: ", points);

  36.  
  37.   print("elevation is: ", elevation);

  38.  
  39.   print("----------end----------------");

  40.  
  41. }, 100);

  42.  
  43. drawingTools.onDraw(callFunc);

  44.  
  45. drawingTools.onEdit(callFunc);

  46.  
  47. drawingTools.onErase(callFunc);

 

代码分析:

    这段代码含义就是当用户使用矢量工具绘制、编辑或者删除点时候会调用callFunc这个方法,这个方法总共三个参数:绘制图形、对应的图层以及绘制的矢量工具。方法内容是统计这个图层中所有点的高程均值。

来源请引用:地理遥感生态网科学数据注册与出版系统。