本系列文章是根据Shapely
官方文档翻译整理,学习任何一个Python第三方库,其官方文档都是最好的学习资料。相比网络搜索得到的一些资料,官方文档是权威的一手资料,其内容全面、准确可靠。通过官方文档入手,能够保证学习认知不会有大偏差。在学习完官方文档后,可以在寻找其他资料进一步学习。
点击“阅读原文”或者直接访问下方链接,查看翻译整理的“Shapely 2.0.0 中文文档”。
https://www.mizhushare.com/docs/shapely-2-0-0-%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3/
-
可以通过百度网盘获取,需要在本地配置代码运行环境:
链接:https://pan.baidu.com/s/1iWGGhB4kra9V7bUj-CWR0w?pwd=mnsj
提取码:mnsj
-
前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Shapely
LineString
和MultiLineString
)得位置是很有用的。Shapely
支持基于长度或距离的线性参考,计算沿几何对象到给定点的投影距离,或沿对象给定距离点的距离。-
object.interpolate(distance[, normalized=False])
返回一个沿线性几何对象的指定距离的点。如果normalized
参数为True
,距离将被解释为几何对象长度的一部分。
1>>> line = LineString([(0, 0), (0, 1), (1, 1)])
2>>> line
3<LINESTRING (0 0, 0 1, 1 1)>
4
5>>> point1 = line.interpolate(0.75)
6>>> point1
7<POINT (0 0.75)>
8>>> list(point1.coords)
9[(0.0, 0.75)]
10
11>>> point2 = line.interpolate(0.75 , normalized=True)
12>>> point2
13<POINT (0.5 1)>
14>>> list(point2.coords) # 1.5 / 2 = 0.75
15[(0.5, 1.0)]
两个点在线性几何对象上的相对关系如下图所示:
-
object.project(other[, normalized=False])
返回沿该几何对象到最接近另一个对象的点的距离。如果normalized参数为True,返回对象长度的标准化距离。project()方法是interpolate()的逆运算。
1>>> line.project(point1)
20.75
3
4>>> line.project(point1, normalized=True)
50.375
6
7>>> line.project(point2, normalized=True)
80.75
-
线性参考方法可以被用来按指定的距离分割线。
1>>> def cut(line, distance):
2... # 将一条线从起点处一分为二
3... if distance <= 0.0 or distance >= line.length:
4... return [LineString(line)]
5... coords = list(line.coords)
6... for i, p in enumerate(coords):
7... pd = line.project(Point(p)) # 返回该点(组成线的点)与线段起点间的距离
8... if pd == distance:
9... return [
10... LineString(coords[:i+1]),
11... LineString(coords[i:])]
12... if pd > distance:
13... cp = line.interpolate(distance) # 沿线段指定距离的点
14... return [
15... LineString(coords[:i] + [(cp.x, cp.y)]),
16... LineString([(cp.x, cp.y)] + coords[i:])]
17...
18
19>>> line = LineString([(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0)])
20>>> line
21<LINESTRING (0 0, 1 0, 2 0, 3 0, 4 0, 5 0)>
22
23>>> [list(x.coords) for x in cut(line, 0.5)]
24[[(0.0, 0.0), (0.5, 0.0)], [(0.5, 0.0), (1.0, 0.0), (2.0, 0.0), (3.0, 0.0), (4.0, 0.0), (5.0, 0.0)]]
25
26>>> [list(x.coords) for x in cut(line, 1.0)]
27[[(0.0, 0.0), (1.0, 0.0)], [(1.0, 0.0), (2.0, 0.0), (3.0, 0.0), (4.0, 0.0), (5.0, 0.0)]]
28
29>>> [list(x.coords) for x in cut(line, 2.5)]
30[[(0.0, 0.0), (1.0, 0.0), (2.0, 0.0), (2.5, 0.0)], [(2.5, 0.0), (3.0, 0.0), (4.0, 0.0), (5.0, 0.0)]]
END
本篇文章来源于微信公众号: 码农设计师