GEE必须会教程—矢量数据类型

news2024/11/18 19:55:50

矢量这个词,我们在数学上并不陌生,它是既有方向又有大小的量。而在GIS中,常常利用欧氏空间的点、线、面来表示地理实体,进而构成我们使用频繁的矢量数据,它和栅格数据一同构成了地理信息数据的基础。今天开始,我们会一一给大家介绍矢量数据,矢量数据集合,栅格数据,栅格数据集合在GEE上的访问、常见的操作命令等知识。今天要分享的feature,是带有属性特征的几何图形。

1.feature数据的定义

//定义一个带有年份和数值的矢量
var polygon1 =ee.Geometry.Polygon([[[119.94549941865796,30.651295781304153],
                                    [121.16498184053296,30.924996724620726],
                                    [120.63214492647046,31.732054027321237],
                                    [119.26434707490796,31.84411484101546],
                                    [119.94549941865796,30.651295781304153]]]);
 var feature1 = ee.Feature(polygon1,{year:2000,count:100});
 print(feature1);
 Map.centerObject(feature1,8);
 Map.addLayer(feature1,{color:"red"},"feature1");

数据的定义依托于前面讲过的地理几何(http://t.csdnimg.cn/d7RVQ),通过对原有的几何边界进行属性上的编辑,便能给形成能够反映一定信息的矢量数据。此处小编首先定义了一个多边形,接着通过ee.Feature方法进行数据类型的定义,同时给该几何图形增加了年份信息和人口信息(在定义时即可添加),是不是很简单就实现了对矢量数据的定义。

2.对矢量数据的属性进行相关操作

 //获取矢量数据的属性
 print("Year",feature1.get("year"));
 print("Count",feature1.get("population"));
 //设置新的属性
 feature1 = feature1.set("desc","TaihuLake");
 print(feature1);
 //查看所有的数据属性名称
 print("propertyName:",feature1.propertyNames());

要获取矢量数据的属性,使用get(“name”),设置新的属性,使用set(“propertyname","value"),想查看数据的所有属性名称,使用propertyNames比较合适。

接下来我们要重点聊聊select方法,select方法使用后,会根据括号中指定的属性关键字进行数据的重新生成,当然生成的自然是你想要的只包含该属性的矢量数据啦。而如果想要对其中的某个属性名称进行修改,比如小编在这里看不惯year,想用Date表示日期,我们可以在select中传递两个参数,前面的参数写上原有的名称,后面的参数写上要修改后的名称,注意必须是一一对应的,且参数间用方括号隔开,如下所示:

 //筛选包含特定属性的矢量数据/筛选并修改属性名称
 print(ee.Feature(feature1.select(["count"])));
 var feature2 = feature1.select(["year","population","desc"],
                                ["date","population","desc"]);
feature2 = ee.Feature(feature2);
print(feature2);

3.空间操作方法

(1)重新定义两个矢量数据

//属性数据空间操作方法
//定义两个面状地物
var polygon2 = ee.Geometry.Polygon([[[117.03488606835816,31.530418772379406],
                                     [117.70505208398316,31.098668414373755],
                                     [117.94675130273316,31.6801278448436],
                                     [117.07883138085816,31.824928675333382],
                                     [117.03488606835816,31.530418772379406]]]);
var polygon3 = ee.Geometry.Polygon([[[118.02365559960816,30.267231511702718],
                                     [118.54550618554566,30.825463762625528],
                                     [118.10605306054566,31.371089507224852],
                                     [117.21066731835816,31.145693579861263],
                                     [118.02365559960816,30.267231511702718]]]);
var feature3 = ee.Feature(polygon2);
var feature4 = ee.Feature(polygon3);
Map.centerObject(feature3,8);
Map.addLayer(feature3,{color:"orange"},"feature3");
Map.addLayer(feature4,{color:"green"},"feature4");

它们长这样:

(2)求两个范围的面积和周长

//计算地物面积与周长
print("Area1:",feature3.area());
print("Area2:",feature4.area());
print("perimeter1:",feature3.perimeter());
print("perimeter2:",feature4.perimeter());

(2)绘制外接矩形

//绘制外接矩形
var Bound1 = feature3.bounds();
var Bound2 = feature4.bounds();
Map.addLayer(Bound1,{"color":"black"},"Bound1");
Map.addLayer(Bound2,{"color":"black"},"Bound2");

外接矩形使用bounds进行绘制,一般沿矩形的顶点延申得到最小的外接矩形。

(3)形成中心点

//绘制中心点
var centroid1 = feature3.centroid();
var centroid2 = feature4.centroid();
Map.addLayer(centroid1,{},"C1");
Map.addLayer(centroid2,{},"C2");
print("Centroid1:",centroid1);
print("Centroid2:",centroid2);

中心点,即所在的矢量数据的几何中心位置,一般以坐标的形式给出:

(4)获取几何边界

当我们在获取特定信息比如边界点的坐标信息或者进行数据转换时,有时要把数据的原始的几何边界提取出来,这将用到以下代码:

//获取特定的几何图形
var Geometry1 = feature3.geometry();
var Geometry2 = feature4.geometry();
print("Geometry1:",Geometry1);
print("Geometry2:",Geometry2);
print("Geometry1:",Geometry1.coordinates());
print("Geometry1:",Geometry2.coordinates());

此处小编获取了原始数据的几何图形进行提取,并顺势统计了边界点的坐标,结果将以列表的形式进行返回,如下所示:

(5)判断交集和求交集

判断两个数据之间存在交集我们在前面的数据类型也讲过相似的方法,大家需要注意的就是intersects是判断时使用,结果将返回true或false,而intersection指的是求两者之间的交集。

代码如下:

//判断相交与矢量求交集
print("Is Intersects:",feature3.intersects(feature4));
var intersection = feature3.intersection(feature4);
print("Intersection:",intersection);
Map.addLayer(intersection,{"color":"yellow"},"intersection");
//

结果如下:

(6)缓冲区分析

缓冲区分析常常用来分析地物的影响范围,有内缓冲和外缓冲之分,以下是代码:

//缓冲区分析
//外缓冲区分析
var buffer1 = feature4.buffer(10000);
Map.addLayer(buffer1,{"color":"blue"},"buffer1");
//内缓冲区分析
var buffer2 = feature4.buffer(-10000);
Map.addLayer(buffer2,{"color":"blue"},"buffer2");
//缓冲区裁剪
var differ = buffer1.difference(buffer2);
Map.addLayer(differ,{"color":"brown"},"differ");

内外缓冲和裁剪结果如下:

好啦,以上是小编对于feature数据的全部分享,希望能够帮到大家。feature数据是了解后面featurecollection数据的窗口,希望大家对于本次分享涉及到的操作命令能够自主多学学,熟记于心。如果分享的内容对你有帮助,不要忘记给小编点赞哦!!

谢谢大家,咱们下期再会。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1472590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI:140-使用强化学习优化供应链管理

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

typecho 给文章创建目录树

受益于 shortcode 短代码插件和泽泽短代码中目录树的显示样式&#xff0c;形成了自己实现添加文章目录的思路&#xff1a; 一、文章目录树的结构 <div id"toc"><div class"toc-left"><div class"toc-btn" type"button&quo…

网络技术ensp 一个简单的交换机配置案例

由于工作调岗&#xff0c;转战网络运维了&#xff0c;第一次网络笔记 1.&#xff0c;目的&#xff1a;2台主机相互可以ping通&#xff0c;并且可以ping通网关地址&#xff0c;设备&#xff1a;2台主机&#xff0c;2台交换机 2网络拓扑图如下 3.主机pc1的配置信息 ip&#xff…

一个Post请求入门NestJS的路由与控制器

​ NestJS的控制器 控制器负责处理传入请求并向客户端返回响应。 控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。 通常&#xff0c;每个控制器都有不止一条路由&#xff0c;不同的路由可以执行不同的操作。 在使用了脚手架的项目中&#xff0c;我…

javascript给对象添加迭代器

迭代器是啥就自行百度了 为啥for…of可以遍历数组&#xff0c;为啥不能遍历对象&#xff0c;就是for…of会调用迭代器&#xff0c;而数组是内置了迭代器了&#xff0c;而对象没有内置&#xff0c;所以直接使用for…of遍历对象会报错&#xff0c;因此只用在对象的原型上面自定义…

temu/亚马逊美国站烧烤炉UL报告UL2728A应该怎么办理?

temu/亚马逊美国站烧烤炉UL报告UL2728A应该怎么办理&#xff1f; 近年来&#xff0c;烧烤炉在美国市场越来越受欢迎&#xff0c;其便捷性和独特的烹饪方式吸引了许多消费者。然而&#xff0c;为了确保产品的安全性和质量&#xff0c;美国市场对于烧烤炉产品的上架要求日益严格…

Python中的atexit模块:优雅地处理程序退出

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 atexit模块概述 atexit模块的基本用法 示例代码&#xff1a;文件操作时的应用场景 典型应用场景 1 资源释放…

西宾视频下载工具(mediadown)

一个支持多网站的视频下载工具。目前已经支持的网站有知乎、哔哩哔哩、得到、猫耳、蜻蜓FM。 西宾视频下载工具能够帮助你下载知乎知学堂、哔哩哔哩、得到课程、猫耳音频、蜻蜓FM的音视频文件。如果你是这些网站的会员&#xff0c;它还能帮你下载会员节目的音视频。 工具也不是…

【好书推荐-第五期】《Java开发坑点解析:从根因分析到最佳实践》(异步图书出品)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

深入理解基于 eBPF 的 C/C++ 内存泄漏分析

对于 C/C 程序员来说&#xff0c;内存泄露问题是一个老生常谈的问题。排查内存泄露的方法有很多&#xff0c;比如使用 valgrind、gdb、asan、tsan 等工具&#xff0c;但是这些工具都有各自的局限性&#xff0c;比如 valgrind 会使程序运行速度变慢&#xff0c;gdb 需要了解代码…

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树:star:思路分析递归解法 105. 从前序与中序遍历序列构造二叉树递归解法 ---------------&#x1f388;&#x1f388;题目链接&a…

跳房子留脚印

题目描述 N个格子里从左到右里面的数字是0,1,2,3&#xff0c;…N-1。小米和小白2个同学玩跳房子游戏&#xff0c;开始从第0格跳&#xff0c;跳出第N-1格子就停。小米同学每次跳过2格&#xff0c;再向前走1格&#xff0c;再跳过2格&#xff0c;向前走1格…。小白同学每次跳过4格…

DevOps VS 敏捷的区别是什么?

原文链接&#xff1a;DevOps VS 敏捷_软件开发生产线 CodeArts_理论实践_DevOps概览 当我们面对敏捷和DevOps的时候&#xff0c;总会不可避免的思考下面这些问题&#xff1a; 敏捷是什么&#xff1f;DevOps是什么&#xff1f;两者有什么区别&#xff1f;持续集成不是XP里面的…

JS基本知识

JS作用域的内存模型 每个函数都有各自的作用域、作用域链、变量对象、执行环境。 一、函数初始化&#xff1a;3作用域链。 函数被调用&#xff1a;1作用域、2变量对象、4执行环境。执行结束后&#xff0c;1作用域、3作用域链、4执行环境被销毁、2变量对象&#xff08;如果函…

【前后端的那些事】文件上传组件封装

文章目录 效果前端代码后端代码组件封装 效果 前端代码 /views/file/file.vue <template><el-row><el-uploadv-model:file-list"fileList"class"upload-demo"multiple:auto-upload"false":on-preview"handlePreview"…

Java SpringBoot 整合 MyBatis 小案例

Java SpringBoot 整合 MyBatis 小案例 基础配置&#xff08;注意版本号&#xff0c;容易报错&#xff09; pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

面试经典150题 -- 二叉树搜索树 (总结)

总的链接 : https://leetcode.cn/studyplan/top-interview-150/ 二叉搜索树相关概念 : 二叉搜索树是一个有序树。 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b;若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结…

SWIFT:自我认知微调

文档:https://github.com/modelscope/swift/blob/main/docs/source/LLM/%E8%87%AA%E6%88%91%E8%AE%A4%E7%9F%A5%E5%BE%AE%E8%B0%83%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.md ​​​​​​代码: Swift是如何把自我认知数据集融合到训练集中呢? 1:相关的3个参数

阿里云ECS u1实例性能怎么样?199元一年

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

设计模式(二)单例模式的七种写法

相关文章设计模式系列 面试的时候&#xff0c;问到许多年轻的Android开发他所会的设计模式是什么&#xff0c;基本上都会提到单例模式&#xff0c;但是对单例模式也是一知半解&#xff0c;在Android开发中我们经常会运用单例模式&#xff0c;所以我们还是要更了解单例模式才对…