shapely 笔记:基本方法

1  线性方法

1.1 object.interpolate(distance[, normalized=False])

print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5))
#POINT (0.5 1)print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalized=True))
#POINT (0.5 1)
  • LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5)

    • 1)创建了一个由三个点组成的LineString对象:(0, 0)(0, 1)(1, 1)。这个LineString代表一个"L"形的路径。

    • 2)使用interpolate(1.5)方法在这个路径上查找一个距离起点(0, 0)有1.5单位长度的点。因为LineString的第一段是从(0, 0)(0, 1),长度为1单位,所以剩下的0.5单位将会在从(0, 1)(1, 1)的线段上测量。

    • 因此,这个方法将返回位于(0.5, 1)的点,即从(0, 1)出发,在X轴方向移动0.5单位长度的位置。

  • LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalized=True)

    • 这次使用的是interpolate(0.75, normalized=True)方法。

    • normalized=True时,给定的距离值被解释为整个LineString长度的比例而非实际的距离。LineString的长度是2(从(0, 0)(0, 1)加上从(0, 1)(1, 1))。因此,0.75代表整个路径长度的75%。

    • 在这个例子中,75%的长度位于从(0, 1)(1, 1)的线段上,准确地说,它位于这条线段的中点,因为从(0, 0)(0, 1)是前25%,从(0, 1)(1, 1)的中点则是接下来的50%至75%。所以这个方法将返回(0.5, 1)的点,与上一个例子结果相同,但是原因不同:这里是因为它代表整个路径长度的75%的位置。

2 一元谓词

2.1 has_z 是否有z坐标

如果特征不仅有x和y坐标,而且还有z坐标用于3D几何,则返回True。

from shapely import Point
Point(0, 0).has_z
#FalsePoint(0,0,0).has_z
#True

2.2 is_ccw 是否是逆时针排序

counter close wise

如果坐标是逆时针顺序,则返回True。此方法仅适用于LinearRing对象

from shapely import LinearRing
LinearRing([(1,0), (1,1), (0,0)]).is_ccw
#TrueLinearRing([(0,0), (1,1), (1,0)]).is_ccw
#False

2.3 is_ring 是否成环

如果特征是一个封闭且简单的LineString,则返回True。一个封闭特征的边界与空集重合。

此属性适用于LineString和LinearRing实例,但对其他类型无意义

from shapely import LinearRing,LineString
LineString([(0, 0), (1, 1), (1, -1)]).is_ring
#FalseLinearRing([(0, 0), (1, 1), (1, -1)]).is_ring
#True

2.4 is_simple

如果特征不与自身交叉,则返回True

简单性测试仅对LineStrings和LinearRings有意义

LineString([(0, 0), (1, 1), (1, -1), (0, 1)]).is_simple
#False

3 二元谓词

3.1 __eq__ &equals

  • __eq__:如果两个对象是相同的几何类型,并且两个对象的坐标完全匹配,则返回True。
  • equals:如果对象的集合论边界、内部和外部与另一个对象的相应部分重合,则返回True
a = LineString([(0, 0), (1, 1)])
b = LineString([(0, 0), (0.5, 0.5), (1, 1)])a.__eq__(b)
#Falsea.equals(b)
#Truea==b
#False

3.2 equals_exact(other, tolerance)

如果对象在指定的容差范围内,则返回True

3.3 contains 包含 <-->within

  • 如果other的所有点都不在对象的外部,并且other的至少一个内部点在对象的内部,则返回True。
  • within()的逆,a.contains(b) == b.within(a)总是为True。
coords = [(0, 0), (1, 1)]
LineString(coords).contains(Point(0.5, 0.5))
#TruePoint(0.5, 0.5).within(LineString(coords))
#True

线的端点是其边界的一部分,因此不被包含

LineString(coords).contains(Point(1.0, 1.0))
#False

3.4 covers,covered_by 覆盖

  • covers——如果other的每个点都是对象的内部或边界上的点,则返回True。这类似于object.contains(other) , 但不要求other的任何内部点位于对象的内部。
    • coords = [(0, 0), (1, 1)]
      LineString(coords).covers(Point(0.5, 0.5))
      #TrueLineString(coords).covers(Point(1.0, 1.0))
      #True
  • covered_by——如果对象的每个点都是other的内部或边界上的点,则返回True。这等同于other.covers(object)

3.5 crosses 相交

如果对象的内部与另一个对象的内部相交但不包含它,并且交集的维度小于一个或另一个的维度,则返回True。

LineString([(0, 0), (1, 1)]).crosses(LineString([(0, 1), (1, 0)]))
#True

3.6 disjoint 不相交 <--->intersects

  • 如果对象的边界和内部与另一个对象的边界和内部完全不相交,则返回True。
  • intersects的逆
Point(0, 0).disjoint(Point(1, 1))
#True

4 集合论方法

4.1 object.boundary

  • 返回一个表示对象集合论边界的低维对象
  • 多边形的边界是线,线的边界是点的集合。点的边界是一个空集合
coords = [((0, 0), (1, 1)), ((-1, 0), (1, 0))]
lines = MultiLineString(coords)
lines

lines.boundary

list(lines.boundary.geoms)
#[<POINT (-1 0)>, <POINT (0 0)>, <POINT (1 0)>, <POINT (1 1)>]

4.2 centroid

返回对象几何质心(点)的表示

4.3 difference

返回组成这个几何对象但不组成另一个对象的点的表示(也可以使用minus/-访问)

a = Point(1, 1).buffer(1.5)
b = Point(2, 1).buffer(1.5)
a.difference(b)

4.4 intersection

返回这个对象与另一个几何对象交集的表示(也可以使用and/&访问)

a = Point(1, 1).buffer(1.5)
b = Point(2, 1).buffer(1.5)
a.intersection(b)

4.5 symmetric_difference

返回在这个对象中但不在另一个几何对象中的点,以及在另一个中但不在这个几何对象中的点的表示(可以用xor或者^访问)

a = Point(1, 1).buffer(1.5)
b = Point(2, 1).buffer(1.5)
a.symmetric_difference(b)

4.6 union

返回这个对象和另一个几何对象的点的并集的表示

a = Point(1, 1).buffer(1.5)
b = Point(2, 1).buffer(1.5)
a.union(b)

4.6.1 累积并集的快速方式 unary_union()

使用union()方法查找许多对象的累积并集是一种昂贵的方式,可以使用unary_union()

from shapely.ops import unary_union
polygons = [Point(i, 0).buffer(0.7) for i in range(5)]
polygons
'''
[<POLYGON ((0.7 0, 0.697 -0.0686, 0.687 -0.137, 0.67 -0.203, 0.647 -0.268, 0....>,<POLYGON ((1.7 0, 1.7 -0.0686, 1.69 -0.137, 1.67 -0.203, 1.65 -0.268, 1.62 -...>,<POLYGON ((2.7 0, 2.7 -0.0686, 2.69 -0.137, 2.67 -0.203, 2.65 -0.268, 2.62 -...>,<POLYGON ((3.7 0, 3.7 -0.0686, 3.69 -0.137, 3.67 -0.203, 3.65 -0.268, 3.62 -...>,<POLYGON ((4.7 0, 4.7 -0.0686, 4.69 -0.137, 4.67 -0.203, 4.65 -0.268, 4.62 -...>]
'''unary_union(polygons)

 

5 构造方法

5.1 buffer

object.buffer(distance, quad_segs=16, cap_style=1, join_style=1, mitre_limit=5.0, single_sided=False)

5.1.1 主要参数

distance:

缓冲区的距离。正数表示向外扩展(膨胀),负数表示向内收缩(侵蚀)

quad_segs (默认为16):

用于近似四分之一圆弧的线段数量。增加这个数值可以得到更平滑的圆角边界,但会增加计算复杂度和结果的多边形顶点数

cap_style (默认为1)

定义线的端点(或线性几何对象的两端)的形状。可选值有:

  • 1 或 round(圆形端点)
  • 2 或 flat(平头端点,即直接截断)
  • 3 或 square(正方形端点,端点会延伸出一个小的正方形)

join_style (默认为1)

定义当两个线段连接时,拐角处的形状。可选值有:

  • 1 或 round(圆角连接)
  • 2 或 mitre(斜接连接,即拐角处形成尖角)
  • 3 或 bevel(斜切连接,即拐角处被切去形成一个斜面)

mitre_limit (默认为5.0)join_stylemitre时,这个参数定义了斜接尖角的最大长度
single_sided (默认为False)

当设置为True时,缓冲区将只在原始几何对象的一侧生成。正distance值生成左侧缓冲区,负值生成右侧缓冲区

5.2 convex_hull 凸包

  • 返回包含对象中所有点的最小凸多边形的表示。
    • 对于单点Point(0, 0),其凸包就是它自己 <POINT (0 0)>
    • 对于两点MultiPoint([(0, 0), (1, 1)]),凸包是连接这两点的线 <LINESTRING (0 0, 1 1)>
    • 对于三点MultiPoint([(0, 0), (1, 1), (1, -1)]),凸包是包含这些点的最小凸多边形 <POLYGON ((1 -1, 0 0, 1 1, 1 -1))>

5.3 envelope 

object.envelope 返回包含对象的点或最小矩形多边形(其边与坐标轴平行)的表示。

from shapely import MultiPointMultiPoint([(0,0),(1,2),(4,3)]).envelope

MultiPoint([(0,0),(1,2),(4,3)])

5.4 minimum_rotated_rectangle

  • 返回包含对象的一般最小边界矩形。
  • envelope不同,这个矩形不限制与坐标轴平行。如果对象的凸包是退化的(线或点),则返回这种退化形式。

5.5 offset_curve

object.offset_curve(distance, quad_segs=16, join_style=1, mitre_limit=5.0)

此方法仅适用于 LinearRingLineString 对象

返回一个从对象右侧或左侧一定距离的 LineStringMultiLineString 几何形状

5.5.1 主要参数

distance

右侧偏移(负值)还是左侧偏移(正值)

左右是根据 LineString 给定的几何点的方向确定的

quad_segs (默认为16):

用于近似四分之一圆弧的线段数量。增加这个数值可以得到更平滑的圆角边界,但会增加计算复杂度和结果的多边形顶点数

join_style (默认为1)

定义当两个线段连接时,拐角处的形状。可选值有:

  • 1 或 round(圆角连接)
  • 2 或 mitre(斜接连接,即拐角处形成尖角)
  • 3 或 bevel(斜切连接,即拐角处被切去形成一个斜面)

5.5.2 举例

5.6 simplify 简化图形

object.simplify(tolerance, preserve_topology=True)

返回几何对象的简化表示

5.6.1 参数说明

tolerance

容忍度,即允许简化后的几何形状与原始形状之间的最大偏差距离

较小的 tolerance 值会导致与原始几何形状更相似的简化结果,而较大的 tolerance 值则会产生更简化、但可能与原始形状偏差更大的几何形状

preserve_topology
  • 默认情况下使用一个较慢的算法来保持拓扑。如果将 preserve topology 设置为 False,则使用更快的 Douglas-Peucker 算法
  • 不保持拓扑的简化可能会产生无效的几何对象
  • 简化可能对坐标顺序敏感:仅在坐标顺序上不同的两个几何体可能会以不同方式被简化

5.6.2 举例

from shapely import *
p = Point(0.0, 0.0)
x = p.buffer(1.0)
x

x.simplify(tolerance=1)

x.simplify(tolerance=0.1)

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

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

相关文章

JimuReport积木报表 v1.7.0 变革版本发布,低代码报表设计工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

从零开始的 dbt 入门教程 (dbt core 开发进阶篇)

引 在上一篇文章中&#xff0c;我们花了专门的篇幅介绍了 dbt 更多实用的命令&#xff0c;那么我们继续按照之前的约定来聊 dbt 中你可能会遇到的疑惑以及有用的概念&#xff0c;如果你是 dbt 初学者&#xff0c;我相信如下知识点一定会对你有极大的帮助&#xff1a; 了解 dbt_…

java基础训练题(2)

一、题目 1. 以下程序输出&#xff08;D&#xff09; public static void main(String[] args) {int num 2;switch (num) {case 1:num;case 2:num;case 3:num;default:num;break;}System.out.println(num);} } A&#xff1a;2 B&#xff1a;3 C&#xff1a;4 D&#xff…

STM32 TIM输入捕获测频率占空比库函数

目录 一、输入捕获初始化函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit 二、主从触发模式对应函数 TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 三、配置分频器函数 TIM_SetIC1Prescaler TIM_SetIC2Prescaler TIM_SetIC3Prescaler T…

Kubernetes基础(二十二)-K8S的PV/PVC/StorageClass详解

1 概述 先来个一句话总结&#xff1a;PV、PVC是K8S用来做存储管理的资源对象&#xff0c;它们让存储资源的使用变得可控&#xff0c;从而保障系统的稳定性、可靠性。StorageClass则是为了减少人工的工作量而去自动化创建PV的组件。所有Pod使用存储只有一个原则&#xff1a;先规…

蓝牙BLE安全-SSP简单安全配对

SSP的配对过程由于可以根据设备的IO能力选择不同的关联模型&#xff0c;因此十分灵活&#xff0c;其提供了四种方式&#xff1a;Numeric Comparison、Passkey Entry、Just Works以及Out of Band (OOB) 。这里关联方式的选择实质上对后面的流程是有一定影响的&#xff0c;如Just…

使用动态网格的流体动画 Fluid Animation with Dynamic Meshes 论文阅读笔记

目录 引言背景方法离散化离散化的导数算子速度插值 广义的半拉格朗日步重新网格化双向流固耦合和质量守恒 原文&#xff1a; Klingner, Bryan M., et al. “Fluid animation with dynamic meshes.” ACM SIGGRAPH 2006 Papers. 2006. 820-825. 引言 使用 [Alliez et al., 20…

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息&#xff01;我想通过openai公司的chatgpt3.5来了解一下关于sora的技术信息&#xff0c;结果呢&#xff0c;它竟然回答不知道sora是什么。看来&#xff0c;sora的语料库信息还未来得及加入chatgpt3.5的训练模型中。 如图…

每日学习总结20240219

每日总结 20240219 1.文件类型.csv CSV文件是一种以逗号分隔值&#xff08;Comma-Separated Values&#xff09;为标记的文本文件&#xff0c;它可以用来存储表格数据。每一行表示一条记录&#xff0c;而每一条记录中的字段则使用逗号或其他特定的分隔符进行分隔。 常用场景…

HTTP特性

大家好我是苏麟 , 今天说说HTTP特性. 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 到目前为止&#xff0c;HTTP 常见到版本有 HTTP/1.1&#xff0c;HTTP/2.0,HTTP/3.0&#xff0c;不同版本的 HTTP 特性是不一样的。 这里先用 HTTP/1.1 版本给大家介…

Golang - 使用CentOS 7 安装Golang环境

文章目录 操作步骤 操作步骤 为在CentOS 7上安装Go语言环境&#xff0c;可以按照以下步骤进行操作&#xff1a; 下载Go语言包&#xff1a; 从官方网站 https://golang.org/dl/ 下载适用于Linux的Go语言包。 解压缩Go语言包&#xff1a; 使用以下命令解压缩下载的Go语言包 […

CyberDAO:web3时代的引领者

Web3.0正在改写着世界运行的规则&#xff0c;AGI将为人类未来的生产效率、工作方式与目标带来改变&#xff0c;区块链经过十余年发展开启了去中心化新格局&#xff0c;带来生产关系的变革。人类正在从过往以时间换取收入、听命完成工作&#xff0c;转变为以个性化、自主追求人生…

OpenAI Sora视频模型技术原理报告解读

▌01. OpenAI Sora 视频生成模型技术报告总结 •不管是在视频的保真度、长度、稳定性、一致性、分辨率、文字理解等方面。 •技术细节写得比较泛&#xff08;防止别人模仿&#xff09;大概就是用视觉块编码&#xff08;visual patch&#xff09;的方式&#xff0c;把不同格…

数据采集三防平板丨三防平板电脑丨停车场应用

随着现代科技的不断发展&#xff0c;三防平板已经成为许多人工作和生活的必备工具。在停车场这个场景中&#xff0c;三防平板的应用可以大大提高停车场管理的效率和安全性。 停车场是现代城市交通管理的重要组成部分&#xff0c;它直接关系到城市交通的流畅和公共安全。停车场…

RK3588平台开发系列讲解(视频篇)ffmpeg 的移植

文章目录 一、ffmpeg 介绍二、ffmpeg 的组成三、ffmpeg 依赖库沉淀、分享、成长,让自己和他人都能有所收获!😄 📢ffmpeg 是一种多媒体音视频处理工具,具备视频采集功能、视频抓取图像、视频格式转换、给视频加水印并能将视频转化为流等诸多强大的功能。它采用 LGPL 或 G…

Rofin罗芬Laser激光DQ80设备操作说明书

Rofin罗芬Laser激光DQ80设备操作说明书

计算机视觉的应用23-OpenAI发布的文本生成视频大模型Sora的原理解密

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用23-OpenAI发布的文本生成视频大模型Sora的原理解密。本文概况性地将Sora模型生成视频主要分为三个步骤&#xff1a;视频压缩网络、空间时间潜在补丁提取以及视频生成的Transformer模型。 文章目录…

【lesson62】网络通信UdpSocket版

文章目录 UdpSocketUdpServer.hppUdpServer类成员变量解释成员函数解释 UdpServer的实现ServerIinit的实现socketbindhtonsinet_addr具体实现 ServerStart的实现recvfromsendtontohsinet_ntoa具体实现 ~UdpServer函数实现UdpServer.hpp整体完整代码 UdpServer.ccUdpClient.ccTh…

CDP和Chrome

CDP和Chrome CDP和WebDriver Protocol WebDriver和 Chrome DevTools Protocol&#xff08;CDP&#xff09; 是用于自动化浏览器的两个主要协议&#xff0c;大多数的浏览器自动化工具都是基于上述其中之一来实现的。可以通过这两种形式来和浏览器交互&#xff0c;通过代码来控…

探索海洋世界,基于DETR(DEtection TRansformer)模型开发构建海洋场景下海洋生物检测识别分析系统

前面的博文中&#xff0c;开发实践过海底相关生物检测识别的项目&#xff0c;对于海洋场景下的海洋生物检测则很少有所涉及&#xff0c;这里本文的主要目的就是想要开发构建基于DETR的海洋场景下的海洋生物检测识别系统。 首先看下实例效果&#xff1a; DETR (DEtection TRans…