[Fwd: [Fwd: Re: [postgis-devel] Re: Patch for PostGis Envelope Bug]]
Charlie Savage
cfis at savagexi.com
Fri Sep 21 22:33:18 PDT 2007
And take #3 - missed the SRID values for points and lines in take #2.
Charlie
Charlie Savage wrote:
> Ok - here is take #2. This hopefully is much better - I should have
> done it this way to start.
>
> Note that the 3 methods are now almost 100% identical (LWGEOM_envelope,
> BOX2DFLOAT4_to_LWGEOM, BOX3D_to_LWGEOM). The only difference between
> them is how to get the bounding box (1 line of code at the top of each
> method) and then for envelope to set the SRID. It would make sense to
> have just 1 method that does most of the work, and have the original 3
> wrap it. Would you convert Box3d to Box2dfloat or the other way around?
>
> Anyway, here are the examples again, plus a few more. See how they look.
>
>
> select asText(envelope('POINT(10 10)'::geometry)) AS G1,
> asText(envelope('MULTIPOINT((10 10))'::geometry)) AS G2,
> asText(envelope('MULTIPOINT((10 10), (10 10))'::geometry)) AS G3,
> asText(envelope('MULTIPOINT((10 10), (20 20))'::geometry)) AS G4,
>
> asText(envelope('LINESTRING(10 10, 10 50)'::geometry)) AS G5,
> asText(envelope('LINESTRING(10 50, 50 50)'::geometry)) AS G6,
> asText(envelope('LINESTRING(10 10, 50 50)'::geometry)) AS G7,
>
> asText(envelope('MULTILINESTRING((10 10, 50 50))'::geometry)) AS G8,
> asText(envelope('MULTILINESTRING((10 10, 50 50), (20 20, 70
> 70))'::geometry)) AS G9,
> asText(envelope('MULTILINESTRING((10 10, 10 50), (10 20, 10
> 70))'::geometry)) AS G10,
>
> asText(envelope('POLYGON((10 10, 50 50, 30 30, 20 20, 10
> 10))'::geometry)) AS G11
>
>
> g1 "POINT(10 10)";
> g2 "POINT(10 10)";
> g3 "POINT(10 10)";
> g4 "POLYGON((10 10,10 20,20 20,20 10,10 10))";
> g5 "LINESTRING(10 10,10 50)";
> g6 "LINESTRING(10 50,50 50)";
> g7 "POLYGON((10 10,10 50,50 50,50 10,10 10))";
> g8 "POLYGON((10 10,10 50,50 50,50 10,10 10))";
> g9 "POLYGON((10 10,10 70,70 70,70 10,10 10))";
> g10 "LINESTRING(10 10,10 70)";
> g11 "POLYGON((10 10,10 50,50 50,50 10,10 10))"
>
>
> Martin Davis wrote:
>> Charlie:
>>
>> If the examples you give in the email below are actually what your
>> Envelope patch is doing, this is WRONG!
>>
>> The envelope of non-horizontal/non-vertical linestrings will always be
>> a Polygon, not a Linestring. Only exactly horizontal or vertical
>> linestrings will have an envelope which is itself a LineString.
>>
>> The way this should be implemented is to first compute the true
>> extents of the geometry. Then check the X &Y extents and return the
>> appropriate geometry constructed from the extent ordinates. The JTS
>> code that does this is:
>>
>>
>> public Geometry toGeometry(Envelope envelope)
>> {
>> // null envelope - return empty point geometry
>> if (envelope.isNull()) {
>> return createPoint((CoordinateSequence)null);
>> }
>> // point?
>> if (envelope.getMinX() == envelope.getMaxX() && envelope.getMinY()
>> == envelope.getMaxY()) {
>> return createPoint(new Coordinate(envelope.getMinX(),
>> envelope.getMinY()));
>> }
>> // vertical or horizontal line?
>> if (envelope.getMinX() == envelope.getMaxX()
>> || envelope.getMinY() == envelope.getMaxY()) {
>> return createLineString(new Coordinate[]{
>> new Coordinate(envelope.getMinX(), envelope.getMinY()),
>> new Coordinate(envelope.getMaxX(), envelope.getMaxY())
>> });
>> }
>>
>> return createPolygon(createLinearRing(new Coordinate[]{
>> new Coordinate(envelope.getMinX(), envelope.getMinY()),
>> new Coordinate(envelope.getMaxX(), envelope.getMinY()),
>> new Coordinate(envelope.getMaxX(), envelope.getMaxY()),
>> new Coordinate(envelope.getMinX(), envelope.getMaxY()),
>> new Coordinate(envelope.getMinX(), envelope.getMinY())
>> }), null);
>> }
>>
>>
>> -------- Original Message --------
>> Subject: [Fwd: Re: [postgis-devel] Re: Patch for PostGis Envelope
>> Bug]
>> Date: Fri, 21 Sep 2007 16:11:51 -0700
>> From: Kevin Neufeld <kneufeld at refractions.net>
>> To: martin Davis <mbdavis at refractions.net>
>>
>>
>>
>>
>>
>> -------- Original Message --------
>> Subject: Re: [postgis-devel] Re: Patch for PostGis Envelope Bug
>> Date: Fri, 21 Sep 2007 15:05:54 -0600
>> From: Charlie Savage <cfis at savagexi.com>
>> Reply-To: PostGIS Development Discussion
>> <postgis-devel at postgis.refractions.net>
>> To: PostGIS Development Discussion
>> <postgis-devel at postgis.refractions.net>
>> References: <46E09936.5030008 at savagexi.com>
>> <9245.1189132424 at sss.pgh.pa.us> <46E0E199.40302 at savagexi.com>
>> <46E13929.5090400 at vadose.org> <46E1739D.6030800 at savagexi.com>
>> <46E181A2.6050309 at refractions.net> <46E18A30.2000002 at savagexi.com>
>> <46E18B76.4000508 at refractions.net> <46E39FDC.3040005 at savagexi.com>
>> <46F09E3B.4080209 at savagexi.com>
>> <7F743A6F-517E-498F-A3D7-23793727D60A at refractions.net>
>> <46F43097.4010503 at savagexi.com>
>>
>>
>>
>> And here is an example of its use:
>>
>> select asText(envelope('POINT(10 10)'::geometry)),
>> asText(envelope('MULTIPOINT((10 10))'::geometry)),
>> asText(envelope('MULTIPOINT((10 10), (20 20))'::geometry)),
>>
>> asText(envelope('LINESTRING(10 10, 50 50)'::geometry)),
>> asText(envelope('MULTILINESTRING((10 10, 50 50))'::geometry)),
>> asText(envelope('MULTILINESTRING((10 10, 50 50), (20 20, 70
>> 70))'::geometry)),
>>
>> asText(envelope('POLYGON((10 10, 50 50, 30 30, 20 20, 10
>> 10))'::geometry))
>>
>>
>> "POINT(10 10)";
>> "POINT(10 10)";
>> "POLYGON((10 10,10 20,20 20,20 10,10 10))";
>> "LINESTRING(10 10,50 50)";
>> "LINESTRING(10 10,50 50)";
>> "POLYGON((10 10,10 70,70 70,70 10,10 10))";
>> "POLYGON((10 10,10 50,50 50,50 10,10 10))"
>>
>> Charlie
>>
>>
>> Charlie Savage wrote:
>>> Hi Paul,
>>>
>>> Paul Ramsey wrote:
>>>> Applied to trunk. I don't see any way it can do harm.
>>>
>>> Here is patch to the patch (thus it applies against the trunk).
>>>
>>> It adds in support for returning a LineString if envelope is called
>>> on a line string (thus making this similar to the bbox to geom
>>> conversion routines).
>>>
>>> Also, it fixes a bug I introduced in the last version (not checking
>>> to see if the deserialized geom should be freed).
>>>
>>> Thanks,
>>>
>>> Charlie
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> postgis-devel mailing list
>>> postgis-devel at postgis.refractions.net
>>> http://postgis.refractions.net/mailman/listinfo/postgis-devel
>>
>>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> postgis-devel mailing list
> postgis-devel at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-devel
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: postgis_envelope.patch
URL: <http://lists.osgeo.org/pipermail/postgis-devel/attachments/20070921/52b539b8/attachment.ksh>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3237 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.osgeo.org/pipermail/postgis-devel/attachments/20070921/52b539b8/attachment.bin>
More information about the postgis-devel
mailing list