[geos-devel] [Fwd: [Boost-users] [boost] Formal Review: Boost.Polygon
starts today August 24, 2009]
Barend Gehrels
Barend.Gehrels at geodan.nl
Wed Sep 2 05:39:32 EDT 2009
Martin Davis wrote:
> One thing to make clear - GEOS does not alway require allocations to
> be done pointwise. The CoordinateSequence interface and various
> subclasses provide the option of allocating all storage for a list of
> points in a single allocation.
OK, sorry for my misunderstanding.
I just debugged the Geos area routine, what could then be the reason
that it is relatively slow? It might be that it is accessed as a vector,
indeed, but not as an iterator, so getting points using "return
(*vect)[pos]" is not efficient as it could be using iterators. Besides
that it is probably no problem to make the getAt function inline.
>
> I would certainly be curious to see how the algorithmic component of
> GEOS compares to GGL (or any other library).
The GGL overlay algorithm will be described in a paper. It is a modern
variant of the classic Weiler-Atherton algorithm.
> The JTS/GEOS predicate and overlay algorithms were developed with the
> primary goal being first generality and then performance. So no doubt
> there's better ways of doing things.
Actually the GGL algorithm is generic as well, in the sense that it is
able to overlay polygons and polygon/rectangle (clipping) with the same
algorithm. The only difference is getting the intersections, which is
more efficient for the rectangle case. Also intersection/union are
implemented in one algorithm.
> In the GEOS algorithms at least I don't see any way of avoiding
> dynamic allocation, since there's no way to predict a priori how many
> line segment intersections will be found, or how what the structure of
> the output geometry is. Does GGL avoid this problem in some way?
Yes. It will be described, but in short: we don't insert the found
intersection points into the polygons (as done in many algorithms, but I
don't know about GEOS) but register them separately. That saves a copy,
plus many inserts (shifts). However, it requires somewhat more
bookkeeping. So intersected polygons are assembled in the end, in
between there are no large pieces of memory allocation.
By the way, everyone is of course invited to check the geos comparison
source files, it might be that I've done something not in the most
efficient way. It is the intention to have it as efficient as possible,
of course. Sources are at boost SVN now:
http://svn.boost.org/svn/boost/sandbox/ggl/other/comparisons/
Regards, Barend
More information about the geos-devel
mailing list