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; _______________________________________________ geos-devel mailing list geos-devel@geos.refractions.net http://geos.refractions.net/mailman/listinfo/geos-devel