[geos-devel] Envelope of empty Polygon
strk at refractions.net
strk at refractions.net
Fri Mar 31 05:21:44 EST 2006
On Fri, Mar 31, 2006 at 08:14:03AM +0200, Mateusz Å?oskot wrote:
> Hi,
>
> I'm bringing next subject to discuss.
>
> The main question is what should be returned by getEnvelope()
> called on empty polygon?
>
> Here is simple use case:
>
> GeometryFactory factory(...);
> //...
>
> // create empty polygon
> Polygon* poly = factory.createPolygon();
>
> // request for its envelope
> Geometry* geo = 0;
> geo = poly->getEnvelope();
> geo->isEmpty(); // <--- THE PROBLEM
>
>
> As I revealed, when exterior ring is empty geometry,
> getEnvelope() returns or creates instance of envelope object.
> This object is initialized by Envelope::setToNull().
> So, returned envelope for empty polygon has following coordinates:
> minx = -1.0
> maxx = 0.0
> miny = -1.0
> maxx = 0.0
>
> Is this correct behaviour?
> Is empty polygon assumed to return non-empty envelope as above?
Doens't seem correct.
Envelope does have a NULL representation, which is
minx > maxx
miny > maxy
See Envelope::isNull()
Similar approach is used for Coordinate
(see ::setNull, ::getNullCoordinate)
Generally speaking I'm sure NULL pointers would be much more
appropriately used.
Also, for Geometry, check out getEnvelopeInternal().
That should return a pointer to internal cache, thus caller
wouldn't need to free the result.
JTS getEnvelope() is really what getEnvelopeInternal() is for
GEOS.
I'd drop the copying one and rename the *Internal() one.
Again: exposed interface (in installed headers).
--strk;
More information about the geos-devel
mailing list