[postgis-devel] OGC WKB/T - PGIS EWKB/T
Martin Daly
Martin.Daly at cadcorp.com
Wed Dec 22 04:49:59 PST 2004
strk,
I was just typing an e-mail to you when this one arrived. I just knew
that I should have started typing sooner (although Paul should hang his
head in shame because I sent him the same thing eight months ago).
The attached document is an adopted (by electronic vote if I recall
correctly) OGC spec that extends the WKB and WKT in SF-SQL etc, to 2.5D.
For OGC members with OGC portal logins, the file can also be found here:
http://portal.opengeospatial.org/files/?artifact_id=909
I hope that this takes some meat off your Christmas fire.
Regards,
Martin
> -----Original Message-----
> From: strk at refractions.net [mailto:strk at refractions.net]
> Sent: 22 December 2004 11:37
> To: postgis-devel at postgis.refractions.net
> Cc: Paul Ramsey
> Subject: [postgis-devel] OGC WKB/T - PGIS EWKB/T
>
>
> With help and support of Mark Cave-Ayland and Markus Schaber
> I've (conceptually) separated OGC-strict WKB and WKT formats
> from Postgis extended versions EWKB and EWKT.
>
> Here is a clarification of the new status, in a format
> suitable for the postgis manual, below you'll find
> implementation notes.
>
> ---8<----------------------------------------------------------
>
> OGC formats only support 2d geometries, and the associated
> SRID is *never* embedded in the input/output representations.
>
> Postgis extended formats are currently superset of OGC one
> (every valid WKB/WKT is a valid EWKB/EWKT) but this might
> vary in the future, specifically if OGC comes out with a new
> format conflicting with our extensions. Thus you SHOULD NOT
> rely on this feature!
>
> Postgis EWKB/EWKT add 3dm,3dz,4d coordinates support and
> embedded SRID information.
>
> Input/Output of these formats are available using the following
> interfaces:
>
> - OGC -
> bytea WKB = asBinary(geometry);
> text WKT = asText(geometry);
> geometry = GeomFromWKB(bytea WKB, [SRID]); // will WARN on EWKB
> geometry = GeometryFromText(text WKT, [SRID]); // will
> WARN on EWKT
>
> - PGIS -
> bytea EWKB = asEWKB(geometry);
> text EWKT = asEWKT(geometry);
> geometry = GeomFromEWKB(bytea EWKB);
> geometry = GeomFromEWKT(text EWKT);
>
> The "canonical forms" of a PostgreSQL type are the
> representations you get with a simple query (without any
> function call) and the one which is guaranteed to be accepted
> with a simple insert, update or copy. For the postgis
> 'geometry' type these are:
>
> - Output -
> binary: EWKB
> ascii: HEXEWKB (EWKB in hex form)
>
> - Input -
> binary: EWKB
> ascii: HEXEWKB|EWKT
>
>
> ---8<----------------------------------------------------------
>
> A few notes about the implementation.
>
> Since our WKT/WKB parsers are really *just* EWKT/EWKB parsers
> the implementation RELIES on the future that users SHOULD NOT
> RELY ON: superset nature of EWKT/EWKB in respect to WKT/WKB.
>
> This means that the representations are always parsed as
> EWKT/EWKB and a second-step check is made for the presence of
> an embedded SRID or higher dimensions in the resulting
> geometry. When these are found the OGC-strict routines
> currently WARN the user about the fact that the corresponding
> extended input functions should be used. We could make that
> an ERROR instead, completely
> *forbidding* EWKB/EWKT in OGC constructors functions.
>
> Similarly, output functions are just LWGEOM to EKWT/EKWB
> converters, so the OGC-strict output procedures just *drop*
> higher dimensions and SRID before feeding the LWGEOM to them,
> obtaining a subset of EWKT/EWKB being WKT/EKB.
>
> As long as WKB/WKT remains a subset of EWKT/EWKB we don't
> have to worry about this, but in case they loose this nature
> we'll have to implement OGC-strict-only parsers/unparsers.
>
> Finally, it has to be noted that all this layers of
> processing reduce the performance of input/outputs
> operations. Here is a
> table of input and output functions ordered by estimated
> speed (number of layers of processing).
>
> - Input -
>
> 1 canon. ascii HEXEWKB
> 1 canon. ascii EWKT
> 1 GeomFromEWKT() - calls canon. ascii EWKT
>
> 2 canon. binary EWKB - converts to HEXEWKB first (can
> be improved)
> 2 GeomFromEWKB() - calls canon. binary EWKB
>
> 3 GeomFromWKB() - calls canon. binary EWKB, checks
> OGC conformance
> 3 GeometryFromText() - calls canon. ascii EWKT, checks
> OGC conformance
>
>
> - Output -
>
> 1 canon. ascii HEXEWKB
> 1 asEWKT()
>
> 2 canon. binary EWKB - converts HEXEWKB to binary (can
> be improved)
> 2 asEWKB() - calls canon. binary EWKB
>
> 3 asBinary() - drops SRID and ZM, calls canon. binary EWKB
> 3 asText() - drops SRID and ZM, calls asEWKT()
>
>
> There are also other issues that might be worth discussing,
> but I think we already have enough meat on the fire (as we
> say in Italy).
>
> Merry Christmas !
>
> --strk;
> _______________________________________________
> postgis-devel mailing list postgis-devel at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-devel
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 99-402r2.pdf
Type: application/octet-stream
Size: 15089 bytes
Desc: 99-402r2.pdf
URL: <http://lists.osgeo.org/pipermail/postgis-devel/attachments/20041222/f8c95036/attachment.obj>
More information about the postgis-devel
mailing list