GDAL python教程基础篇(7)OGR空间计算

1.空间计算

地理数据处理(geoprocessing)计算函数:
多边形(Polygon):
1、交:poly3.Intersection(poly2)
2、并:poly3.Union(poly2)
3、差:poly3.Difference(poly2)
4、补:poly3.SymmetricDifference(poly2)

下面我们来做一段练习,首先我们有如下一份数据,
在这里插入图片描述
该图层内有两个几何体,我们就用这两个集合体来进行练习

from osgeo import ogr, osr


shp = r'D:/work/全国行政区划/江苏省.shp'

drivier = ogr.GetDriverByName('ESRI Shapefile')

ds = drivier.Open(shp)

layer = ds.GetLayer(0)

srs = layer.GetSpatialRef()  # 获取投影

print(layer.GetFeatureCount())

feat_js = layer.GetNextFeature()
feat_rec = layer.GetNextFeature()

geom_js = feat_js.GetGeometryRef()
geom_rec = feat_rec.GetGeometryRef()

geom_In = geom_js.Intersection(geom_rec)   # 相交
geom_un = geom_js.Union(geom_rec)          # 并集
geom_diff = geom_js.Difference(geom_rec)   # 差集
geom_sy = geom_js.SymmetricDifference(geom_rec)   # 补充


#  写入shp文件
ds2 = drivier.CreateDataSource('test2.shp')
layer = ds2.CreateLayer('test', srs, geom_type=ogr.wkbPolygon)

#定义字段
fieldDefn = ogr.FieldDefn('id', ogr.OFTString)
fieldDefn.SetWidth(4)
layer.CreateField(fieldDefn)

#定义要素
featureDefn = layer.GetLayerDefn()
feature1 = ogr.Feature(featureDefn)
feature2 = ogr.Feature(featureDefn)
feature3 = ogr.Feature(featureDefn)
feature4 = ogr.Feature(featureDefn)


#设置几何形状
feature1.SetGeometry(geom_In)
feature2.SetGeometry(geom_un)
feature3.SetGeometry(geom_diff)
feature4.SetGeometry(geom_sy)

#设定某字段的数值
feature1.SetField('id', 1)
feature2.SetField('id', 2)
feature3.SetField('id', 3)
feature4.SetField('id', 4)


#将feature写入layer
layer.CreateFeature(feature1)
layer.CreateFeature(feature2)
layer.CreateFeature(feature3)
layer.CreateFeature(feature4)

ds2.Destroy()

得到的结果
1、两个几何体的交集
交集
2、两个几何体的并集在这里插入图片描述
3、差集(geom_js去除相交的部分后剩余的部分)
在这里插入图片描述
4、补集,并集减去相交的部分
在这里插入图片描述
几何形状(Geometry):

1.2给geometry加buffer,效果就是把点、线变成多边形,线条加粗:

<geom>.Buffer(<distance>)

1.3两个geometry是否相等:<geom1>.Equal(<geom2>)

1.4两个geometry之间的最短距离:<geom1>.Distance(<geom2>)

1.5用方框边界框住这个几何形状,并返回四个角的点坐标(minx,maxx, miny, maxy):<geom>.GetEnvelope()

geom_js.GetENvelope()
(116.35518309500014, 121.92747178000022, 30.760280365000085, 35.127189627500144)

2.空间分析的方法

2.1.获取面积

建议采用GetArea()获得整个多边形覆盖的面积。

geom_js.GetArea()`
>>> 9.896416947183278

不过此用法以“度”为量纲,已经失去它作为面积的意义了。若要较为准确的面积,可根据空间参考将度转换为米,再将面积计算为平方米。

判断两个对象的关系

2.2Intersect语句是判断两个要素是否相交:

poly2.Intersect(poly1)

返回0表示不相交,返回1表示相交。

2.3Disjoint是判断两个要素是否不相交:

poly2.Disjoint(poly1)

返回1表示不相交,返回0表示相交,跟Intersect正好相反。

2.4Touch表示相邻:

poly2.Touches(poly1)

返回0表示不相邻,返回1表示相邻。

2.5Crosses表示横穿,一般是指一条线穿过一个多边形:

poly2.Crosses(line)

返回0表示不穿过,返回1表示穿过。

2.6Within表示包含,指一个要素完全被另一个要素包含:

ptB.Within(poly1)

返回0表示点在多边形外,返回1表示点在多边形内。

2.7Contains也表示包含,跟Within正好相反:

poly1.Contains(ptB)

与Within的主调对象与参数对换。

2.8Overlaps重叠,只有两个多边形之间才能算作overlap

poly2.Overlaps(poly3)

返回0表示不重叠,返回1表示重叠。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python打包成apk界面设计,python打包成安装文件

大家好&#xff0c;给大家分享一下如何将python程序打包成apk文件&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1、如何用python制作十分秒加减的apk 如何用python制作十分秒加减的apk&#xff1f;用法:. apk包放入apk文件目录,然后输入…

Linux基础命令大全(下)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…

走进哈希心房

目录 哈希的概念 哈希函数 哈希冲突和解决方法 闭散列 插入 查找 删除 开散列 插入 查找 删除 哈希表&#xff08;开散列&#xff09;整体代码 位图 位图模拟实现思路分析&#xff1a; 位图应用 布隆过滤器 本文介绍unordered系列的关联式容器&#xff0c;unor…

安卓手机也可以使用新必应NewBing

没有魔法安卓手机也可以使用新必应NewBing 目前知道的是安卓手机 安卓手机先安装一个猴狐浏览器 打开手机自带浏览器&#xff0c;搜索关键词&#xff1a;猴狐浏览器&#xff0c;找到官网 也可以直接复制这个网址 狐猴浏览器 lemurbrowser CoolAPK 我的手机是荣耀安卓手机…

【正点原子FPGA连载】 第三十三章基于lwip的tftp server实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

第三十三章基于lwip的tftp server实验 文件传输是网络环境中的一项基本应用&#xff0c;其作用是将一台电子设备中的文件传输到另一台可能相距很远的电子设备中。TFTP作为TCP/IP协议族中的一个用来在客户机与服务器之间进行文件传输的协议&#xff0c;常用于无盘工作站、路由器…

「ML 实践篇」分类系统:图片数字识别

目的&#xff1a;使用 MNIST 数据集&#xff0c;建立数字图像识别模型&#xff0c;识别任意图像中的数字&#xff1b; 文章目录1. 数据准备&#xff08;MNIST&#xff09;2. 二元分类器&#xff08;SGD&#xff09;3. 性能测试1. 交叉验证2. 混淆矩阵3. 查准率与查全率4. P-R 曲…

2023年腾讯云服务器配置价格表(轻量服务器、CVM云服务器、GPU云服务器)

目前腾讯云服务器分为轻量应用服务器、云服务器云服务器云服务器CVM和GPU云服务器&#xff0c;首先介绍一下这三种服务。 1、腾讯云云服务器&#xff08;Cloud Virtual Machine&#xff0c;CVM&#xff09;提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源&#xff…

【经验总结】10年的嵌入式开发老手,到底是如何快速学习和使用RT-Thread的?(文末赠书5本)

【经验总结】一位近10年的嵌入式开发老手&#xff0c;到底是如何快速学习和使用RT-Thread的&#xff1f; RT-Thread绝对可以称得上国内优秀且排名靠前的操作系统&#xff0c;在嵌入式IoT领域一直享有盛名。近些年&#xff0c;物联网产业的大热&#xff0c;更是直接将RT-Thread这…

python绘制图像中心坐标二维分布曲线

数据和代码如下所示&#xff1a; import pandas as pd import numpy as np import matplotlib.pyplot as plt import xlrd from scipy.stats import multivariate_normal from mpl_toolkits.mplot3d import Axes3D np.set_printoptions(suppressTrue)# 根据均值、标准差,求指定…

SuperMap iMobile for Android 地图开发(一)

第一步&#xff1a;创建 Android Studio 项目 第一步&#xff1a;创建 Android Studio 项目 Android Studio 有两种创建项目的方法。 第一种是在 Android Studio起始页选择“Start a new Android Studio Project”。 第二种是在 Android Studio 主页选择“File”–>“New P…

数仓建模—主题域和主题

主题域和主题 前面在这个专题的第一篇,也就是数仓建模—数仓初识中我们就提到了一个概念—主题,这个概念其实在数仓的定义中也有提到 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 今天我们主要来探究一下,数仓的主题到底是…

Multi-Camera Color Correction via Hybrid Histogram Matching直方图映射

文章目录Multi-Camera Color Correction via Hybrid Histogram Matching1. 计算直方图&#xff0c; 累计直方图&#xff0c; 直方图均衡化2. 直方图规定化&#xff0c;直方图映射。3. 实验环节3.1 输入图像3.2 均衡化效果3.3 映射效果4. 针对3实验环节的伪影 做处理和优化&…

ChatGPT研究分析:GPT-4做了什么

前脚刚研究了一轮GPT3.5&#xff0c;OpenAI很快就升级了GPT-4&#xff0c;整体表现有进一步提升。追赶一下潮流&#xff0c;研究研究GPT-4干了啥。本文内容全部源于对OpenAI公开的技术报告的解读&#xff0c;通篇以PR效果为主&#xff0c;实际内容不多。主要强调的工作&#xf…

九种跨域方式实现原理(完整版)

前言 前后端数据交互经常会碰到请求跨域&#xff0c;什么是跨域&#xff0c;以及有哪几种跨域方式&#xff0c;这是本文要探讨的内容。 一、什么是跨域&#xff1f; 1.什么是同源策略及其限制内容&#xff1f; 同源策略是一种约定&#xff0c;它是浏览器最核心也最基本的安…

如何发布自己的npm包

一、什么是npm npm是随同nodejs一起安装的javascript包管理工具&#xff0c;能解决nodejs代码部署上的很多问题&#xff0c;常见的使用场景有以下几种&#xff1a; ①.允许用户从npm服务器下载别人编写的第三方包到本地使用。 ②.允许用户从npm服务器下载并安装别人编写的命令…

K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示

K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCMQ2传感参模块1.2、STM32F103C8T6MQ2传感参模块五、基础知识学习与相关…

Vue3之插槽(Slot)

何为插槽 我们都知道在父子组件间可以通过v-bind,v-model搭配props 的方式传递值&#xff0c;但是我们传递的值都是以一些数字&#xff0c;字符串为主&#xff0c;但是假如我们要传递一个div或者其他的dom元素甚至是组件&#xff0c;那v-bind和v-model搭配props的方式就行不通…

让你少写多做的 ES6 技巧

Array.of 关于奇怪的 Array 函数&#xff1a; 众所周知&#xff0c;我们可以通过Array函数来做以下事情。 初始化一个指定长度的数组。 设置数组的初始值。 // 1. Initialize an array of the specified length const array1 Array(3) // [ , , ] // 2. Set the initial value…

Spring Cloud学习笔记【负载均衡-Ribbon】

文章目录什么是Spring Cloud RibbonLB&#xff08;负载均衡&#xff09;是什么Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别&#xff1f;Ribbon架构工作流程Ribbon Demo搭建IRule规则Ribbon负载均衡轮询算法的原理配置自定义IRule新建MyRuleConfig配置类启动类添加Rib…

SQLMap 源码阅读

0x01 前言 还是代码功底太差&#xff0c;所以想尝试阅读 sqlmap 源码一下&#xff0c;并且自己用 golang 重构&#xff0c;到后面会进行 ysoserial 的改写&#xff1b;以及 xray 的重构&#xff0c;当然那个应该会很多参考 cel-go 项目 0x02 环境准备 sqlmap 的项目地址&…
最新文章