我发现Java JTS 库中的envelope 类非常方便。包络保存几何体的最小和最大坐标,有时也称为 bounding box。
我想得到许多形状点的公共包络线。在 JTS 中,您可以调用 expandToInclude 来逐点放大包络线。
由于 JTS 是 GEOS / shapely 的蓝图,我期待在 shapely 中出现类似的东西,但找不到它(尽管我是这个库的新手)。我知道自己做这件事并不复杂,但我怀疑没有比这更优雅的方法了。你有什么想法吗?
要创建简单的盒子几何形状,有一个
box
函数返回矩形多边形:
from shapely.geometry import box
# box(minx, miny, maxx, maxy, ccw=True)
b = box(2, 30, 5, 33)
b.wkt # POLYGON ((5 30, 5 33, 2 33, 2 30, 5 30))
b.area # 9.0
不,Shapely 中没有信封类,它依赖于 (minx, miny, maxx, maxy) 元组。如果您想以相同的 JTS 风格进行编程,那么编写一个封装这样的元组的信封类将是微不足道的。
另一种选择:
from shapely.geometry import MultiPoint
print MultiPoint(points).bounds
shapely Polygon
现在有bounds
,我相信这相当于JTS envelop
。以下是官方页面的文档
from shapely.geometry import Polygon
polygon = Polygon([(0, 0), (1, 1), (1, 0)])
polygon.bounds
(0.0, 0.0, 1.0, 1.0)
它的 x-y 边界框是一个 (minx, miny, maxx, maxy) 元组。