首页 > 其他分享 >GEE C25 高级矢量运算

GEE C25 高级矢量运算

时间:2024-05-10 11:34:07浏览次数:19  
标签:Map C25 ee 矢量 Filter geometry GEE var color

主要内容

介绍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');

代码解释:

  1. 导入数据集:

    • 导入了2010年的街区数据集(Census Blocks),2016年的道路数据集,以及一个名为“SFneighborhoods”的旧金山邻居区数据集。
  2. 定位和筛选地理数据:

    • 通过sfNeighborhoods.geometry()获取旧金山邻居区的地理范围,并以此为中心设置地图视图。
    • 使用这个范围来筛选街区数据,只保留旧金山边界内的街区数据。
  3. 显示旧金山的街区数据:

    • 在地图上以单一颜色(红色)显示这些筛选后的街区数据。
  4. 计算人口密度:

    • 在处理街区数据集时,为每个街区添加了两个新字段:area_sqmi(面积,单位为平方英里)和pop_density(人口密度)。
    • 计算每个街区的面积,并从属性pop10获取2010年的人口总数,以此计算人口密度。
  5. 统计和可视化人口密度:

    • 计算了人口密度的统计数据并打印出来。
    • 使用empty.paint()方法将人口密度数据“绘制”到一个空白图像上,以便于在地图上显示。
    • 定义了一个颜色渐变的调色板,用不同的颜色代表不同的人口密度区间,以视觉方式展示人口密度的地理分布。
  6. 最终展示:

    • 将人口密度图层添加到地图上,使用事先定义的视觉参数(颜色、最小和最大值等)来控制展示效果。

 

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

相关文章

  • buuctf-pwn-[OGeek2019]babyrop
    查看一下保护情况丢进ida里分析主函数调用了一个含有alarm的函数,这个函数会设置一个定时器,到时间自动退出程序为了方便调试,我们直接patch掉这个函数接着分析,主函数读入了一个随机数,并将其传入sub_804871F函数sub_804871F函数读取输入,并检查输入的是否和随机数相同,不相同......
  • VectSharp一个C#轻量级矢量图形库
    VectSharp是一个功能强大的C#库,专门用于创建矢量图形,包括文本,不依赖任何第三方,支持跨平台运行,包括Mac、Windows和Linux。使得开发者可以更容易地在他们的项目中集成矢量图形的生成和处理。https://github.com/arklumpus/VectSharp特点:内置字体:包含了14种标准字体,这些字体......
  • 免费的visual studio智能代码插件——CodeGeeX
    CodeGeeX是什么?什么是CodeGeeX?CodeGeeX是一款基于大模型的智能编程助手,它可以实现代码的生成与补全,自动为代码添加注释,不同编程语言的代码间实现互译,针对技术和代码问题的智能问答,当然还包括代码解释,生成单元测试,实现代码审查,修复代码bug等非常丰富的功能。CodeGeeX是一款基于......
  • 免费的visual studio智能代码插件——CodeGeeX
    CodeGeeX是什么?什么是CodeGeeX?CodeGeeX是一款基于大模型的智能编程助手,它可以实现代码的生成与补全,自动为代码添加注释,不同编程语言的代码间实现互译,针对技术和代码问题的智能问答,当然还包括代码解释,生成单元测试,实现代码审查,修复代码bug等非常丰富的功能。CodeGeeX是一款基于......
  • 关于矢量瓦片技术支持前端渲染带来的思考
    前言书接上回,此前提到地图瓦片切片技术的发展。矢量切片技术将瓦片的渲染由服务端迁移到客户端,此操作带来的影响力不可谓不大,基于此,完全可以随心所欲的定义地图的表达。那么在实际的应用当中,当渲染从服务端迁移后客户端后,是否会带来一些其他的问题?超20M的瓦片数据此事发生在202......
  • 矢量金字塔技术研究
    前言在图像切片时代,多层次模型依靠的是影响金字塔。得益于影像栅格数据分辨率的特点,基于影像金字塔可以较好的实现多分辨率模型。但是在矢量切片时代中,就无法直接从影像金字塔技术获利了,因为矢量数据不具有分辨率这个特性,而是采用矢量金字塔技术来实现多层次、多尺度模型。影像......
  • https://geek-docs.com/python/python-ask-answer/74_hk_1707485473.html
    Python中的b是什么介绍 在Python中,我们经常会看到一种奇特的表示方法,即以字符’b’开头的字符串,例如b'Hello'。这种表示方法在Python中被称为字节字符串(bytestring),简称为b字符串。在本文中,我们将详细介绍b字符串的特点、用途和常见应用场景。b字符串的特点字节字符串以字......
  • 代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
    作为一名开发者,你一定遇到过在编写代码时出现的各种错误。这些错误可能是语法错误、运行时错误或者逻辑错误。处理这些错误通常需要花费大量的时间和精力,特别是当你对错误的原因一无所知时。CodeGeeX的v2.7.4版本最新上线的代码修复和错误解释功能,让你在解决代码错误的问题上,变得......
  • WPF 通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸转换过来
    本文将告诉大家如何在WPF或者其他Win32应用里面,在收到鼠标消息时,通过GetMessageExtraInfo方法获取当前收到的鼠标消息是否由触摸消息提升而来大家都知道,在不开启WM_Pointer的情况下,无论是走WM_Touch或者是RealTimeStylus等方式,默认下触摸都会提升为鼠标消息从而更好......
  • 标量码与矢量码(Scalar code & Vector code)及一些后续知识
    标量码每一个码字在每一个节点上包含一个字节,向量码在每一个节点上包含若干字节,共同组合为一个超字节(superbyte),不同节点上的超字节共同组成一个码字。上面这个图是标量码,下面的是矢量码。用俗话说,标量码存的最小单位是一个数字,而矢量码存的最小单位是一个向量(下面这个图存的是向......