在引入矢量图层以后,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();结果如下图所示
如果使用第一种方法会节省很多工作,除了以上两种方法以外,还有其他方法。
下图的table就是上图中导入的衡阳矢量图
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