创建最大宽度/高度比的“斜边界框”?


13

我想从一组输入要素中创建一个最大宽度/高度比(“斜边界框”)的周围矩形,如下图所示:

在此处输入图片说明

例如PostGIS功能ST_EnvelopeST_Box2DFME变压器,BoundingBoxReplacerBoundingBoxAccumulator生成轴平行边界框。

任何使用PostGIS,QGIS或FME的方法的建议都将受到欢迎!


这不是完全相同的副本,因为该人员没有要求适用于FME或PostGIS的解决方案。不过,将上述问题的答案中提到的python脚本放在FME PythonCaller转换器中非常有用。如果我正在运行工作空间,我将发布一个经过稍微修改的脚本的解决方案。
Jochen Schwarze

它不仅不是重复的,而且所引用的问题尚未被接受,还有关于它使用哪种算法以及它是否准确的问题。
John Powell

请参阅下面的答案。您应该能够在FME中执行此操作。您使用的是哪个版本?
Fezter

Answers:


9

这在处理方面可能是过大的,并且可能会有更好的数学解决方案,但是作为一个示例,它可以很简单地作为查询来完成

SELECT 
   id, rotated_by, oblique_bound
  FROM 
     (
     SELECT 
        m.id,
        r rotated_by, 
        ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r) oblique_bound,
        row_number OVER (PARTITION BY id) 
                   ORDER BY ST_Area(ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r))) N
       FROM 
          generate_series(0, 90, 0.1) N(r), my_table m
    ) s
WHERE N = 1;

这将旋转几何图形,创建边界,并在0到90之间的每十分之一度反转旋转。然后,结果是面积最小的边界框。当然,这并不是一种完全准确的方法,并且可能需要根据需要调整系列中的增量值。


实际上,我认为这是一个很好的解决方案。确切的解决方案非常昂贵。您可以在plpgsql中轻松扩展它,以记录最佳的x边界框,如果两个边界框非常接近,则可以放大并进行一些较小的旋转以接近精确的解决方案。总是会有一些边际案例,但这是一个不错的方法。
约翰·鲍威尔,

此外,它还保留了旋转角度:-)
Jochen Schwarze

6

QGIS有一个“最小定向边界框”算法可以做到这一点。


它称为“定向的最小边界框”。您可以从“处理工具箱”>“ QGIS地理算法”>“矢量常规”工具中调用它。
Stefan's

我认为这超出了QGIS 2.14,因为在我们仍在使用的2.14.15LTR中找不到它?
Jochen Schwarze's

@JochenSchwarze它存在于QGIS 2.14.19中。您需要在处理工具箱中搜索。您可以直接在Processing toolbox -> QGIS geoalgorithms -> Vector General tools -> Oriented minimum bounding box
ahmadhanb上

4

您提到的包围盒替代变压器应该能够做到这一点。根据文档,

用其二维边界框或二维最小定向边界框替换特征的几何形状。

该参数允许您选择轴边界或直线边界框。

显然,建议进行增强以包括定向包围盒的较长边的角度。这是安全号码PR#53924。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.