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
#False

Point(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
#True

LinearRing([(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
#False

LinearRing([(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)
#False

a.equals(b)
#True

a==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))
#True

Point(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))
      #True
      
      LineString(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 MultiPoint

MultiPoint([(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)

6  其他方法

6.1 nearest_points 两个几何体上距离最近的两个点

shapely.ops.nearest_points(geom1, geom2)
  • 计算一对几何体中的最近点
  • 返回一个包含输入几何体中最近点的元组。这些点按照输入几何体的顺序返回
    • 最近点可能不是几何体中现有的顶点
from shapely import *
from shapely.ops import nearest_points
triangle = Polygon([(0, 0), (1, 0), (0.5, 1), (0, 0)])
square = Polygon([(0, 2), (1, 2), (1, 3), (0, 3), (0, 2)])
nearest_points(triangle, square)
#[<POINT (0.5 1)>, <POINT (0.5 2)>]

6.2 shared_paths——两个 LineString 几何体(geom1geom2)之间的共享路径

shapely.ops.shared_paths(geom1, geom2)
  • 查找两个 LineString 几何体(geom1geom2)之间的共享路径
  • 该函数返回一个 GeometryCollection,包含两个元素。
    • 第一个元素是一个 MultiLineString,包含对于两个输入都以相同方向共享的路径。
    • 第二个元素也是一个 MultiLineString,但包含对于两个输入方向相反的共享路径。
from shapely import *
from shapely.ops import shared_paths
g1 = LineString([(0, 0), (10, 0), (10, 5), (20, 5)])
g2 = LineString([(5, 0), (30, 0), (30, 5), (0, 5)])
forward, backward = shared_paths(g1, g2).geoms

forward, backward
#(<MULTILINESTRING ((5 0, 10 0))>, <MULTILINESTRING ((10 5, 20 5))>)

6.3 split——分割几何体

shapely.ops.split(geom, splitter)
  • 通过另一个几何体来分割一个几何体,并返回一个包含多个几何体的集合
    • 用 (Multi)Point、(Multi)LineString 或 (Multi)Polygon 的边界分割 (Multi)LineString
    • 用 LineString 分割 (Multi)Polygon
from shapely import *
from shapely.ops import split
pt = Point((1, 1))
line = LineString([(0,0), (2,2)])
result = split(line, pt)
print(result)
#GEOMETRYCOLLECTION (LINESTRING (0 0, 1 1), LINESTRING (1 1, 2 2))

6.4 substring——返回在 LineString 上指定距离之间的线段

shapely.ops.substring(geom, 
                      start_dist, 
                      end_dist[, normalized=False])
  •  如果 start_distend_dist 相等,则返回一个点
  • 如果 start_dist 实际上在 end_dist 之后,则返回一个逆序的子字符串,以便 start_dist 位于第一个坐标
  • 如果 normalized 参数为 True,则距离将被解释为几何体长度的比例

  • start_dist & end_dist
    • 正数距离:表示从几何体起点(头部)开始沿着几何体方向测量的距离。
    • 负数距离:表示从几何体终点(尾部)开始逆向沿几何体方向测量的距离。
from shapely import *
from shapely.ops import substring
ls = LineString([[0,0],[5,0]])
print(ls)
#LINESTRING (0 0, 5 0)


print(substring(ls, start_dist=1, end_dist=3))
#LINESTRING (1 0, 3 0)
#返回 <LINESTRING (1 0, 2 0, 3 0)>,展示了从距离 1 到距离 3 的线段。

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

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

相关文章

URL、DNS过滤,AV---防火墙综合实验

拓扑图 该实验之前的配置请看我的上一篇博客&#xff0c;这里仅配置URL、DNS过滤&#xff0c;AV 需求 8&#xff0c;分公司内部的客户端可以通过域名访问到内部的服务器 这次的拓扑图在外网多增加了一个DNS服务器和HTTP服务器 DNS服务器IP&#xff1a;40.0.0.30 HTTP服务器…

SqlServer 用游标方式 获取总计累计到某个值/数字 的结果集

数据表准备&#xff1a; 情况1&#xff1a;GroupName1 获取累计 未超过 100 的记录 SQL 和 结果 图 如下&#xff1a; 情况2&#xff1a;GroupName2 获取累计 未超过 100 的记录 SQL 和 结果 图 如下&#xff1a; 附录&#xff1a; SQL 文本 ---------------- 自定义 Star…

MySQL数据库基础(七):DDL数据表操作

文章目录 DDL数据表操作 一、数据表的基本操作 1、数据表的创建 2、查询已创建数据表 3、修改数据表信息 ① 数据表字段添加 ② 修改字段名称或字段类型 ③ 删除某个字段 ④ 修改数据表名称 4、删除数据表 二、字段类型详解 1、整数类型 2、浮点类型 3、日期类型…

提升网络质量:UDPspeeder 实现网络优化与提速

提升网络质量&#xff1a;UDPspeeder 实现网络优化与提速 背景与意义原理与功能使用方法未来展望相关链接服务 在当今高度互联的网络环境下&#xff0c;网络质量的优化和提速对于用户体验至关重要。针对高延迟和丢包率较高的网络链路&#xff0c;UDPspeeder 提供了一种前向纠错…

说一下 JVM 运行时数据区 ?

目录 一、程序计数器&#xff08;Program Counter Register&#xff09; 二、Java 虚拟机栈&#xff08;Java Virtual Machine Stacks&#xff09; 三、本地方法栈&#xff08;Native Method Stack&#xff09; 四、Java 堆&#xff08;Java Heap&#xff09; 五、方法区&…

Docker Compose详解

Docker Compose详解 1.概述2.安装3.基本使用4.命令说明5.Compose 模板文件6.使用Docker快速安装wordpress 1.概述 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排 使用一个 Dockerfile 模板文件&#xff0c;可以让用户很方便的定义一…

新版AI系统ChatGPT源码支持GPT-4/支持AI绘画去授权

源码获取方式 搜一搜&#xff1a;万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新&#xff0c;会陆续更新上 新版AI系统ChatGPT网站源码支持GPT-4/支持AI绘画/Prompt应用/MJ绘画源码/PCH5端/免授权&#xff0c;支持关联上下文&#xff0c;意间绘画模型…

Linux环境安装Git(详细图文)

说明 此文档Linux环境为&#xff1a;Ubuntu 22.04&#xff0c;本文档介绍两种安装方式&#xff0c;一种是服务器能联网的情况通过yum或apt命令下载&#xff0c;第二种采用源码方式安装。 一、yum/apt方式安装 1.yum方式安装Git 如果你的服务器环境是centos/redhot&#xff…

天府锋巢直播产业基地:打造成都直播基地产教融合及人才培训服务新模式

2023年6月&#xff0c;国家发展改革委、教育部等八部门联合印发了《职业教育产教融合赋能提升行动实施方案&#xff08;2023—2025年&#xff09;》&#xff0c;旨在加强国家产教融合试点城市和产教融合型企业的遴选等工作&#xff0c;推进职业教育产教融合赋能提升。 与此同时…

LeetCode.106. 从中序与后序遍历序列构造二叉树

题目 106. 从中序与后序遍历序列构造二叉树 分析 前面讲过根据前序和中序构建二叉树&#xff1a;博客链接 这道题是告诉我们一颗二叉树的后序和中序&#xff0c;让我们根据后序和中序构造出整颗二叉树。 拿到这道题&#xff0c;我们首先要知道中序的后序又怎样的性质&#…

CentOS和Ubuntu之间的区别和联系

CentOS&#xff08;Community ENTerprise Operating System&#xff09;和Ubuntu是两种流行的Linux发行版&#xff0c;它们在企业和个人用户中都有广泛的应用。尽管它们都是基于Linux内核&#xff0c;但它们在设计理念、更新策略、包管理系统等方面存在一些关键的区别和联系。下…

[Angular 基础] - 自定义指令,深入学习 directive

[Angular 基础] - 自定义指令&#xff0c;深入学习 directive 这篇笔记的前置笔记为 [Angular 基础] - 数据绑定(databinding)&#xff0c;对 Angular 的 directives 不是很了解的可以先过一下这篇笔记 后面也会拓展一下项目&#xff0c;所以感兴趣的也可以补一下文后对应的项…

钉钉小程序 访问ip不在白名单之中

钉钉小程序 访问ip不在白名单之中 problem 钉钉官方自带免登陆小程序 后端接口报错 {"errcode":60020,"errmsg":"访问ip不在白名单之中&#xff0c;请参考FAQ&#xff1a;https://open.dingtalk.com/document/org-faq/app-faq,request ip175.2.2.52…

软件测试工程师经典面试题

软件测试工程师&#xff0c;和开发工程师相比起来&#xff0c;虽然前期可能不会太深&#xff0c;但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位&#xff0c;问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux操作系统的使用、软件…

MyBatis3源码深度解析(一)搭建MyBatis源码环境

文章目录 前言内容概要 第1章 搭建MyBatis源码环境1.1 MyBatis3简介1.2 下载源码并导入IDE1.3 HSQLDB数据库&#xff08;1&#xff09;准备sql脚本&#xff08;2&#xff09;引入hsqldb依赖&#xff08;3&#xff09;编写单元测试&#xff08;4&#xff09;执行单元测试 1.4 小…

线阵相机参数介绍之轴编码器控制

1.1 功能介绍 编码器是将检测对象的运动与相机拍摄取图相匹配的设备&#xff0c;也即检测对象运动一定距离&#xff0c;相机就拍摄一定行高的图像。 编码器会将检测对象的实际位移转换为固定数量电信号。例如&#xff1a;编码器的精度是2000p/r,该参数的含义是编码器每转一圈输…

5款超好用、高颜值的Git可视化工具

Git&#xff0c;作为一款强大的分布式版本控制系统&#xff0c;为代码协作与版本追踪提供了坚实的基础。然而&#xff0c;对于不熟悉命令行操作的新手或寻求更直观体验的开发者来说&#xff0c;Git的可视化工具成为了不可或缺的得力助手。本文将分享五款超好用、高颜值的Git可视…

【微服务生态】Docker

文章目录 一、基础篇1. 简介2. 下载与安装3. 常用命令3.1 帮助启动类3.2 镜像命令3.3 容器命令 4. Docker 容器数据券5. Docker 镜像5.1 commit 生成镜像5.2 Docker Registry5.3 发布镜像 6. Docker 常规安装软件 二、高级篇1. Dockerfile1.1 概述1.2 基础知识1.3 Dockerfile常…

Zabbix 远程监控主机

目录 1、安装 Zabbix 安装客户端 服务端测试通讯 Web页面添加主机 2、监控 Nginx 自定义脚本监控 Nginx web配置台 3、监控 MySQL 配置模版文件 配置Web界面 1、安装 Zabbix node-12 作为zabbix的被监控端&#xff0c;提供mysql服务器&#xff0c;配置zabbix监控node…

汽车电子论文学习--电动汽车电机驱动系统动力学特性分析

关键重点&#xff1a; 1. 汽车的低速转矩存在最大限制&#xff0c;受附着力限制&#xff0c;因路面不同而变化。 2. 起步加速至规定转速的时间可以计算得到&#xff1a; 3. 电机额定功率的计算方式&#xff1a; 可以采取最高设计车速90%或120km/h匀速行驶的功率作为电机额定功…