GEE第三讲空间数据类型-Geometry, Feature,Feature collection

GEE第三讲空间数据类型-Geometry, Feature,Feature collection

一、Geometry(形状包括点线面)

1.1 创建点文件ee.Geometry.Point()

var Forbidden_City = ee.Geometry.Point(116.3968,39.9186)//创建点文件(经纬度)
Map.centerObject(Forbidden_City)//位置居中
print(Forbidden_City)//对console有显示,不影响试图视图
Map.addLayer(Forbidden_City)//显示点文件图层,在Layer中中勾可不显示

1.2 创建多点文件ee.Geometry.MultiPoint()

var Forbidden_City = ee.Geometry.MultiPoint(
  [[116.3921,39.9224],
  [116.4014,39.9227],
  [116.4017,39.9138],
  [116.3929,39.9135]])
Map.centerObject(Forbidden_City)
print(Forbidden_City)
Map.addLayer(Forbidden_City)

在这里插入图片描述

2.1 创建连续线文件ee.Geometry.LineString()

var Forbidden_City = ee.Geometry.LineString(
[[116.39234040929296,39.91321497621612],
[116.39195417119481,39.92276018488313],
[116.40186761571385,39.9230234821268],
[116.40216802312352,39.91354414349019],
[116.39234040929296,39.91321497621612]
]);
//首末点若相同则闭合
Map.centerObject(Forbidden_City)
print(Forbidden_City)
Map.addLayer(Forbidden_City)

在这里插入图片描述

2.2 创建多条线ee.Geometry.MultiLineString()

var Forbidden_City = ee.Geometry.MultiLineString(
  [[[116.39367078496434,39.92134494485143],
[116.39899228764989,39.92173989850053]],
[[116.39401410771825,39.91953471147776],
[116.39693235112645,39.92085124958646]],
[[116.39628862096288,39.91920557299557],
[116.39873479558446,39.91752694212849]]]);
//一条线一个向量
Map.centerObject(Forbidden_City)
print(Forbidden_City)
Map.addLayer(Forbidden_City)

3.多边形ee.Geometry.Polygon()

var Forbidden_City =ee.Geometry.Polygon([
[[116.39179060756112,39.922576684295926],
[116.39230559169198,39.913064366936894],
[116.40213320552255,39.91352520169099],
[116.40161822139169,39.92297163084022]],
[[116.39483759700204,39.91961451259886],
[116.39496634303475,39.91648763678902],
[116.39900038539315,39.916553467224674],
[116.39874289332772,39.91977908105491]]]);
//两个多边形嵌套镂空
Map.centerObject(Forbidden_City)
print(Forbidden_City)
Map.addLayer(Forbidden_City)

3.2 多个多边形ee.Geometry.MultiPolygon()

var Forbidden_City = ee.Geometry.MultiPolygon(
[[[116.39393637477303,39.921260179361866],
[116.39350722133065,39.91882457850439],
[116.39676878749276,39.918791664386056],
[116.39711211024667,39.920963962263336]],
[[116.39887163936044,39.91810046424626],
[116.39595339595223,39.91698136351405],
[116.40080282985116,39.91652055201477]]]);
//注意首位相连和中括号
Map.centerObject(Forbidden_City)
print(Forbidden_City)
Map.addLayer(Forbidden_City)

在这里插入图片描述

4.坐标系ee.Geometry()

//坐标系编码  https://epsg.io
var China_Geo = ee.Geometry.Rectangle(60,20,130,50)//默认经纬度地理坐标系(度)
var China_Planar = ee.Geometry(China_Geo, null, false)//改为FALSE则显示为投影坐度标系(米),仅是显示
var China_Planar_2 = China_Geo.transform('EPSG:4326', ee.ErrorMargin(100)) //转换为WGS84 是地理坐标系统
Map.addLayer(China_Geo,{color: 'FF0000'}, 'geodesic polygon') //呈红色上曲矩形
Map.addLayer(China_Planar,{color: '000000'}, 'planar polygon')//呈黑色矩形
Map.addLayer(China_Planar_2,{color : '0000CD'},'planar polygon2')呈蓝色上曲矩形与China_Geo重合

在这里插入图片描述

2.2.中心点 geomerty…centroid()()

var China_Geo = ee.Geometry.Rectangle(65.9,19.8,134.5,50.9)
var China_Certer = China_Geo.centroid()
Map.addLayer(China_Geo,{color: 'FF0000'},'geodesic polygon')
Map.addLayer(China_Certer)

在这里插入图片描述

2.3 简化 geometry.simplify()

var zhengzhou = ee.FeatureCollection("users/wangni23180302/zhengzhou").geometry()
var zhengzhou_sim = zhengzhou.simplify(50000) 
//50000m是误差,误差越大简化越大

Map.centerObject(zhengzhou)
Map.addLayer(zhengzhou)
Map.addLayer(zhengzhou_sim)

在这里插入图片描述

2.4 边界geometry.bounds()

var zhengzhou = ee.FeatureCollection("users/wangni23180302/zhengzhou").geometry()
var zhengzhou_bound = zhengzhou.bounds()//边界是矩形上下边界
var zhengzhou_hall = zhengzhou.convexHull()//convexHull是一个凸边形

Map.centerObject(zhengzhou)
Map.addLayer(zhengzhou)
Map.addLayer(zhengzhou_bound)
Map.addLayer(zhengzhou_hall)

在这里插入图片描述

2.5 缓冲区 geometry.buffer()

var zhengzhou = ee.FeatureCollection("users/wangni23180302/zhengzhou").geometry()
var zhengzhou_buffer = zhengzhou.buffer(10000)

Map.centerObject(zhengzhou)
Map.addLayer(zhengzhou)
Map.addLayer(zhengzhou_buffer)

在这里插入图片描述

2.6合并 geometry.union()

//intersection交集
var Polygon_1 = ee.Geometry.Polygon(
[[[152.71032334056088,18.862610207551867],
[-170.72717665943918,19.69222816299581],
[-171.07873915943918,40.62061002589569],
[153.41344834056088,40.08478212000696]]]),
Polygon_2 = ee.Geometry.Polygon(
[[[-176.52795790943912,45.620172046005735],
[-176.70373915943912,32.2945468815855],
[-142.60217665943918,32.2945468815855],
[-141.02014540943918,45.49709377875777]]]);
var Polygon_union = Polygon_1.union(Polygon_2);
Map.centerObject(Polygon_1)
Map.addLayer(Polygon_1)
Map.addLayer(Polygon_2)
Map.addLayer(Polygon_union)

3.查询

3.1 查询分解面 geometry.geometries()

var Forbidden_City = ee.Geometry.MultiPolygon(
[[[[116.39393637477303,39.921260179361866],
[116.39350722133065,39.91882457850439],
[116.39676878749276,39.918791664386056],
[116.39711211024667,39.920963962263336]]],
[[[116.39887163936044,39.91810046424626],
[116.39595339595223,39.91698136351405],
[116.40080282985116,39.91652055201477]]]])
var Geometry_List = Forbidden_City.geometries()
//console会出现list包含2个polygon文件信息
Map.centerObject(Forbidden_City)
Map.addLayer(Forbidden_City)
print(Forbidden_City)
print(Geometry_List)

3.2 面积和周长 geometry.area()、geometry.perimeter()

//中空多边形
var Polygon_1 =ee.Geometry.Polygon([
[[116.39179060756112,39.922576684295926],
[116.39230559169198,39.91352520169099],
[116.40213320552255,39.91352520169099],
[116.40161822139169,39.92297163084022]],
[[116.39483759700204,39.91961451259886],
[116.39496634303475,39.91648763678902],
[116.39900038539315,39.916553467224674],
[116.39874289332772,39.91977908105491]]])
//实心多边形
var Polygon_2 =ee.Geometry.Polygon(
[[[116.39239142238046,39.913146659084674],
[116.40209029017831,39.91354166001771],
[116.40170405208016,39.922988086896794],
[116.39183352290536,39.922593140447425]]]);
var Area_1 = Polygon_1.area()
var Area_2 = Polygon_2.area()
var Perimeter_1 = Polygon_1.perimeter()
var Perimeter_2 = Polygon_2.perimeter()
print(Area_1,Area_2,Perimeter_1,Perimeter_2)
Map.centerObject(Polygon_1)
Map.addLayer(Polygon_1)
Map.addLayer(Polygon_2)

3.3 测距 geometry_1.distance(geometry_2)

//两个多边形最近的距离
var geometry_1 = ee.Geometry.Polygon(
[[[116.39419386683858,39.92130954875369],
[116.39359305201924,39.918873949652266],
[116.3966829568044,39.918709379020974],
[116.39719794093526,39.92101333186874]]]),
geometry_2 = ee.Geometry.Polygon(
[[[116.39891455470479,39.918116921473526],
[116.3957817345754,39.917063650955505],
[116.40123198329366,39.91647117917021]]])
var Distance = geometry_1.distance(geometry_2)
print(Distance)
Map.centerObject(geometry_1)
Map.addLayer(geometry_1)
Map.addLayer(geometry_2)

3.4. 转换 geometry.toGeoJSON()

//因为GEE对于shp的导出可能存在乱码问题,所以通常转为JSON格式导出
var geometry = ee.Geometry.Polygon(
[[[116.39419386683858,39.92130954875369],
[116.39359305201924,39.918873949652266],
[116.3966829568044,39.918709379020974],
[116.39719794093526,39.92101333186874]]])
var geometry_GeoJSON = geometry.toGeoJSON()
print(geometry)
print(geometry_GeoJSON)
Map.centerObject(geometry)
Map.addLayer(geometry)

二、Feature

1.1创建 ee.Feature(geometry,{关键字:内容})

//比geometry包含更多的信息,是有属性信息的geometry
var Forbidden_City =ee.Geometry.Polygon(
[[[116.39239142238046,39.913146659084674],
[116.40209029017831,39.91354166001771],
[116.40170405208016,39.922988086896794],
[116.39183352290536,39.922593140447425]]])
//先geometry创建多边形,再为多边形赋予属性
var Feature_Forbidden_City = ee.Feature(Forbidden_City,{name:'故宫', location:'北京'})
Map.centerObject(Forbidden_City)//以此为中心
print(Feature_Forbidden_City)
print(Forbidden_City)
//对比geometry(polygon)和feature的console信息区别,feature有属性信息
Map.addLayer(Forbidden_City)
Map.addLayer(Feature_Forbidden_City)
//将二者都添加新图层,发现2个图层没有差别,只是差别在属性信息有无

在这里插入图片描述

1.2 选择 Feature.select()

var Forbidden_City =ee.Geometry.Polygon(
[[[116.39239142238046,39.913146659084674],
[116.40209029017831,39.91354166001771],
[116.40170405208016,39.922988086896794],
[116.39183352290536,39.922593140447425]]]);
var Feature_Fobidden_City = ee.Feature(Forbidden_City, {name:'故宫', location:'北京'})
var Feature_select_1 = Feature_Fobidden_City.select(['name'])//选择关键字及其内容
var Feature_select_2 = Feature_Fobidden_City.select(['name'],['名称']) //选择关键字并修改
Map.centerObject(Forbidden_City)
print(Feature_Fobidden_City, Feature_select_1,Feature_select_2)//对比三者的属性信息
Map.addLayer(Feature_Fobidden_City)

1.3 坐标转换Feature.transform()

var China_Geo = ee.Feature(ee.Geometry.Rectangle(65.9,19.8,134.5,50.9))//地理坐标系
var China_Plnar = China_Geo.transform('EPSG:3857',ee.ErrorMargin(100))//投影坐标系
print(ee.Geometry(China_Geo.geometry()).projection(),
ee.Geometry(China_Plnar.geometry()).projection())
//导出二者的地理投影信息,crs是4326:3857
//或只查看
var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
print(ee.Geometry(china.geometry()).projection())
//Projection:
//type: Projection
//crs: EPSG:4326
//transform: [1,0,0,0,1,0]

1.4 Feature.set/setMulti

var Forbidden_City =ee.Geometry.Polygon(
[[[116.39239142238046,39.913146659084674],
[116.40209029017831,39.91354166001771],
[116.40170405208016,39.922988086896794],
[116.39183352290536,39.922593140447425]]]);
var Feature_Fobidden_City = ee.Feature(Forbidden_City, {name:'故宫', location:'北京'})
var Feature_Set1 = Feature_Fobidden_City.set('name','Gugong', 'location', "Beijing",'Time',"清朝")
//可通过关键字修改内容,若关键字不同则生成新的属性
var Feature_Set2 = Feature_Fobidden_City.setMulti({'name':'Gugong', 'location': "Beijing",'Time':"清朝"})
//.setMulti不同是字典形式{;},二者结果相同
print(Feature_Fobidden_City,Feature_Set1,Feature_Set2)
Map.centerObject(Forbidden_City)
Map.addLayer(Feature_Fobidden_City)

//properties: Object (3 properties)
//Time: 清朝
//location: Beijing
//name: Gugong

2.几何

feature.centroid()/simplify(n)/bounds()/convexHull()/buffer(n)/union()/intersection()/difference(feature2)

3.提取

3.1 剥离属性信息 Feature.geometry()

//var zhengzhou = ee.Feature(ee.FeatureCollection("users/szliu1120/hubei").first())
var Forbidden_City =ee.Geometry.Polygon(
[[[116.39239142238046,39.913146659084674],
[116.40209029017831,39.91354166001771],
[116.40170405208016,39.922988086896794],
[116.39183352290536,39.922593140447425]]])
var Feature_Forbidden_City = ee.Feature(Forbidden_City,{name:'故宫', location:'北京'})
Map.centerObject(Forbidden_City)
var geometry = Feature_Forbidden_City.geometry()//剥离属性信息主要空间信息
var geometry_get = Feature_Forbidden_City.get('name')//获得feature的变量name的内容
print(geometry,geometry_get)

//Polygon, 5 vertices
//故宫

3.2侧面积和周长 Feature.Area() &Feature.Perimeter()

var area = Feature_Forbidden_City.area()
var perimeter = Feature_Forbidden_City.perimeter()

三、FeatureCollection

1.创建

1.1GEE自带,搜索table→导入

1.2 shp文件压缩上传

1.3 手绘

1.4 代码创建

var Poly = ee.Geometry.Polygon(
[[[116.39248531478768,39.91319513792091],
[116.40222709792977,39.91378763804685],
[116.40184085983162,39.92303655876662],
[116.39171283859139,39.922674524864675]]])
var Points = ee.Geometry.MultiPoint(
[[116.38823669570809,39.92079850034943],
[116.38677757400399,39.91885659627606],
[116.38669174331551,39.916881722097074],
[116.38767879623299,39.91421555161684]])
var Lines = ee.Geometry.LineString(
[[116.37733619827156,39.9167171466781],
[116.38192814010506,39.91754001981801],
[116.37712162155037,39.91365597179514],
[116.38424556869393,39.914478881715695]])
var Feature_Collection = ee.FeatureCollection( [Poly, Points, Lines] );//将创建的[点线面文件]收藏到要素集
Map.centerObject(Feature_Collection)
print (Feature_Collection)
Map.addLayer (Feature_Collection)

1.5 创建随机点

//随机点可用于验证
var Poly = ee.Geometry.Polygon(
[[[116.39248531478768,39.91319513792091],
[116.40222709792977,39.91378763804685],
[116.40184085983162,39.92303655876662],
[116.39171283859139,39.922674524864675]]])//随机20个点点范围
var Random_Points = ee.FeatureCollection.randomPoints(Poly,20)

Map.centerObject(Poly)
Map.addLayer(Poly)
Map.addLayer(Random_Points)

2.筛选

2.1 被筛选文件.filterMetadata(要求)

var Proction_Area = ee.FeatureCollection("WCMC/WDPA/current/polygons")//GEE 自带保护区数据
var Proction_Area_China = Proction_Area.filterMetadata('ISO3','equals','CHN')//删选出列号=中国
Map.centerObject(Proction_Area_China)
Map.addLayer(Proction_Area_China,{color:'FF0000'})

2.2 排序删选 文件.limit(要求)

var china= ee.FeatureCollection("users/China_Provinces");
Map.addLayer(china)
Map.addLayer(china.limit(5,'Shape_Area',false)) # False 从大到小,默认true是从小到大

在这里插入图片描述

2.3 日期删选 被筛选文件.filterDate(要求)

var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
    .filterDate('2021-05-01', '2021-06-01');
// Applies scaling factors.
function applyScaleFactors(image) {
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
  return image.addBands(opticalBands, null, true)
              .addBands(thermalBands, null, true);
}
dataset = dataset.map(applyScaleFactors);
var visualization = {
  bands: ['SR_B4', 'SR_B3', 'SR_B2'],
  min: 0.0,
  max: 0.3,
};
Map.setCenter(-114.2579, 38.9275, 8);
Map.addLayer(dataset, visualization, 'True Color (432)');

2.4 地理筛选 文件.filterBounds(地理位置)

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var Beijing_point =ee.Geometry.Point([116.5,39.9])//某个地区点
var Beijing =china.filterBounds(Beijing_point)//根据边界选出该点所在行政区
Map.centerObject(china,4)//4影响图像中心放大尺度,数越大放大尺度越大
Map.addLayer(china)
Map.addLayer(Beijing,{color:'FF0000'})

在这里插入图片描述

2.5 删选器 featureCollection.filter(删选器)

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var Beijing_point =ee.Geometry.Point([116.5,39.9])//某个地区点
var filter_by_Beijing =ee.Filter.bounds(Beijing_point)//选择被=北京筛选器
var Beijing =china.filter(filter_by_Beijing)
Map.centerObject(china)
Map.addLayer(china)
Map.addLayer(Beijing,{color:'FF0000'})

3.选择 featureCollection.select([关键字])

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var china_Area=china.select(['NAME'])
print(china)
print(china_Area)
Map.centerObject(china,4)
Map.addLayer(china)
Map.addLayer(china_Area)
//发现每个元素的属性表里只有NAME字段

在这里插入图片描述

4.去重复 distinct([关键字])

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var china_Area=china.distinct(['NAME'])
print(china_Area)
Map.centerObject(china,4)
Map.addLayer(china_Area)
//把属性表里名字中多余重复元素删去

5.合并 Feature.union()

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var union = china.union()
print(union)
Map.centerObject(china,4)
Map.addLayer(union)
//把各省融合成一个空间,属性信息也都没有

在这里插入图片描述

6. 融合 FeatureCollection.merge(city1)

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var city1 = china.filterMetadata('AERA','equals','71.363')
var Beijing_point =ee.Geometry.Point([116.5,39.9])//某个地区点
var Beijing =china.filterBounds(Beijing_point)//根据边界选出该点所在行政区
var merge = Beijing.merge(city1)
print(merge)
Map.centerObject(china,4)
Map.addLayer(merge)

在这里插入图片描述

7.对所有属性批量操作 显色 remap(旧字段内容,新字段内容,[字段])

//不出图有问题
var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var Old_provinces= ee.List([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32])
var New_provinces= ee.List([1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9])//重分类
var remap =china.remap(Old_provinces,New_provinces,'FID')
var china_Map= china.reduceToImage(['FID'],ee.Reducer.first())
print(china_Map)
Map.addLayer(china_Map,{min:1,max:9,palette:'16ff07,2901ff'},'china_Map')
Map.centerObject(china)
Map.addLayer(china)

8.排序 .sort()

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var sort = china.sort('Shape_Area',false)//false 从大到小
Map.centerObject(china,4)
Map.addLayer(china.limit(5))
Map.addLayer(sort.limit(5),{color:'ff000000'})//限制出面积前五大
print(sort)

在这里插入图片描述

9.多个属性字段形成新字段 .makeArray([字段1,字段2],新字段)//旧字段还在

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var china_Array=china.makeArray(['Shape_Area','NAME'],'Array')
Map.centerObject(china)
Map.addLayer(china_Array)
print(china_Array)

在这里插入图片描述

10.仅获得多边形信息geometry()

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china").limit(3)var China_Geometry = china.geometry()
print(china)
print(China_Geometry)
//类型从FeatureCollection变为多边形

在这里插入图片描述

11.取第一个 .first()

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var China_Biggest_Province = ee.Feature(china.sort('Shape_Area',false).first())
//排序后第一个则为中国面积最大省
//var sort = china.sort('Shape_Area',false)//false 从大到小
//var China_Biggest_Province = ee.Feature(sort.first())与上面结果相同,sort不是图所以要ee

print(China_Biggest_Province)
Map.centerObject(China_Provinces,4)
Map.addLayer(China_Biggest_Province)

12.矢量转栅格.reduceToImage()??

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var China_to_Image = china.reduceToImage(['OBJECTID'],ee.Reducer.first())
//reducer缩减器
print(China_Biggest_Province)
Map.centerObject(China_Provinces,4)
Map.addLayer(China_Biggest_Province)

13 单拎出几个区域 .toList()

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var China_list = hubei.sort('adcode',false).toList(10)
//通过排序选择前10区域
//改成list可以获得任意区域的feature
print(China_list)
var Area_No_1 = ee.Feature(China_list.get(0))
var Area_No_3 = ee.Feature(China_list.get(2))
var Area_No_4 = ee.Feature(hChina_list.get(4))
Map.centerObject(china,4)
Map.addLayer(Area_No_1)
Map.addLayer(Area_No_3)
Map.addLayer(Area_No_4)

在这里插入图片描述

14 对属性表某一列进行操作获得具体信息.aggregate()

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var Area_first = china.sort('Shape_Area',false).aggregate_first('Shape_Area')
print(Area_first)

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
var Area_array = china.sort('Shape_Area',false).limit(3).aggregate_array('Shape_Area')
print(Area_array)
//175.590676206,129.112549336,114.33092875]
//0: 175.590676206
//1: 129.112549336
//2: 114.33092875
//
//aggregate_stats('Shape_Area')数值统计信息最大最小平均等
//aggregate_histogram('Shape_Area') 直方图每个值出现次数还有很多

15 对某一个数据里的每一个元素进行相同的操作

var china= ee.FeatureCollection("projects/ee-wn1206/assets/china");
function Add_Center(feature){
  return feature.centroid()
}//获得中心点函数

var china_center = china.map(Add_Center)//每个省都获得中心点
print(china_center)

Map.centerObject(china)
Map.addLayer(china)
Map.addLayer(china_center,{color:'ff0000'})

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值