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