1. Shapely 简介
Shapely 是一种用于计算几何图形的 Python 库。它基于其他几何库进行了封装和扩展,可以用Python 中易于阅读的方式操作和分析几何对象。
如果你刚接触 Shapely,以下是一些基本的和不完整的 Shapely 的功能列表:
1.创建和操纵点、线、多边形、正多边形和其他几何对象;
2.使用缓冲区、距离、交、联合、差异、对称差、转换、裁剪和缩放来操作对象;
3.计算点/线/多边形之间的距离和长度;
4.计算两个对象之间的关系(相离、相交、交叉、重叠等);
2. Shapely 安装
在开始使用Shapely之前,你需要先安装Shapely包。安装Shapely 很简单,你可以使用 pip 使用以下命令安装:
pip install Shapely
如果你已经安装了 Anaconda,可以使用以下命令安装:
conda install shapely
安装完成后,就可以开始使用 Shapely 了。
3. Shapely 实例
3.1 创建几何对象
使用 Shapely 创建几何对象的方法就是使用其提供的几何类型类。Shapely 支持的三种类型分别是:Point、LineString 和 Polygon。
3.1.1 创建点对象
我们可以使用 Shapely 的 Point 类来创建点对象:
from shapely.geometry import Point
# 创建一个点,设置坐标
point_1 = Point(0, 0)
print(point_1)
上面的程序会创建一个坐标为 (0, 0) 的 Point 对象,并把它赋值给 point_1 变量。
输出的结果点信息中的坐标为 (0.0, 0.0)。它代表了这个点在二维平面上的坐标。
3.1.2 创建线对象
我们可以使用 Shapely 的 LineString 类来创建线对象:
from shapely.geometry import LineString
#创建一个线
line_1 = LineString([(0, 0), (1, 1), (1, 2)])
print(line_1)
上面程序创建了一个线对象,并将其赋值给变量 line_1。它由坐标串[(0, 0), (1, 1), (1, 2)]组成。
3.1.3创建多边形对象
我们可以使用 Shapely 的 Polygon 类来创建多边形对象:
from shapely.geometry import Polygon
#创建一个多边形
polygon_1 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
print(polygon_1)
上面的程序创建了一个多边形对象,并将其赋值给变量 polygon_1。它由坐标串 [(0, 0), (0, 1), (1, 1), (1, 0)] 组成。
3.2 对几何对象进行操作
3.2.1 对点对象进行操作
对于点对象,常见的操作包括获取点的坐标并判断两个点在平面内的距离是否小于某一距离。以下是一个例子:
#获取点的坐标
print(point_1.x, point_1.y)
#判断两点之间的距离是否小于1
point_2 = Point(1, 1)
result = point_1.distance(point_2)
if result < 1:
print("距离小于1")
3.2.2 对线对象进行操作
对于线对象,常见的操作包括获取线的长度、缓冲区和简化线的形状等。
#获取线的长度和类型
line_1 = LineString([(0, 0), (1, 1), (1, 2)])
print(line_1.length)
print(type(line_1))
#创建一个缓冲区为1的Polygon对象
polygon_1 = line_1.buffer(1)
print(polygon_1)
#简化线的形状
line_2 = line_1.simplify(0.5)
print(line_2)
3.2.3 对多边形对象进行操作
对于多边形对象,常见的操作包括判断多边形是否合法、获取多边形的面积和边界框等。
#判断是否是合法多边形
polygon_2 = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
polygon_3 = Polygon([(0, 0), (1, 1), (1, 2)])
print(polygon_2.is_valid)
print(polygon_3.is_valid)
#获取多边形的面积和边界框信息
print(polygon_2.area)
print(polygon_2.bounds)
4. Shapely 的其他操作
4.1 空间关系操作
使用 Shapely 可以轻松地对空间对象执行各种空间关系操作。Shapely 支持的空间关系操作包括:包含、相交、相离、接触、交叉、相等等。
from shapely.geometry import Point, Polygon, LineString
polygon = Polygon([(1, 1), (1, 3), (3, 3), (3, 1)])
point = Point(2, 2)
line = LineString([(0, 0), (5, 5)])
# 判断线与多边形是否相交
print(line.intersects(polygon))
# 判断点是否在多边形内
print(point.within(polygon))
4.2 缓冲区操作
使用 Shapely 中的缓冲区操作可以对几何对象生成指定缓冲区。缓冲区可以是圆、线或多边形等形状。
from shapely.geometry import Point, Polygon, LineString
point = Point(1, 1)
# 生成一个缓冲区为2的圆
print(point.buffer(2))
polygon = Polygon([(1, 1), (1, 3), (3, 3), (3, 1)])
# 生成一个缓冲区为1的多边形
print(polygon.buffer(1))
4.3 可视化几何对象
使用 Matplotlib 来进行几何对象的可视化,可以很方便地将几何对象可视化。Matplotlib 是 Python 中的一种常用图形库,可以生成各种类型的图形。
from shapely.geometry import Point, Polygon, LineString
from matplotlib import pyplot as plt
point = Point(1, 1)
# 可视化 Point 对象
x, y = point.xy
plt.plot(x, y, 'o')
polygon = Polygon([(1, 1), (1, 3), (3, 3), (3, 1)])
# 可视化 Polygon 对象
x, y = polygon.exterior.xy
plt.plot(x, y)
plt.show()
总结
Shapely 是 Python 的一个功能强大的库,它可以用 Python 中易于阅读的方式操作和分析几何对象,方便了之前复杂的地图和空间分析。对于数据分析和地理信息处理等领域,Shapely 提供了强大的支持。