[postgis-users] Oriented BBox Efficient computing?

Rémi Cura remi.cura at gmail.com
Thu Oct 30 12:13:21 PDT 2014


A first raw plpgsql implementation :

"Loop" on all angle from convex hull edge.

https://github.com/Remi-C/PPPP_utilities/blob/master/postgis/rc_oriented_bbox_deom_axis.sql

Cheers,

Rémi-C

2014-10-25 17:06 GMT+02:00 Rémi Cura <remi.cura at gmail.com>:

> Of course I plan to use convex hull,
>
> I didn't put it because I can call it at plpgsql level so I consider it to
> be "free".
>
> Cheers,
> Rémi-C
>
> 2014-10-25 16:15 GMT+02:00 Åsmund Tokheim <asmundto at gmail.com>:
>
>> Convex hulls are not only needed as a performance boost. You would need
>> some complicated "find next extreme point"-code in order for the algorithm
>> to behave correctly as well.
>>
>> Åsmund
>>
>>
>> On Sat, Oct 25, 2014 at 3:41 PM, Stephen Woodbridge <
>> woodbri at swoodbridge.com> wrote:
>>
>>> And if you do that on the convex hull rather than the original geometry,
>>> you will have less points to consider while doing the evaluation.
>>>
>>> -Steve
>>>
>>> On 10/25/2014 8:52 AM, Rémi Cura wrote:
>>>
>>>> Found a python version here for minimal area enclosing rectangle
>>>> http://docs.opencv.org/modules/imgproc/doc/
>>>> structural_analysis_and_shape_descriptors.html#minarearect
>>>> It takes a numpy 2D array as point
>>>> That means it is possible to use shapely to read postgis wkb geom, then
>>>> convert it to numpy and use opencv afterward.
>>>>
>>>> There is also this implementation in python (iterate over all possible
>>>> edge angle)
>>>> https://github.com/dbworth/minimum-area-bounding-
>>>> rectangle/blob/master/python/min_bounding_rect.py
>>>>
>>>> To implement rotating caliper,
>>>> I would need some functions like :
>>>>   - compute robust orientation of an edge (easy)
>>>>   - loop on points (should be provided)
>>>>   - area of a rectangle defined by 4 points and 1 angle (=2 caliper
>>>> sets) (easy)
>>>>
>>>> I guess using only the geos_c.h api is not a good solution.
>>>> Where should I look in the cpp geos jungle?
>>>>
>>>> Cheers,
>>>> Rémi-C
>>>>
>>>> 2014-10-25 2:23 GMT+02:00 Åsmund Tokheim <asmundto at gmail.com
>>>> <mailto:asmundto at gmail.com>>:
>>>>
>>>>     As far as I can tell, you shouldn't order and rotate, or you'll be
>>>>     looking at a O(n^2) implementation. During an iteration of
>>>>     http://cgm.cs.mcgill.ca/~orm/rotcal.html
>>>>     <http://cgm.cs.mcgill.ca/%7Eorm/rotcal.html>, it seems like you can
>>>>     make the following assumptions:
>>>>
>>>>     The next angle you should rotate to will be one of the four angles,
>>>>     given by the current extreme points and their next clockwise
>>>>     neighbour. So you should be able to find the next minimum clockwise
>>>>     rotation in O(1) time
>>>>
>>>>     Also whenever you do a clockwise rotation to orient one of the
>>>>     support lines along a new edge, the extreme points for the other
>>>>     support lines stay the same. You only need to update the extreme
>>>>     point that was on the edge we now use as a support line, to its next
>>>>     clockwise point. Using the new extreme points and caliper's angle,
>>>>     you can calculate the bbox area in O(1) time as well.
>>>>
>>>>     Regards
>>>>     Åsmund
>>>>
>>>>
>>>>     On Fri, Oct 24, 2014 at 7:09 PM, Rémi Cura <remi.cura at gmail.com
>>>>     <mailto:remi.cura at gmail.com>> wrote:
>>>>
>>>>         Ok if I understand right,
>>>>         implementing it at the sql level would be :
>>>>
>>>>           - compute convex envelop
>>>>           - order edges by angle
>>>>           - round angle to a given precision, keep distinct values
>>>>           - for each angle, rotate and compute bbox and area
>>>>
>>>>         keep bbox and rotation giving the min area.
>>>>
>>>>         Cheers,
>>>>         Rémi-C
>>>>
>>>>         2014-10-23 18:46 GMT+02:00 Stephen V. Mather
>>>>         <svm at clevelandmetroparks.com <mailto:svm@
>>>> clevelandmetroparks.com>>:
>>>>
>>>>             That would be really cool. Could be a set of functions. It
>>>>             would be interesting to see if the triangulation
>>>>             optimizations listed at
>>>>             http://cgm.cs.mcgill.ca/~orm/rotcal.html
>>>>             <http://cgm.cs.mcgill.ca/%7Eorm/rotcal.html> are faster
>>>> than
>>>>             the JTS/GEOS equivalents.
>>>>
>>>>                Stephen V. Mather
>>>>             GIS Manager
>>>>             (216) 635-3243 <tel:%28216%29%20635-3243> (Work)
>>>>             clevelandmetroparks.com <http://clevelandmetroparks.com>
>>>>
>>>>
>>>>
>>>>
>>>>             ________________________________________
>>>>             From: postgis-users-bounces at lists.osgeo.org
>>>>             <mailto:postgis-users-bounces at lists.osgeo.org>
>>>>             <postgis-users-bounces at lists.osgeo.org
>>>>             <mailto:postgis-users-bounces at lists.osgeo.org>> on behalf
>>>> of
>>>>             Sandro Santilli <strk at keybit.net <mailto:strk at keybit.net>>
>>>>             Sent: Thursday, October 23, 2014 12:36 PM
>>>>             To: PostGIS Users Discussion
>>>>             Subject: Re: [postgis-users] Oriented BBox Efficient
>>>> computing?
>>>>
>>>>             On Thu, Oct 23, 2014 at 06:17:56PM +0200, Rémi Cura wrote:
>>>>              > Wov thanks everybody :
>>>>              > Seems it possible to do it fully geometrically :
>>>>              > http://cgm.cs.mcgill.ca/~orm/rotcal.html
>>>>             <http://cgm.cs.mcgill.ca/%7Eorm/rotcal.html>
>>>>
>>>>             Nice, would be a good candidate for a new PostGIS function
>>>>             (possibly via JTS/GEOS)
>>>>
>>>>             --strk;
>>>>
>>>>                ()   Free GIS & Flash consultant/developer
>>>>                /\ http://strk.keybit.net/services.html
>>>>             _______________________________________________
>>>>             postgis-users mailing list
>>>>             postgis-users at lists.osgeo.org
>>>>             <mailto:postgis-users at lists.osgeo.org>
>>>>             http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-
>>>> users
>>>>             _______________________________________________
>>>>             postgis-users mailing list
>>>>             postgis-users at lists.osgeo.org
>>>>             <mailto:postgis-users at lists.osgeo.org>
>>>>             http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-
>>>> users
>>>>
>>>>
>>>>
>>>>         _______________________________________________
>>>>         postgis-users mailing list
>>>>         postgis-users at lists.osgeo.org <mailto:postgis-users at lists.
>>>> osgeo.org>
>>>>         http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>>>
>>>>
>>>>
>>>>     _______________________________________________
>>>>     postgis-users mailing list
>>>>     postgis-users at lists.osgeo.org <mailto:postgis-users at lists.osgeo.org
>>>> >
>>>>     http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> postgis-users mailing list
>>>> postgis-users at lists.osgeo.org
>>>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>>>
>>>>
>>> _______________________________________________
>>> postgis-users mailing list
>>> postgis-users at lists.osgeo.org
>>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>>
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at lists.osgeo.org
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20141030/7eb49772/attachment.html>


More information about the postgis-users mailing list