GEE学习笔记 九十:在自己的APP中使用绘制矢量(下)
这一篇文章讲一下如何使用ui.Map.DrawingTools(...),其实在上一节中可以看到DrawingTools这个API简单使用例子,具体如下:
-
var geometry = ee.Geometry.Point([50, 50]);
-
Map.centerObject(geometry, 11);
-
var layer = ui.Map.GeometryLayer({
-
geometries: [geometry],
-
name: "p",
-
color: "red",
-
shown: true,
-
locked: true
-
});
-
var drawingTools = Map.drawingTools();
-
drawingTools.setLinked(false);
-
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中。
例子:
-
var geometry = ee.Geometry.Point([50, 50]);
-
Map.centerObject(geometry, 11);
-
var layer = ui.Map.GeometryLayer({
-
geometries: [geometry],
-
name: "p",
-
color: "red",
-
shown: true,
-
locked: true
-
});
-
var drawingTools = Map.drawingTools();
-
drawingTools.setLinked(false);
-
drawingTools.addLayer({
-
geometries: [geometry],
-
name: "p",
-
color: "red",
-
shown: true,
-
locked: true
-
});
(2)启动编辑、绘制、删除等功能
-
edit
-
draw
-
clear
例子:
-
//demo03
-
var geometry = ee.Geometry.Point([50, 50]);
-
Map.centerObject(geometry, 11);
-
var drawingTools = Map.drawingTools();
-
drawingTools.setLinked(false);
-
drawingTools.edit();
-
// drawingTools.draw();
-
// drawingTools.clear();
运行结果:

(3)获取DrawingTools的属性
-
//demo04
-
var geometry = ee.Geometry.Point([50, 50]);
-
Map.centerObject(geometry, 11);
-
var drawingTools = Map.drawingTools();
-
drawingTools.setLinked(false);
-
print(drawingTools.get());
-
print(drawingTools.get("drawModes"));
-
print(drawingTools.getDrawModes());
-
print(drawingTools.getLinked());
(4)回调方法
-
onDraw:绘制矢量图形后回调方法
-
onEdit:编辑矢量图形后回调方法
-
onErase:删除矢量图形后回调方法
-
//demo05
-
var srtm = ee.Image('USGS/SRTMGL1_003');
-
Map.addLayer(srtm, {min: 0, max: 5000}, 'SRTM');
-
var geometry = ee.Geometry.Point([110, 35]);
-
Map.centerObject(geometry, 4);
-
var drawingTools = Map.drawingTools();
-
drawingTools.setLinked(false);
-
drawingTools.setDrawModes(["point"]);
-
drawingTools.setShape("point");
-
var callFunc = ui.util.debounce(function(geom, geomLayer, drawingTools) {
-
var points = geomLayer.toGeometry();
-
var elevation = srtm.reduceRegion({
-
reducer: ee.Reducer.mean(),
-
geometry: points,
-
scale: 30
-
});
-
print("----------begin--------------");
-
print("points is: ", points);
-
print("elevation is: ", elevation);
-
print("----------end----------------");
-
}, 100);
-
drawingTools.onDraw(callFunc);
-
drawingTools.onEdit(callFunc);
-
drawingTools.onErase(callFunc);
代码分析:
这段代码含义就是当用户使用矢量工具绘制、编辑或者删除点时候会调用callFunc这个方法,这个方法总共三个参数:绘制图形、对应的图层以及绘制的矢量工具。方法内容是统计这个图层中所有点的高程均值。
来源请引用:地理遥感生态网科学数据注册与出版系统。