在引入矢量图层以后,gee用户往往会选择矢量图层中的某一小块来做研究,(比如引入中国分省的矢量图层,但是研究区只是涉及到安徽省)这就要用到筛选功能,将安徽省从中国矢量图层里面筛选出来。
当然比较简单的方法是从ArcGIS或者其他软件中,将安徽省单独筛选出来并且导出,再引入到Geemap里面,但是这样做比较耗费时间和人力。
一般用户的需求有两种:
①是从大区域中筛选一个小区域作为实验区;
②是从一个大区域中筛选多个小区域作为实验区
使用.filterMetadata(‘PYNAME’,‘equals’,‘Hengnan Xian’)命令:
指的是筛选元数据PYNAME等于Hengnan Xian的矢量区域。
当然也可以用其他属性信息筛选,只需要更换函数里面的字段名称
var HengYangShi= ee.FeatureCollection(HY);
var HengnanXian= HengYangShi.filterMetadata('PYNAME','equals','Hengnan Xian');
其中的HY是引入的衡阳市的矢量图层。
事先查询Hengnan Xian的点的位置,引入衡南县境内的一个点,
var Roi_HengnanXian = ee.Geometry.Point(114,30)
或者用Geemap里面的手绘方式绘制一个衡南县境内的点
然后用下面的命令(点包含在面里)从衡阳市中筛选衡南县的矢量区域。
//用point筛选HengYangShi
var HY = table.filterBounds(Roi_HengnanXian).geometry();
如果使用第一种方法会节省很多工作,除了以上两种方法以外,还有其他方法。
var HengYangShi = ee.FeatureCollection(table);
var Name_List = ee.List( ['Hengdong Xian','Hengyang Xian','Qidong Xian','Hengnan Xian'] );
var Inlist_Filter = ee.Filter.inList( 'PYNAME', Name_List);
var List_Features = HengYangShi.filter( Inlist_Filter );
Map.addLayer(List_Features)
通过建立的名称列表来筛选PYNAME字段中包含列表里面所有元素的矢量区域。
结果如图所示,
如下图所示,首先手绘一个多边形区域。
这时资源栏出现了手绘多边形的polygon
然后用.filterBounds()筛选大区域和手绘多边形相交的区域作为试验区
var HY = table.filterBounds(geometry).geometry();
Map.addLayer(HY)
当然还有其他的筛选方法,包括利用地理空间变量做布尔运算、数学运算、排序等操作,做筛选的方法。
filterMetadata(name, operator, value)
通过元数据筛选集合的快捷方式。
这个操作等同于.filter(ee.Filter.metadata(…)).
返回筛选后的集合。
参数:
this:collection (Collection):
The Collection instance.
name (String): 要筛选的属性的名称。
operator (String): 比较运算符的名称。
其他可能的值: “equals”, “less_than”, “greater_than”,“not_equals”, “not_less_than”, “not_greater_than”, “starts_with”,
“ends_with”, “not_starts_with”, “not_ends_with”, “contains”,
“not_contains”.
value (Object): 要比较的值。
Returns: Collection
ee.Filter.inList(leftField, rightValue, rightField, leftValue)
筛选事先构造好的列表中包含的元数据。
返回构造好的过滤器。
参数:
leftField (String, optional):
左操作数的选择器。如果指定了leftValue,则不应该指定。
rightValue (List|Object, optional):
The value of the right operand. Should not be specified if rightField is specified.
右操作数的值。如果指定rightField,不应该指定
rightField (String, optional):
用于正确操作数的选择器。如果指定了rightValue,不应该指定
leftValue (List|Object, optional):
左操作数的值。如果指定了leftField,则不应该指定。
Returns: Filter