首页Python【Shapely矢量数据空...

【Shapely矢量数据空间分析】16.其他操作——最近点、对齐、共享路径、分割


本系列文章是根据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



使

1.最近的点:

  • shapely.ops.nearest_points(geom1, geom2):

返回输入几何对象中最近的一组点组成的元组。这些点的返回顺序与输入几何对象的顺序相同。

 1>>> from shapely.ops import nearest_points
2
3>>> triangle = Polygon([(00), (10), (0.51), (00)])
4>>> triangle
5<POLYGON ((0 01 00.5 10 0))>
6>>> square = Polygon([(02), (12), (13), (03), (02)])
7>>> square
8<POLYGON ((0 21 21 30 30 2))>
9
10# 计算两个几何对象最近的一组点
11>>> result = nearest_points(triangle , square)
12>>> result
13(<POINT (0.5 1)>, <POINT (0.5 2)>)

结果如下图所示:

2.对齐:

  • shapely.ops.snap(geom1, geom2, tolerance):

geom1中的顶点与geom2中的顶点对齐,被捕捉的几何体对象副本会被返回,输入的几何对象不会被修改。

tolerance参数指定了执行对齐操作的顶点之间的最小距离。

 1>>> from shapely.ops import snap
2
3>>> square = Polygon([(1,1), (21), (22), (12), (11)])
4>>> square
5<POLYGON ((1 12 12 21 21 1))>
6>>> line = LineString([(0,0), (0.80.8), (1.80.95), (2.60.5)])
7>>> line
8<LINESTRING (0 00.8 0.81.8 0.952.6 0.5)>
9
10# tolerance = 0.5
11>>> result1 = snap(line , square , 0.5)
12>>> result1
13<LINESTRING (0 01 12 12.6 0.5)>
14
15# tolerance = 0.2
16>>> result2 = snap(line , square , 0.2)
17>>> result2
18<LINESTRING (0 00.8 0.81 11.8 0.952 12.6 0.5)>

结果如下图所示:

3.共享路径:

  • shapely.ops.shared_paths(geom1, geom2):

找geom1和geom2之间的共享路径,返回一个有两个元素的几何集合,其中两个几何对象都是LineString类型。

  • 第一个元素是一个MultiLineString,包含两个输入方向相同的共享路径。
  • 第二个元素是一个MultiLineString,包含两个输入方向相反的共享路径。
首先生成两个几何对象:
1>>> from shapely.ops import shared_paths
2
3>>> g1 = LineString([(00), (100), (105), (205)])
4>>> g1
5<LINESTRING (0 010 010 520 5)>
6>>> g2 = LineString([(50), (300), (305), (05)])
7>>> g2
8<LINESTRING (5 030 030 50 5)>

以上述几何对象为例,求解共享路径:

1>>> shared_paths(g1 , g2)
2<GEOMETRYCOLLECTION (MULTILINESTRING ((5 010 0)), MULTILINESTRING ((10 5, ...>
3
4>>> forward , backward = shared_paths(g1 , g2).geoms
5>>> forward
6<MULTILINESTRING ((5 010 0))>
7>>> backward
8<MULTILINESTRING ((10 520 5))>

结果如下图所示,其中,灰色线为原几何对象,红色线为与两个输入方向相同的共享路径。黄色线为与两个输入方向相反的共享路径:

4.分割:

  • shapely.ops.split(geom, splitter):

将一个几何对象与另一个几何对象分割,并返回一个几何集合。

该函数在理论上与分割后的几何对象部分的联合操作相反。如果分割器没有分割几何对象,则返回一个与输入几何对象相同的单一几何集合。

以较低的容差分割几何对象可能是很方便的。例如,在用一个点分割线的情况下,该点必须正好在直线上,才能正确分割直线。当用多边形分割一条线时,多边形的边界被用于运算。当用另一条线分割一条线时,如果这两条线在某些段上重叠,就会产生ValueError

首先生成一个点和一条线两个几何对象:

1>>> from shapely.ops import split
2
3>>> point = Point((11))
4>>> line = LineString([(0,0), (2,2)])

然后,用点来分割线:

1>>> result = split(line , point)
2>>> result
3<GEOMETRYCOLLECTION (LINESTRING (0 01 1), LINESTRING (1 12 2))>
4>>> list(result.geoms)
5[<LINESTRING (0 01 1)>, <LINESTRING (1 12 2)>]

结果如下图所示,其中,灰色线和灰色点为原几何对象,黄色线和红色线为分割结果:


END


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments