GEE训练教程——如何确定几何形状的中心点坐标和相交的坐标

news2024/11/14 19:51:28

简介

在GEE中,可以使用.geometry()方法来获取几何形状的中心点坐标和相交的坐标。

首先,使用.geometry()方法获取几何形状的几何信息,然后使用.centroid()方法获取几何形状的中心点坐标。示例代码如下:

// 获取几何形状的中心点坐标
var geometry = ee.Geometry.Point([1, 2]);  // 替换为你的几何形状
var center = geometry.centroid();
print('中心点坐标:', center);

要获取几何形状的相交的坐标,可以使用.intersection()方法。首先,创建一个与其他几何形状相交的几何形状,然后使用.intersection()方法获取相交的几何形状。示例代码如下:

// 获取几何形状的相交的坐标
var geometry1 = ee.Geometry.Polygon([[0, 0], [0, 2], [2, 2], [2, 0], [0, 0]]);
var geometry2 = ee.Geometry.Polygon([[1, 1], [1, 3], [3, 3], [3, 1], [1, 1]]);
var intersection = geometry1.intersection(geometry2);
print('相交的坐标:', intersection);

注意,当几何形状没有相交的部分时,intersection()方法将返回一个空的几何形状。在代码中,你可以使用.isEmpty()方法来检查几何形状是否为空。

函数

centroid(maxErrorproj)

Returns a point at the center of the highest-dimension components of the geometry. Lower-dimensional components are ignored, so the centroid of a geometry containing two polygons, three lines and a point is equivalent to the centroid of a geometry containing just the two polygons.

返回几何体最高维度分量的中心点。低维组件将被忽略,因此包含两个多边形、三条线和一个点的几何体的中心点等同于仅包含两个多边形的几何体的中心点。

Arguments:

this:geometry (Geometry):

Calculates the centroid of this geometry.

maxError (ErrorMargin, default: null):

The maximum amount of error tolerated when performing any necessary reprojection.

proj (Projection, default: null):

If specified, the result will be in this projection. Otherwise it will be in WGS84.

Returns: Geometry

convexHull(maxErrorproj)

Returns the convex hull of the given geometry. The convex hull of a single point is the point itself, the convex hull of collinear points is a line, and the convex hull of everything else is a polygon. Note that a degenerate polygon with all vertices on the same line will result in a line segment.

返回给定几何体的凸壳。单个点的凸面形是点本身,相邻点的凸面形是一条直线,其他所有点的凸面形是一个多边形。需要注意的是,如果一个退化多边形的所有顶点都在同一条直线上,那么该多边形将生成一条线段。 

Arguments:

this:geometry (Geometry):

Calculates the convex hull of this geometry.

maxError (ErrorMargin, default: null):

The maximum amount of error tolerated when performing any necessary reprojection.

proj (Projection, default: null):

The projection in which to perform the operation. If not specified, the operation will be performed in a spherical coordinate system, and linear distances will be in meters on the sphere.

Returns: Geometry

代码

var geometry = /* color: #d63000 */ee.Geometry.MultiLineString(
        [[[-110.32626262349595, 40.55855252455285],
          [-110.32598903817643, 40.55829576296057]],
         [[-110.3258763853978, 40.558328367661794],
          [-110.32555452031602, 40.55858920469993]]]);
var sss = geometry.centroid({
	maxError:10,
	proj:'EPSG:4326',
})
print(sss)

Map.addLayer(sss,{color:'blue'},"中心点")

原始坐标

[-110.32626262349595,40.55855252455285]

[-110.32598903817643,40.55829576296057]

坐标中心点

[-110.3261258308334,40.55842414376022]

结果

代码

由两条直线构建成的多边形

var geometry = /* color: #d63000 */ee.Geometry.MultiLineString(
        [[[-110.32626262349595, 40.55855252455285],
          [-110.32598903817643, 40.55829576296057]],
         [[-110.3258763853978, 40.558328367661794],
          [-110.32555452031602, 40.55858920469993]]]);
Map.addLayer(geometry.convexHull(),{color:'black'},"ssss")

 这样我们就能获取一个多边形,根据多边形来选取出相交点的坐标。

var geometry2 = /* color: #98ff00 */ee.Geometry.MultiLineString(
        [[[-110.32545996052656, 40.558247457554124],
          [-110.32496643406782, 40.55830655360604]],
         [[-110.3249483996024, 40.55826663228495],
          [-110.32513078981542, 40.558533582925165]]]);

Map.addLayer(geometry2.convexHull(),{color:'black'},"ssss")

var geometry3 = /* color: #0b4a8b */ee.Geometry.LineString(
        [[-110.32475273214976, 40.558423588568765],
         [-110.32454486095111, 40.55831456669189],
         [-110.3243276020209, 40.558460268786476]]);

//这里我们可以看到一个折现绘制的三角形结果
Map.addLayer(geometry3.convexHull(),{color:'black'},"ssss")

根据坐标函数来获取具体的坐标

List (1 element)

0:List (4 elements)

0:[-110.3243276020209,40.558460268786476]

1:[-110.32475273214978,40.558423588568765]

2:[-110.32454486095111,40.55831456669189]

3:[-110.3243276020209,40.558460268786476]

线段进行边界转化

var geometry = /* color: #d63000 */ee.Geometry.MultiLineString(
        [[[-110.32626262349595, 40.55855252455285],
          [-110.32598903817643, 40.55829576296057]],
         [[-110.3258763853978, 40.558328367661794],
          [-110.32555452031602, 40.55858920469993]]]);

// 获取其边界多边形
Map.addLayer(geometry.bounds(),{color:'red'},"多边形")
//按照多边形转化为格网
Map.addLayer(geometry.coveringGrid('EPSG:4326'),{color:'red'},"ssss")

其他代码

第一种情况

var geometry3 = /* color: #0b4a8b */ee.Geometry.LineString(
        [[-110.32531024334209, 40.558216243071236],
         [-110.32501922366397, 40.558183638315406]]);
var geometry2 = /* color: #ffc82d */ee.Geometry.LineString(
        [[-110.32532767770068, 40.55821929976629],
         [-110.32513724086063, 40.558369077652515]]);

var ss1 = geometry2.buffer(1)

var ss2 = geometry3.buffer(1)

Map.addLayer(ss1,{color:'pink'},"buffer1")
Map.addLayer(ss2,{color:'pink'},"buffer2")

Map.addLayer(ss1.intersection({
		right:ss2,
	maxError:1,
//	proj:null,
}),{color:'black'},"ssss")


var zhongxindian = ss1.intersection(ss2).centroid({
	maxError:1,
	proj:'EPSG:4326',
})

print('zhongxindian zuobiao',zhongxindian.coordinates())
Map.addLayer(zhongxindian,{color:'red'},"zhongxindian")

第二种情况

var geometry3 = /* color: #0b4a8b */ee.Geometry.LineString(
        [[-110.32544033049255, 40.55823152654645],
         [-110.32514931074797, 40.55819892179061]]);
var geometry2 = /* color: #ffc82d */ee.Geometry.LineString(
        [[-110.32532767770068, 40.55821929976629],
         [-110.32513724086063, 40.558369077652515]]);

var ss1 = geometry2.buffer(1)

var ss2 = geometry3.buffer(1)

Map.addLayer(ss1,{color:'pink'},"buffer1")
Map.addLayer(ss2,{color:'pink'},"buffer2")

Map.addLayer(ss1.intersection({
		right:ss2,
	maxError:1,
//	proj:null,
}),{color:'black'},"ssss")


var zhongxindian = ss1.intersection(ss2).centroid({
	maxError:1,
	proj:'EPSG:4326',
})

print('zhongxindian zuobiao',zhongxindian.coordinates())
Map.addLayer(zhongxindian,{color:'red'},"zhongxindian")

第三种情况 

var geometry3 = /* color: #0b4a8b */ee.Geometry.LineString(
        [[-110.32540210925113, 40.5583120194767],
         [-110.32511108915664, 40.55827941472087]]);
var geometry2 = /* color: #ffc82d */ee.Geometry.LineString(
        [[-110.32532767770068, 40.55821929976629],
         [-110.32513724086063, 40.558369077652515]]);

var ss1 = geometry2.buffer(1)

var ss2 = geometry3.buffer(1)

Map.addLayer(ss1,{color:'pink'},"buffer1")
Map.addLayer(ss2,{color:'pink'},"buffer2")

Map.addLayer(ss1.intersection({
		right:ss2,
	maxError:1,
//	proj:null,
}),{color:'black'},"ssss")


var zhongxindian = ss1.intersection(ss2).centroid({
	maxError:1,
	proj:'EPSG:4326',
})

print('zhongxindian zuobiao',zhongxindian.coordinates())
Map.addLayer(zhongxindian,{color:'red'},"zhongxindian")

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

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

相关文章

ChatGP和kimi对比

使用关于歌手李健的一些问答,进行对比。整体感觉CharGPT更严谨。 ChatGPT kimi [ { “role”: “system”, “content”: “你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助…

深度学习与人工智能

深度学习,是一种特殊的人工智能,他与人工智能及机器学习的关系如下: 近些年来,基于人工神经网络的机器学习算法日益盛行起来,逐渐呈现出取代其他机器学习算法的态势,这主要的原因是因为人工神经网络中有一中…

【面试干货】 B 树与 B+ 树的区别

【面试干货】 B 树与 B 树的区别 1、B 树2、 B 树3、 区别与优缺点比较4、 总结 💖The Begin💖点点关注,收藏不迷路💖 在数据库系统中,B 树和 B 树是常见的索引结构,它们在存储和组织数据方面有着不同的设计…

Nginx之正向代理配置示例和说明

一、NGINX正向代理功能简介 Nginx的正向代理功能允许局域网中的客户端通过代理服务器访问Internet资源。具体来说,Nginx作为一种流行的Web服务器和反向代理服务器,在正向代理方面的应用也相当实用。以下是其正向代理功能的几个关键点: 访问外…

【Linux】匿名管道的应用场景 --- 进程池

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

Makefile:从零开始入门Makefile

目录 1.前言 2.Makefile的简单介绍 3.Makefile中的指令规则 4.Makefile的执行流程 5.Makefile中的变量类型 6.Makefile中的模式匹配 7.Makefile中的函数 8.Makefile补充知识 前言 在Linux中编译CPP文件,我们能够使用GCC命令进行编译,但当项目文件多且繁杂…

OpenGauss数据库-5.数据更新

第1关:插入数据 gsql -d postgres -U gaussdb -W "passwd123123" create table student (id integer primary key,name char(20),age integer ); insert into student values(1,"lily",20),(2,lily,21),(3,marry,19); 第2关:删除数…

C51学习归纳9 --- I2C通讯学习(重点)

首先,我自己学习过以后的直观感觉,通信协议是单片机的灵魂之一,只有规定好了通信协议我们才能够正确的接收到信息,才能实现更加深入的研究。所以这一部分是需要好好学习的。 本节借助一个可存储的芯片AT24C02,进行在I2…

仿饿了么的谁去拿外卖游戏源码

源码介绍 喝酒 没有游戏玩? 懒得下床 不想出去 那么好 这个游戏会 满足你! 玩法 每人都选择一个序号 4 个人为例 张三选第 ① 李四选第 ② 王五选第 ③ 赵前选第 ④ 然后就按 4 下 其中最小的数对应的序号就是他输了就去拿外卖! 源码下载 仿饿了么…

快速开始一个go程序(极简-快速入门)

一、 实验介绍 1.1 实验简介 为了能更高效地使用语言进行编码,Go 语言有自己的哲学和编程习惯。Go 语言的设计者们从编程效率出发设计了这门语言,但又不会丢掉访问底层程序结构的能力。设计者们通过一组最少的关键字、内置的方法和语法,最终…

IDEA创建SpringBoot项目的时候,如何使用Java8,怎么办?

在创建springboot项目的时候,IDEA提示,最低Java版本要求17,但是实际上我们可能不需要这么高的版本,怎么使用Java8呢? 解决办法 修改Server URL地址即可:https://start.aliyun.com

【PHP【实战训练】系统性学习】——最经典的web端头像上传,数据库内容安全精简

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

SpringBoot个人网盘系统-计算机毕业设计源码92922

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势或改善自身的缺点,互联网的发展文件管理带来了福音。个人网盘系统是以实际运用为开发背景,运用软件工程原理和…

算法——Floyd判圈算法

介绍 Floyd判圈算法用于判断一个链表中是否有环。 思想 使用快慢指针fast, slow,快指针每次走两步fast fast.next.next,慢指针每次走一步slow slow.next。当出现fast null || fast.next null时,说明链表不存在环,如果存在环…

【python报错】关于 xlrd.biffh.XLRDError: Excel xlsx file; not supported 解决方法【已解决】

【Python报错】关于xlrd.biffh.XLRDError: Excel xlsx file; not supported解决方法【已解决】 在使用Python进行数据分析时,经常需要处理Excel文件。xlrd库是一个流行的用于读取Excel文件的库,但如果你在使用xlrd打开.xlsx文件时遇到了xlrd.biffh.XLRDE…

欢乐打地鼠小游戏html源码

这是一款简单的js欢乐打地鼠游戏,挺好玩的,老鼠出来用鼠标点击锤它,击中老鼠获得一积分。 欢乐打地鼠小游戏html源码

信息系统项目管理师0150:工具与技术(9项目范围管理—9.4收集需求—9.4.2工具与技术)

点击查看专栏目录 文章目录 9.4.2 工具与技术9.4.2 工具与技术 专家判断 收集需求过程中,应征求具备如下领域相关专业知识或接受过相关培训的个人或小组的意见,涉及的领域包括:可行性研究与评估;需求获取;需求分析;需求文件;以往类似项目的项目需求;图解技术;引导;冲…

这个国际档案日,大比武放榜、直播预约、课件下载,一样都不能少!

关注我们 - 数字罗塞塔计划 - 2024年6月9日第十七个国际档案日来临,数字罗塞塔计划放大招:第二届大比武活动榜单揭晓、ARCHE-2024上海智慧档案高峰论坛直播预约、2024上半年度课件大礼包下载。如此大礼,岂能错过? PART.01 榜单…

通过 Python+Nacos实现微服务,细解微服务架构

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 个人IP:shigen 背景 一直以来的想法比较多,然后就用Python编写各种代码脚本。很多…

【线性代数】向量空间,子空间,向量空间的基和维数

向量空间 设V为n维向量的集合,如果V非空,且集合V对于向量的加法以及数乘两种运算封闭,那么就称集合V为向量空间 x,y是n维列向量。 x 向量组等价说明可以互相线性表示 向量组等价则生成的向量空间是一样的 子空间 例题18是三位向…