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

【Shapely矢量数据空间分析】5.创建几何集合


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




01
Polygon多边形几何要素

一些Shapely操作可能会出现多项几何对象的集合(collections)。例如,两个LineString可能沿着一条线和在一个点相交。为了表示这些结果,Shapely提供了类似于frozenset的、不可改变的几何对象的集合。这些集合可以是同质的(复合点等)或异质的(点与线的集合)。

1>>> a = LineString([(00), (11), (1,2), (2,2)])
2>>> b = LineString([(00), (11), (2,1), (2,2)])
3
4>>> x = a.intersection(b)
5>>> x
6<GEOMETRYCOLLECTION (LINESTRING (0 01 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)]
02
复合点(Collections of Points)

class MultiPoint(points) :复合点构造函数接收一系列(x, y[, z ])点元祖。

1>>> points = MultiPoint([(0,0) , (1,1)])
2>>> points
3<MULTIPOINT (0 01 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 01 1)>
03
复合线(Collections of Lines)

class MultiLineString(lines)MultiLineString构造函数接收线性元祖序列或对象。

1>>> coords = [((00), (11)), ((-10), (10))]
2
3>>> lines = MultiLineString(coords)
4>>> lines
5<MULTILINESTRING ((0 01 1), (-1 01 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 01 1), (-1 01 0))>
04
复合多边形(Collections of Polygons)

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 01 11 22 20 0)), ((2 02 13 23 12 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 01 11 22 20 0))><POLYGON ((2 02 13 23 12 0))><POLYGON ((1 31 42 42 31 3))>]


END


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

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments