GEE:筛选想要的行政区的边界(根据属性数据和手绘点/多边形的方法)

在引入矢量图层以后筛选指定属性信息的数据

在引入矢量图层以后,gee用户往往会选择矢量图层中的某一小块来做研究,(比如引入中国分省的矢量图层,但是研究区只是涉及到安徽省)这就要用到筛选功能,将安徽省从中国矢量图层里面筛选出来。
当然比较简单的方法是从ArcGIS或者其他软件中,将安徽省单独筛选出来并且导出,再引入到Geemap里面,但是这样做比较耗费时间和人力。
一般用户的需求有两种:
①是从大区域中筛选一个小区域作为实验区;
②是从一个大区域中筛选多个小区域作为实验区

衡阳市的属性表信息:

(这里以从湖南省衡阳市中筛选衡南县为例子)
在这里插入图片描述

一、从大区域中筛选一个小区域作为实验区

1、第一种方法:

使用.filterMetadata(‘PYNAME’,‘equals’,‘Hengnan Xian’)命令:
指的是筛选元数据PYNAME等于Hengnan Xian的矢量区域。
当然也可以用其他属性信息筛选,只需要更换函数里面的字段名称

var HengYangShi= ee.FeatureCollection(HY);
var HengnanXian= HengYangShi.filterMetadata('PYNAME','equals','Hengnan Xian');

其中的HY是引入的衡阳市的矢量图层。

2、第二种方法:

事先查询Hengnan Xian的点的位置,引入衡南县境内的一个点,

var Roi_HengnanXian = ee.Geometry.Point(114,30)

或者用Geemap里面的手绘方式绘制一个衡南县境内的点
在这里插入图片描述
在这里插入图片描述
然后用下面的命令(点包含在面里)从衡阳市中筛选衡南县的矢量区域。

//用point筛选HengYangShi
var HY = table.filterBounds(Roi_HengnanXian).geometry();

结果如下图所示
在这里插入图片描述

3、其他方法

如果使用第一种方法会节省很多工作,除了以上两种方法以外,还有其他方法。

二、从一个大区域中筛选多个小区域作为实验区

1、使用属性信息筛选多个区域

在这里插入图片描述
下图的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字段中包含列表里面所有元素的矢量区域。
结果如图所示,
在这里插入图片描述

2、手绘一个多边形区域

如下图所示,首先手绘一个多边形区域。
在这里插入图片描述
这时资源栏出现了手绘多边形的polygon
在这里插入图片描述
然后用.filterBounds()筛选大区域和手绘多边形相交的区域作为试验区

var HY = table.filterBounds(geometry).geometry();
Map.addLayer(HY)

在这里插入图片描述

3、其他方法

当然还有其他的筛选方法,包括利用地理空间变量做布尔运算、数学运算、排序等操作,做筛选的方法。


.filterMetadata()用法说明

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


.inList()用法说明

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

猜你喜欢

转载自blog.csdn.net/qq_35591253/article/details/108960130