shapely 笔记:基本方法

本文详细介绍了Shapely库中关于线性方法(如interpolate)、几何属性检查(如has_z、is_ccw等)、比较操作(如__eq__、equals)、包含关系(contains、covers等)以及一系列几何对象的构造、操作和简化方法,涵盖了线段、多边形等对象的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 co

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值