Shapely中有信封类吗?

问题描述 投票:0回答:4

我发现Java JTS 库中的envelope 类非常方便。包络保存几何体的最小和最大坐标,有时也称为 bounding box

我想得到许多形状点的公共包络线。在 JTS 中,您可以调用 expandToInclude 来逐点放大包络线。

由于 JTS 是 GEOS / shapely 的蓝图,我期待在 shapely 中出现类似的东西,但找不到它(尽管我是这个库的新手)。我知道自己做这件事并不复杂,但我怀疑没有比这更优雅的方法了。你有什么想法吗?

python geometry geos jts shapely
4个回答
27
投票

要创建简单的盒子几何形状,有一个

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

8
投票

不,Shapely 中没有信封类,它依赖于 (minx, miny, maxx, maxy) 元组。如果您想以相同的 JTS 风格进行编程,那么编写一个封装这样的元组的信封类将是微不足道的。

另一种选择:

from shapely.geometry import MultiPoint
print MultiPoint(points).bounds

5
投票

对于来到这里的任何人来说,

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) 元组。


0
投票

对于新来的人,

shapely
确实有envelope
功能(如果我正确理解原文的话)。这需要您创建一个至少有 2 个点的 
MultiPoint
 对象。

MultiPoint([(0, 0), (1, 1)]).envelope

请参阅此处:

https://shapely.readthedocs.io/en/latest/manual.html#object.envelope

返回包含对象的点或最小矩形多边形(边平行于坐标轴)的表示。

© www.soinside.com 2019 - 2024. All rights reserved.