python-shapely包
2021/8/23 2:00:32
本文主要是介绍python-shapely包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
python-shapely
目录- python-shapely
- 主要对象
- 通用对象方法
- Point
- LineStrings
- Polygon
- 多边形关系
- 主要对象
shapely 是一个专门进行二维平面图像计算包
shapely是一个BSD授权的Python包。是专门做图形计算,用于操作和分析笛卡尔坐标系中的几何对象 ,基本上图形线段,点的判断包里都有,shapely里主要由Point,LineString,Polygon这三类组成。
主要对象
常用对象 | 说明 | |
---|---|---|
Point |
点 | |
LineString |
线段 | |
Polygon |
多边形 |
通用对象方法
共有属性
共有属性 | 描述 | |
---|---|---|
object.area |
获得面积 | |
object.bounds |
获得边界 (minx,miny,maxx,maxy) | |
object.length |
长度 | |
object.geom_type |
获得类型 Point | |
object.distance(other) |
获取和其他对象距离,不限于本类型 | |
object.is_empty |
是否为空 | |
object.is_valid |
是否有效 |
from shapely.geometry import Point from shapely.geometry import LineString print (Point(0,0).distance(Point(0,1))) line = LineString([(0,0), (1,1), (1,2)]) print(line.area) print(bine.bounds) print(line.length) print(line.geom_type) # ---------------------------------------------------------- 1.0 0.0 (0.0, 0.0, 1.0, 2.0) 2.414213562373095 'LineString'
Point
点对象
点对象具有零面积和非零长度
from shapely.geometry import Point # 三种创建方式 point = Point(1,1) point_2 = Point((1,1)) point_3 = Point(point) # 复制已有的点对象 print(point.area) # 点的 area==0.0 print(ponit.length) # 点的 length==0.0 # 得到X,y # Point.x,Point.y,Point.z : 获取对应x,y,z坐标值 print(point.x) # 1.0 print(point.y) # 1.0 # (minx, miny, maxx, maxy) 元组 print(point.bounds) #(1) # Point.coords: 返回坐标值 # 通过 coords得到 x,y print(list(p.coords)) # [(1.0,1.0)] # coords可以被切片 print(p.coords[:]) # [(1.0,1.0)]
LineStrings
LineStrings
构造函数传入参数是2个或多个点序列
线段对象
线段对象具有零面积和非零长度
from shapely.geometry import LineString line = LinearRing([(0, 0), (1, 1), (1, 0)]) # 创建线段对象 print(line.area) #0 print(line.length) #3.4142135623730949 print(line.bounds) #边界 #(0.0, 0.0, 1.0, 1.0)
Polygon
多边形对象----为了结果的正确性,建议强制指定为凸多边形
Polygon
构造函数采用两个位置参数。 第一个是(x,y [,z])
点元组的有序序列,其处理方式与LinearRing
情况完全相同。 第二个是可选的无序环状序列,用于指定特征的内部边界或“孔”。
from shapely.geometry import Polygon polygon = Polygon([(0, 0), (1, 1), (1, 0)]) # 三角形 print(polygon.area) print(polygon.length) print(polygon.bounds) print(polygon.boundary) #0.5 #3.414213562373095 #(0.0, 0.0, 1.0, 1.0) #LINESTRING (0 0, 1 1, 1 0, 0 0)
多边形关系
object.bound
- 返回最小的外接正矩形
polygon = Polygon([(0, 0),(1, 1), (1, 0)]) print(polygon.bounds) #(0.0, 0.0, 1.0, 1.0) # xmin,ymin,xmax,ymax
object.boundary
- 返回表示对象的集合论边界的低维对象
polygon = Polygon([(0, 0), (2, 2), (2, 0)]) print(polygon.boundary) # 降一维度,由多边形变成线段 # 最小对象集合 #LINESTRING (0 0, 2 2, 2 0, 0 0) line = LinearRing([(0, 0), (1, 1), (1, 0)]) # 创建线段对象 print(line.boundary) #MULTIPOINT EMPTY
object.centroid
- 返回对象的几何质心
line = LinearRing([(0, 0), (1, 1), (1, 0)]) # 创建线段对象 polygon = Polygon([(0, 0), (0,1),(1, 1), (1, 0)]) print(polygon.centroid) print(line.centroid) #POINT (0.5 0.5) #POINT (0.6464466094067263 0.3535533905932737)
进阶属性
进阶属性 | 描述 | |
---|---|---|
object.contains(other) |
是否包含 | |
object.difference(other) |
差集 | |
object.intersection(other) |
交集 | |
object.symmetric_difference(other) |
对称差集 | |
object.union(other) |
并集 |
object.intersection(other)
-
交集
-
返回此对象与另一个几何对象的交集的表示形式
-
a,b相交的部分 即 a∩b
polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)]) polygon2 = Polygon([(0, 0), (0.5, 1), (-0.5, 1), (-1, 0)]) box=polygon1.intersection(polygon2) print(box) print(box.area) #POLYGON ((0 0, 0 1, 0.5 1, 0 0)) #0.25 # 如果两个图形没有交集 polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)]) polygon2 = Polygon([(0, 0), (-0.5, 1), (-1, 0)]) box=polygon2.intersection(polygon1) print(box) print(box.area) #POINT (0 0) #0.0
object.difference(other)
- 返回组成该几何对象的点的表示,这些点不组成另一个对象
- a - (a,b相交的部分) 即 a - (a∩b)
polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)]) polygon2 = Polygon([(0, 0), (0.5, 1), (-0.5, 1), (-1, 0)]) polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)]) polygon2 = Polygon([(0, 0), (0.5, 1), (-0.5, 1), (-1, 0)]) box=polygon2.difference(polygon1) print(box) print(box.area) #POLYGON ((0 0, -1 0, -0.5 1, 0 1, 0 0)) #0.75
object.symmetric_difference(other)
- 返回此对象中不在另一个几何对象中的点以及另一个不在此几何对象中的点的表示
- a,b的并集-a,b的交集 即 (a∪b) - (a∩b)
object.union(other)
-
并集
-
返回此对象和另一个几何对象的点并集的表示形式
-
a,b的并集 即 a∪b
-
更高效的方法:
shapely.ops.unary_union()
polygon1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)]) polygon2 = Polygon([(0, 0), (0.5, 1), (-0.5, 1), (-1, 0)]) box = polygon2.union(polygon1) print(box) print(box.area) #POLYGON ((0 1, 0.5 1, 1 1, 1 0, 0 0, -1 0, -0.5 1, 0 1)) #1.75
还有很多有意思的用法:
参考:
https://blog.csdn.net/linzi1994/article/details/106484538
这篇关于python-shapely包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门