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_…

Python数据分析:NumPy、Pandas与Matplotlib库

Python 是一种强大的编程语言&#xff0c;特别适合数据分析&#xff0c;主要得益于其丰富的库生态系统。NumPy、Pandas 和 Matplotlib 是 Python 中最常用的数据分析库。以下是对这三个库的简要介绍以及相应的代码示例。 1. NumPy NumPy 是 Python 的一个基本库&#xff0c;用…

前端 node 常见的包管理工具 npm、npx、Yarn、cnpm、pnpm 的区别有哪些

些工具都是用于管理 Node.js 包和依赖项的 npm (Node Package Manager): npm 是 Node.js 的默认包管理工具&#xff0c;随同 Node.js 安装。主要功能包括安装、发布、管理 JavaScript 包和依赖项。npm 是最常用的包管理工具之一&#xff0c;拥有庞大的包仓库&#xff08;npm Re…

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…

怎样打开“好运“的开关?

说到运气&#xff0c;正好这个春节&#xff0c;我刚刚看了一本书&#xff0c;咱们得到《人生算法》课的主理人&#xff0c;喻颖正老师今年2月刚刚出的一本新书&#xff0c;叫《好运》。 关于运气的抽象原理&#xff0c;你可能听过不少&#xff0c;咱们就不多说了。我主要想借着…

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

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

WPF大杂烩

1、 <ResourceDictionary Source"pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" /> 在上面提供的代码中&#xff0c;Source 属性用于指定要加载的资源字典的位置。这里是一个使用了特殊 URI 格式的路径…

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

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

Excel表的内容批量生成个人加水印的Word文档

Excel表的内容批量生成个人加水印的Word文档 以下代码可以直接复制到docm文件里使用 Sub 宏1()Dim MyDialog As FileDialogDim GetStr As String, Adoc As StringDim PsDoc As DocumentApplication.ScreenUpdating FalseSet MyDialog Application.FileDialog(msoFileDialogF…

使用动态网格的流体动画 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…

SpringBoot+Kafka

文章目录 一、依赖二、配置文件三、API1、生产者2、消费者 一、依赖 <!-- spring-kafka&#xff08;与kafka的版本一致&#xff09; --> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>…

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 版本给大家介…

二级 C 语言笔试-16

一、选择题 1. 程序流程图中带有箭头的线段表示的是( )。 A) 图元关系 B) 数据流 C) 控制流 D) 调用关系 2. 下列描述中正确的是( )。 A) 程序就是软件 B) 软件开发不受计算机系统的限制 C) 软件既是逻辑实体&#xff0c;又是物理实体 D) 软件是程序、数据与相关文档的集合 3. …

Nginx https反向代理

接前一篇文章&#xff0c;今天看看https的反向代理怎么配置。 生成自签名证书和私钥 要使用https&#xff0c;首先需要有证书和私钥&#xff0c;这里创建一个测试用的自签名证书和私钥。 使用 openssl 命令生成服务器私钥文件 openssl genrsa -out server.key 2048生成证书…

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;转变为以个性化、自主追求人生…