本系列文章是根据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
一些Shapely
操作可能会出现多项几何对象的集合(collections)。例如,两个LineString
可能沿着一条线和在一个点相交。为了表示这些结果,Shapely
提供了类似于frozenset
的、不可改变的几何对象的集合。这些集合可以是同质的(复合点等)或异质的(点与线的集合)。
1>>> a = LineString([(0, 0), (1, 1), (1,2), (2,2)])
2>>> b = LineString([(0, 0), (1, 1), (2,1), (2,2)])
3
4>>> x = a.intersection(b)
5>>> x
6<GEOMETRYCOLLECTION (LINESTRING (0 0, 1 1), POINT (2 2))>
两个线对象的相对关系如下图所示,其中,a)一条绿色和一条黄色的线,在一条线和一个点上相交;b) 交点(蓝色)是一个包含一个LineString和一个Point的集合。:
几何集合(GeometryCollection)的成员可以通过geoms
属性来访问。复合几何元素没有坐标序列,坐标序列被存储在组成其的几何要素上。
1>>> list(x.geoms)
2[<LINESTRING (0 0, 1 1)>, <POINT (2 2)>]
3
4# 获取第一个几何要素的坐标序列
5>>> x.geoms[0].coords[:]
6[(0.0, 0.0), (1.0, 1.0)]
class MultiPoint(points)
:复合点构造函数接收一系列(x, y[, z ])
点元祖。
1>>> points = MultiPoint([(0,0) , (1,1)])
2>>> points
3<MULTIPOINT (0 0, 1 1)>
MultiPoint
的面积和长度都是零。
1>>> points.area , points.length
2(0.0, 0.0)
其边界是一个元组(minx, miny, maxx, maxy)。
1>>> points.bounds
2(0.0, 0.0, 1.0, 1.0)
其成员可以通过geoms
属性来访问。
1>>> list(points.geoms)
2[<POINT (0 0)>, <POINT (1 1)>]
其构造函数也接受另一个MultiPoint
实例或一个无序的Point
实例序列,从而得到一个副本。
1>>> MultiPoint(points)
2<MULTIPOINT (0 0, 1 1)>
class MultiLineString(lines)
:MultiLineString
构造函数接收线性元祖序列或对象。
1>>> coords = [((0, 0), (1, 1)), ((-1, 0), (1, 0))]
2
3>>> lines = MultiLineString(coords)
4>>> lines
5<MULTILINESTRING ((0 0, 1 1), (-1 0, 1 0))>
例如,下图左边是一个简单的、不相连的复合线,右边是一个有连接的复合线。定义对象的点以灰色显示,对象的边界以黑色显示。
MultiLineString
的面积为零,长度不为零。
1>>> lines.area , lines.length
2(0.0, 3.414213562373095)
其边界是一个元组(minx, miny, maxx, maxy)。
1>>> lines.bounds
2(-1.0, 0.0, 1.0, 1.0)
其成员可以通过geoms
属性来访问。
1>>> list(lines.geoms)
2[<LINESTRING (0 0, 1 1)>, <LINESTRING (-1 0, 1 0)>]
构造函数也接受另一个MultiLineString
的实例或LineString
实例的无序序列,从而得到一个副本。
1>>> MultiLineString(lines)
2<MULTILINESTRING ((0 0, 1 1), (-1 0, 1 0))>
class MultiPolygon(polygons)
:复合多边形构造函数接收外部线环和内部线环(洞)两组序列元祖。
例如,下图左边是一个有2个成员的有效的复合多边形,右边是一个无效的复合多边形,因为它的成员在无限多的点(沿着一条线)相接触。
构造函数同样也可以接收一个无序的Polygon
实例序列,从而得到一个副本。
1>>> polygon = Polygon([(0,0) , (1,1) , (1,2) , (2,2) , (0,0)])
2>>> s = Polygon([(2,0) , (2,1) , (3,2) , (3,1) , (2,0)])
3>>> t = Polygon([(1,3) , (1,4) , (2,4) , (2,3) , (1,3)])
4
5
6>>> polygons = MultiPolygon([polygon, s, t])
7>>> polygons
8<MULTIPOLYGON (((0 0, 1 1, 1 2, 2 2, 0 0)), ((2 0, 2 1, 3 2, 3 1, 2 0)), ((1...>
上述复合多边形各成员间相对关系如下图所示:
其边界是一个元组(minx, miny, maxx, maxy)。
1>>> polygons.bounds
2(0.0, 0.0, 3.0, 4.0)
其成员是Polygon
实例,可以通过geoms
属性访问。
1>>> list(polygons.geoms)
2[<POLYGON ((0 0, 1 1, 1 2, 2 2, 0 0))>, <POLYGON ((2 0, 2 1, 3 2, 3 1, 2 0))>, <POLYGON ((1 3, 1 4, 2 4, 2 3, 1 3))>]
END
本篇文章来源于微信公众号: 码农设计师