[geos-devel] Extent-limited graph building ?

Sandro Santilli strk at keybit.net
Fri Sep 19 08:31:50 PDT 2014


On Fri, Sep 19, 2014 at 05:24:12PM +0200, Sandro Santilli wrote:
> On Fri, Sep 19, 2014 at 04:45:58PM +0200, Sandro Santilli wrote:
> > On Thu, Sep 18, 2014 at 10:41:46AM -0700, Martin Davis wrote:
> > > Funny, this recently occurred to me as well.
> > > 
> > > The first place I'd look for introducing BBOX limiting is in the noding
> > > phase.  The selfNode creation (in GeometryGraph) could just checking edges
> > > within the overlap bounding box.  (This would work for intersection, but
> > > technically not difference since then the output would not be fully noded,
> > > which breaks the current JTS contract).
> > > 
> > > The computeEdgeIntersections could probably be limited to a BBOX as well.
> > > 
> > > Are you seeing data situations where this approach would produce a
> > > significant win?
> > 
> > So back to this, reducing the work of computeEdgeIntersections so to
> > only consider edges that intersect the target extent brings down the
> > time of the overlay operation I'm looking at from ~15 to ~9.5 seconds.
> > All existing testcases still succeed (also using the first geometry's
> > envelope for the DIFFERENCE op) so this sounds like a safe optimization.
> > 
> > Extending this to self-nodes computation (and copyPoint too?) should
> > speed things further up.
> 
> It does, time is down to ~3 seconds now, despite edges selection happening
> twice (once in computeEdgeIntersections and once in computeSelfNodes).
> Time to add it to copyPoints, I guess. But then we'd better not to add
> those elements in the graph from the start, to save even more time.

One note: with computeSelfNodes skipping non-overlapping edges there's
indeed a failure in a testcase computing DIFFERENCE. As I'm looking at
speeding up clipping for now I'll just enable the optimization for
INTERSECTION and move on.

The code is still in "ext-limited-graph" branch.

--strk;

> > I pushed the GEOS code of this in the "ext-limited-graph" branch in
> > my github fork (if anyone wants to take a look).
> > 
> > For comparison, the RectangleIntersection based code completes the
> > operation in 40ms (!!). That's really hard to beat.
> > 
> > --strk;
> > 
> > > On Thu, Sep 18, 2014 at 10:10 AM, Sandro Santilli <strk at keybit.net> wrote:
> > > 
> > > > Martin,
> > > > in order to speed up intersection overlay operation, would it work to
> > > > limit the GeometryGraph building by a bounding box ?
> > > >
> > > > The current interface of GeometryGraph does not allow it, but from the
> > > > point of view of the algorithm, do you think it could work ?
> > > > If could speed up both intersection and difference.
> > > >
> > > > Basically OverlayOp and GeometryGraph would need to take an optional
> > > > Envelope for limiting operations.
> > > >
> > > > What do you think ?
> > > >
> > > > --strk;
> > > >
> > > >  ()  ASCII ribbon campaign  --  Keep it simple !
> > > >  /\  http://strk.keybit.net/rants/ascii_mails.txt
> > > >
> 
> -- 
> 
>  ()  ASCII ribbon campaign  --  Keep it simple !
>  /\  http://strk.keybit.net/rants/ascii_mails.txt  

-- 

 ()  ASCII ribbon campaign  --  Keep it simple !
 /\  http://strk.keybit.net/rants/ascii_mails.txt  


More information about the geos-devel mailing list