The QgsGeometry::orientedMinimumBoundingBox seems to implement
the rotating calipers method.  If it does, it should produce
the correct minimum bounding rectangle.
(http://en.wikipedia.org/wiki/Minimum_bounding_box_algorithms)

Håvard

On 08. juni 2017 01:18, Nyall Dawson wrote:
On 6 June 2017 at 18:43, Paul Jobling <[email protected]> wrote:

I am implementing geo in the Kognitio WX2 database using GEOS as a backend,
though I am using my own code for many things. One of those things is
ST_MinimumRectangle, which I have implemented as the rectangle with the
smallest area that encloses the geometry. This is different to the
implementation that I see you have recently added, which extrapolates from
the MinimumDiameter property.



For example, ST_MinimumRectangle ('POLYGON((1 2, 3 0, 5 2, 3 2, 2 3, 1 2))')
has an area of 9.6 (and a perimeter of 12.65) using the MinimumDiameter
implementation, whereas my implementation finds the actual minimum – with an
area of 8 (and perimeter of 11.31) - it is POLYGON ((5 2, 3 0, 1 2, 3 4, 5
2)) rather than POLYGON((1.4 3.2, 0.6 0.8, 4.2 -0.4,5 2, 1.4 3.2)).



My question is why has this implementation been decided on – is it just that
MimimumDiameter is already present? Or is there some other reason due to
some standard?

Did you mean to post this to the GEOS mailing lists instead?

Anyway, some background from QGIS' perspective. A while ago I was
looking for a minimum rect implementation, so ported JTS'
implementation over to GEOS. I then exposed this to the QgsGeometry
API, but to my suprise found that the results were not ideal. At the
time there was some python code in processing which performed a MBR
calculation, and I found that the area of rectangles calculated by
this python code was smaller then JTS' algorithm. Additionally, I
thought it created subjectively 'more aesthetically pleasing'
rectangles (when used as atlas feature extents, and also output the
angle/width/height of these rectangles (the GEOS implementation
doesn't expose this). So I ported the Python code over to c++ as
QgsGeometry::orientedMinimumBoundingBox and updated the processing alg
to use this c++ method instead. The guts of this algorithm sits in
https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsgeometry.cpp#L890
.

Does that clarify?

Nyall
_______________________________________________
QGIS-Developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer


--
Håvard Tveite
Faculty of Sciences and Technology, NMBU
Drøbakveien 31, POBox 5003, N-1432 Ås, NORWAY
Phone: +47 67231548   Web: http://www.nmbu.no
_______________________________________________
QGIS-Developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to