主要内容
介绍GEE中可视化和处理矢量的高级技巧。
1、可视化要素集;
一、可视化要素集
1.可使用的函数
Map.addLayer:
draw:
paint:
style:
2.创建等值线图Choropleth Map
var blocks = ee.FeatureCollection('TIGER/2010/Blocks'); var roads = ee.FeatureCollection('TIGER/2016/Roads'); var sfNeighborhoods = ee.FeatureCollection( 'projects/gee-book/assets/F5-0/SFneighborhoods'); var geometry = sfNeighborhoods.geometry(); Map.centerObject(geometry); // Filter blocks to the San Francisco boundary. var sfBlocks = blocks.filter(ee.Filter.bounds(geometry)); // Visualize with a single color. Map.addLayer(sfBlocks, { color: '#de2d26' }, 'Census Blocks (single color)'); //人口普查块表有一个名为“pop10”的属性,其中包含2010年人口普查的人口总数。 //我们可以用它来创建一个显示人口密度的等值线图。 // Add a pop_density column. var sfBlocks = sfBlocks.map(function(f) { // Get the polygon area in square miles. var area_sqmi = f.area().divide(2.59e6); var population = f.get('pop10'); // Calculate population density. var density = ee.Number(population).divide(area_sqmi); return f.set({ 'area_sqmi': area_sqmi, 'pop_density': density }); }); // Calculate the statistics of the newly computed column. var stats = sfBlocks.aggregate_stats('pop_density'); print(stats); // Create an empty image into which to paint the features. // Cast to 32-bit integer which supports storing values // up to 2,147,483,647. var empty = ee.Image().int32(); var sfBlocksPaint = empty.paint({ featureCollection: sfBlocks, color: 'pop_density', }); var palette = ['fee5d9', 'fcae91', 'fb6a4a', 'de2d26', 'a50f15']; var visParams = { min: 0, max: 50000, palette: palette }; Map.addLayer(sfBlocksPaint.clip(geometry), visParams, 'Population Density');
代码解释:
-
导入数据集:
- 导入了2010年的街区数据集(Census Blocks),2016年的道路数据集,以及一个名为“SFneighborhoods”的旧金山邻居区数据集。
-
定位和筛选地理数据:
- 通过
sfNeighborhoods.geometry()
获取旧金山邻居区的地理范围,并以此为中心设置地图视图。 - 使用这个范围来筛选街区数据,只保留旧金山边界内的街区数据。
- 通过
-
显示旧金山的街区数据:
- 在地图上以单一颜色(红色)显示这些筛选后的街区数据。
-
计算人口密度:
- 在处理街区数据集时,为每个街区添加了两个新字段:
area_sqmi
(面积,单位为平方英里)和pop_density
(人口密度)。 - 计算每个街区的面积,并从属性
pop10
获取2010年的人口总数,以此计算人口密度。
- 在处理街区数据集时,为每个街区添加了两个新字段:
-
统计和可视化人口密度:
- 计算了人口密度的统计数据并打印出来。
- 使用
empty.paint()
方法将人口密度数据“绘制”到一个空白图像上,以便于在地图上显示。 - 定义了一个颜色渐变的调色板,用不同的颜色代表不同的人口密度区间,以视觉方式展示人口密度的地理分布。
-
最终展示:
- 将人口密度图层添加到地图上,使用事先定义的视觉参数(颜色、最小和最大值等)来控制展示效果。
3.创建分类图 categorical map(draw style)
var blocks = ee.FeatureCollection('TIGER/2010/Blocks'); var roads = ee.FeatureCollection('TIGER/2016/Roads'); var sfNeighborhoods = ee.FeatureCollection( 'projects/gee-book/assets/F5-0/SFneighborhoods'); var geometry = sfNeighborhoods.geometry(); // Filter roads to San Francisco boundary. var sfRoads = roads.filter(ee.Filter.bounds(geometry)); Map.addLayer(sfRoads, { color: 'blue' }, 'Roads (default)'); // Visualize with draw(). var sfRoadsDraw = sfRoads.draw({ color: 'blue', strokeWidth: 1 }); Map.addLayer(sfRoadsDraw, {}, 'Roads (Draw)'); var styles = ee.Dictionary({ 'S1100': { 'color': 'blue', 'width': 3 }, 'S1200': { 'color': 'green', 'width': 2 }, 'S1400': { 'color': 'orange', 'width': 1 } }); var defaultStyle = { color: 'gray', 'width': 1 }; var sfRoads = sfRoads.map(function(f) { var classcode = f.get('mtfcc'); var style = styles.get(classcode, defaultStyle); return f.set('style', style); });
var sfRoadsStyle = sfRoads.style({
styleProperty: 'style'
});
Map.addLayer(sfRoadsStyle.clip(geometry), {}, 'Roads (Style)');
二、Joins with Feature Collections
地球引擎被设计成一个处理栅格数据的平台,这就是它的亮点所在。多年来,它已经获得了高级的矢量数据处理能力。连接是较难掌握的技能之一,但这样做将帮助您在Earth Engine中执行许多复杂的分析任务。
- ee.Filters
- ee.Filter.equals
- ee.Filter.withinDistance
- Join type
- simple join
- inner join
- save-all join
2.1 通过位置选择
//选择旧金山州际公路1公里范围内的所有街区。 var blocks = ee.FeatureCollection('TIGER/2010/Blocks'); var roads = ee.FeatureCollection('TIGER/2016/Roads'); var sfNeighborhoods = ee.FeatureCollection( 'projects/gee-book/assets/F5-0/SFneighborhoods'); var geometry = sfNeighborhoods.geometry(); Map.centerObject(geometry); // Filter blocks and roads to San Francisco boundary. var sfBlocks = blocks.filter(ee.Filter.bounds(geometry)); var sfRoads = roads.filter(ee.Filter.bounds(geometry)); var interstateRoads = sfRoads.filter(ee.Filter.eq('rttyp', 'I')); var sfBlocksDrawn = sfBlocks.draw({ color: 'gray', strokeWidth: 1 }).clip(geometry); Map.addLayer(sfBlocksDrawn, {}, 'All Blocks'); var interstateRoadsDrawn = interstateRoads.draw({ color: 'blue', strokeWidth: 3 }).clip(geometry); Map.addLayer(interstateRoadsDrawn, {}, 'Interstate Roads'); var joinFilter = ee.Filter.withinDistance({ distance: 1000, leftField: '.geo', rightField: '.geo', maxError: 10 }); var closeBlocks = ee.Join.simple().apply({ primary: sfBlocks, secondary: interstateRoads, condition: joinFilter }); var closeBlocksDrawn = closeBlocks.draw({ color: 'orange', strokeWidth: 1 }).clip(geometry); Map.addLayer(closeBlocksDrawn, {}, 'Blocks within 1km');
2.2 空间连接(Spatial Joins)
根据空间关系,查询两个矢量集合。举个例子:统计包含在多边形里面点的数量。
语法:
var intersectFilter = ee.Filter.intersects({ leftField: '.geo', rightField: '.geo', maxError: 10 });
var saveAllJoin = ee.Join.saveAll({
matchesKey: 'trees',
});
var joined = saveAllJoin
.apply(sfNeighborhoods, sfTrees, intersectFilter);
print(joined.first());
标签:Map,C25,ee,矢量,Filter,geometry,GEE,var,color From: https://www.cnblogs.com/bltstop/p/18146558