前言
本文主要参考shapely官方说明文档。
最近做项目需要处理一些矢量数据,好奇心趋势下,想知道这些矢量数据是怎么存储的,然后查找了一些资料,对目前找到的资料进行简单总结。
Shapely 中涉及到的几何主要是2D,虽然有一个z坐标但在实际几何分析中,几乎用不到,可忽略。且构造的几何对象都会将数值转为float
类型
几何对象包括四类:点(Point)、线(LineString)、闭环(LinearRing)、面(Polygon)
点(Point)
点基本没有什么需要特别注意的
# 构造点
from shapely.geometry import Point
point = Point(1,1)
# 面积,长度,边框
point.area
point.length
point.bounds
point.corrds # 坐标
point.corrds[:] # 坐标切片
Point(point) # 直接复制其他点信息构建点
线(LineString) 和 闭环(LinearRing)
这两个要注意区分,两者区别示例如下
from shapely.geometry import LineString
line = LineString([(0,0), (1,1), (2,0), (2,2), (0,2)])
line
from shapely.geometry.polygon import LinearRing
ring = LinearRing([(0,0), (1,1), (2,0), (2,2), (0,2)])
ring
实例二
ring2 = LinearRing([(0,0), (1,1), (2,0), (2,2), (1,1),(0,2)])
ring2
line2 = LineString([(0,0), (1,1), (2,0), (2,2), (1,1),(0,2)])
line2
但两者都是有长度没有面积的。
ring.area
Out[13]: 0.0
ring.length
Out[14]: 8.82842712474619
line.area
Out[15]: 0.0
line.length
Out[16]: 6.82842712474619
其他属性参考Point
面(Polygon)
面,又称多边形,官方定义:
class Polygon(shell[, holes=None])
注意括号中的不同,面接受的是两个参数:
一个是有序的(x,y[,z])
点元组,简单说就是外面是一个LinearRing
,这点在gdal里面类似,即构造面是用线环进行闭合操作后形成的。
另外一个是可选无序的的环状序列,用来表示面要素内部的边界或“孔”。
LinearRing与Polygon的区别是什么呢?
LinearRing