shapely主要是在笛卡尔平面对几何对象进行操作和分析,它是一个BSD授权的Python包。Shapely不关心数据格式或坐标系,但可以很容易地与这些文件包集成。
下面是一个典型的例子,通过点缓冲来构建一个缓冲圆。
Shapely实现的几何对象的基本类型是点、曲线和曲面。每一个都与平面上的三组(可能是无限的)点相关联。要素的内部集、边界集和外部集是互斥的,它们的并集与整个平面重合,其数据模型如下:
1、点有一个正好由一个点组成的内部集,一个完全没有点的边界集,以及一个所有其他点的外部集。点的拓扑维数为0;
2、曲线有一个由沿其长度无限多个点组成的内部集(想象一个在空间中拖动的点),一个由其两个端点组成的边界集,以及一个由所有其他点组成的外部集。曲线的拓扑维数为1;
3、曲面有一个内部集,它由内部无限多个点组成(想象一条曲线在空间中拖动以覆盖一个区域),一个边界集由一条或多条曲线组成,以及所有其他点的外部集,包括可能存在于曲面中的孔内的点。曲面的拓扑维数为2;
点类型由point类实现;curve由LineString和LinearRing类实现;surface由Polygon类实现。Shapely实现不平滑(即具有连续切线)曲线。所有曲线必须用线性样条曲线近似。所有的圆形面片必须由线性样条线包围的区域来近似。
点集合由MultiPoint类实现,曲线集合由MultiLineString类实现,曲面集合由MultiPolygon类实现。这些集合在计算上并不重要,但对某些类型的特征建模非常有用。例如,Y形线要素可以很好地通过多线串作为一个整体进行建模。
空间数据模型伴随着一组几何对象之间的自然语言关系(包含、相交、重叠、接触等),以及一个使用其组成点集3的相互交集的3x3矩阵来理解它们的理论框架:DE-9IM。这是一种拓扑模型,用于描述两个几何图形空间关系的一种标准,学过地理课程的一般都了解
根据JTS技术规范,本手册将区分构造(缓冲区、凸壳)和集合论操作(交集、并集等)。
Shapely不支持坐标系转换。对两个或多个特征的所有操作都假定这些特征存在于同一个笛卡尔平面上。
几何对象是以典型的Python方式创建的,使用类本身作为实例工厂。
Point、LineString和LinearRing的实例最重要的属性是确定其内部、边界和外部点集的有限坐标序列。一个线串可以由2个点确定,但包含无限多个点。坐标序列是不变的。构造实例时可以使用第三个z坐标值,但对几何分析没有影响。所有操作都在x-y平面上进行。
在所有构造函数中,数值被转换为float类型。换句话说,点(0,0)和点(0.0,0.0)生成几何等效的实例。在构造实例时,Shapely不会检查拓扑的简单性或有效性。
返回对象面积(float)
返回对象边界(minx, miny, maxx, maxy) 的元组(float)
返回对象长度(float)
返回可以移动节点以生成无效几何体的最小距离。
返回对象的几何类型
返回到另一个几何对象的最小距离
返回到另一个几何对象的Hausdorff距离(float)。两个几何体之间的Hausdorff距离是任意一个几何体上的一个点与另一个几何体上的最近点之间的最远距离
class Point(coordinates)
点构造函数采用位置坐标值或点元组参数。
1、点的面积和长度属性为0
2、点的边界是均为0的元组
3、点的坐标值可以使用coords, x, y, 和z 获取
4、坐标可以被切片(1.2.14版本新特性)
5、Point构造函数还接受另一个Point实例,从而生成一个副本
LineString构造函数采用2个或更多(x,y[,z])点元组的有序序列
构造的LineString对象表示点之间的一个或多个连接的线性样条曲线。允许按顺序重复点,但可能会导致性能损失,应避免。线串可以交叉(即复杂而不简单)
图1 左边是一个简单的LineString,右边是一个复杂的LineString。每个点的(MultiPoint)边界显示为黑色,描述这些线的其他点显示为灰色
1、LineString的面积为0,长度不为0
2、LineString的边界是 (minx, miny, maxx, maxy) 的元组
3、LineString的坐标值可以使用coords获取
4、坐标可以被切片(1.2.14版本新特性)
5、LineString构造函数还接受另一个LineString实例,从而生成一个副本
6、也可以使用一系列混合点实例或坐标元组来构造LineString。各个坐标将复制到新对象中
LinearRing构造函数采用(x,y[,z])点元组的有序序列
通过在第一个和最后一个索引中传递相同的值,可以显式地闭合序列。否则,将通过将第一个元组复制到最后一个索引来隐式闭合序列。与LineString一样,允许有序序列中的重复点,但可能会导致性能损失,因此应该避免。线迹不能交叉,也不能单点接触
图2 左边是有效的LinearRing,右边是无效的自相交LinearRing。描述环的点以灰色显示。环的边界是空的
1、LinearRing的面积为0,长度不为0
2、LinearRing的边界是 (minx, miny, maxx, maxy) 的元组
3、LinearRing的坐标值可以使用coords获取
4、坐标可以被切片(1.2.14版本新特性)
5、LinearRing构造函数还接受另一个LinearRing实例,从而生成一个副本
Polygon构造函数接受两个位置参数。第一个是(x,y[,z])点元组的有序序列,其处理方式与LinearRing完全相同。第二个是一个可选的无序的环状序列,指定了特征的内部边界或“洞”
有效多边形的环不能相互交叉,且只能接触一个点。同样,Shapely不会阻止无效特性的创建,但是在操作它们时会引发异常
a)有效,其中一个内环在一个点上与外环接触;b)无效,因为它的内环在多个点上与外环接触;c)无效,因为它的外环和内环沿一条线接触;d)无效,因为它的内环沿着一条线接触
1、Polygon的面积和长度不为0
2、Polygon的边界是(minx, miny, maxx, maxy)数组
3、Polygon的构成环通过exterior 和 interiors 属性获取
4、Polygon的构造接受LineString 和LinearRing实例
返回给定多边形的正确定向副本。返回结果有符号区域将具有给定的符号。符号1.0表示其外环的坐标方向将为逆时针方向
a)一条绿色和黄色的线,沿着一条线以及一个点相交;b)交点(蓝色)是一个包含一个LineString 和一个Point的集合
1、GeometryCollection的成员可以通过geoms属性或迭代器协议in或list()进行访问
2、集合也可以切片(1.2.14新版本特性)
注意:如果可能的话,最好使用下面描述的同类集合类型之一。
MultiPoint 构造函数接受一系列(x,y[,z])点元组
1、MultiPoint 面积和长度为0
2、其 x-y 边界范围是(minx, miny, maxx, maxy) 元组
3、GeometryCollection的成员可以通过geoms属性或迭代器协议in或list()进行访问
4、构造函数还接受另一个MultiPoint 实例或无序的点实例序列,从而生成副本
MultiLineString构造函数接受一系列类似于直线的序列或对象
a)不连接的MultiLineString;b)复杂的 MultiLineString
1、MultiLineString 的面积和长度为0
2、其 x-y 边界范围是(minx, miny, maxx, maxy) 元组
3、它的成员是LineString的实例,可以通过geoms属性或迭代器协议in或list()进行访问
4、构造函数还接受多行字符串的另一个实例或无序的LineString实例序列,从而生成副本
MultiPolygon构造函数采用一系列外部环和孔列表元组:[((a1,…,aM),[(b1,…,bN),…]),…]
a)有效的有两个成员的MultiPolygon;b)无效MultiPolygon,因为它的成员接触到无限多个点(沿着一条线)
1、其 x-y 边界范围是(minx, miny, maxx, maxy) 元组
2、它的成员是Polygon的实例,可以通过geoms属性或迭代器协议in或list()进行访问
2、可以设置空要素的坐标,之后几何图形不再为空
2、坐标序列可以被索引、切片和迭代,就像它们是一个坐标元组的列表一样。
3、多边形的外部和每个内环都有一个坐标序列
4、多部分几何图形没有坐标序列。其坐标序列存储在组成的几何图形上
返回沿此几何对象到另一个对象最近的点的距离。
如果normalized 参数为True,则返回对象长度的标准化距离,project()方法是interpolate()的逆方法。
例如,可以使用线性参照方法在指定距离处剪切直线
如果特征不仅具有的x和y坐标,还具有三维(或所谓的2.5D)几何图形的z坐标,则返回True
如果坐标按逆时针顺序(以正向符号包围区域)返回True。此方法仅适用于线性化对象
环可以通过以下方式实现反转:
如果要素的内部和边界(在点集术语中)与空集重合,则返回True
如果要素是闭合的简单LineString,则返回True。一个封闭要素的边界与空集合重合。
此属性适用于LineString和LinearRing实例,但对其他实例没有意义
如果要素不自相交,则返回True (只对LineStrings 和LinearRings有意义)
如果要素是“有效的”,则返回True
一个有效的LinearRing 不能在一个点上与自己交叉或相接。一个有效的Polygon 不能有任何重叠的外环或内环。有效的MultiPolygon 不能集合任何重叠的多边形。对无效要素的操作可能会失败
上面的两个点非常接近,缓冲区操作产生的多边形(在下一节中解释)会重叠
注意:is_valid谓词可用于编写验证装饰器,该装饰器可确保从构造函数函数只返回有效对象