[gdal-dev] ISO WKB

Paul Ramsey pramsey at cleverelephant.ca
Fri Dec 13 12:51:57 PST 2013


Actually, I think changing the contract on getGeometryType to only ever returning the basic (non-3d) type would clean up driver implementation code a bit. Grepping for it in the drivers, you see a lot of

CPLAssert(wkbFlatten(poGeom->getGeometryType()) == wkbPoint)

and

   || (poLine->getGeometryType() != wkbLineString
    && poLine->getGeometryType() != wkbLineString25D) )

and very few unqualified calls to it.

P.

-- 
Paul Ramsey
http://cleverelephant.ca
http://postgis.net

On December 13, 2013 at 12:00:34 PM, Paul Ramsey (pramsey at cleverelephant.ca) wrote:

I’ve pushed up some work to do this

https://github.com/pramsey/gdal/tree/isowkb

I had to change *two* method signatures, which I don’t really like, both exportToWkb and getGeometryType needed a variant parameter added. The problem is that getGeometryType returns the full WKB type, with dimensionality encoded, which makes it somewhat duplicative of getCoordinateDimension. In an ideal world, getGeometryType would only return the type number, and dimensionally information would be inferred from getCoordinateDimension.

Then only the exportToWkb signature would need a variant parameter.

importFromWkb also was changed to ingest the ISO variant if that’s what it’s fed. No changes to signature required there.

P.

-- 
Paul Ramsey
http://cleverelephant.ca
http://postgis.net

On December 12, 2013 at 2:58:05 PM, Even Rouault (even.rouault at mines-paris.org) wrote:

Le jeudi 12 décembre 2013 23:39:25, Paul Ramsey a écrit :
> I’ve been looking over the code, and I think I can make importFromWkb
> consume ISO inputs with relatively minor changes. (during the geometry
> type determination in the concrete types, it looks easy enough to add a
> little logic to deal with ISO type numbers) For exportToWkb, I’m wondering
> if maybe an optional parameter (wkbVariant?) that defaults to
> wkbVariantOGC would be sufficient?

Sounds good to me. Is "wkbVariantOGC" the variant currently implemented ? Is
our 3D support really compliant with an OGC standard ?

>
> It also seems the wkb reader/writer have little handling for empty geometry
> types. I’d like to add some in, if that’s OK.

Are you sure about that ?

See :

>>> from osgeo import ogr
>>> ogr.CreateGeometryFromWkb(g.ExportToWkb()).ExportToWkt()
'LINESTRING EMPTY'
>>> ogr.CreateGeometryFromWkb(ogr.CreateGeometryFromWkt('LINESTRING
EMPTY').ExportToWkb()).ExportToWkt()
'LINESTRING EMPTY'
>>> ogr.CreateGeometryFromWkb(ogr.CreateGeometryFromWkt('LINESTRING
EMPTY').ExportToWkb()).ExportToWkt()
'LINESTRING EMPTY'
>>> ogr.CreateGeometryFromWkb(ogr.CreateGeometryFromWkt('POLYGON
EMPTY').ExportToWkb()).ExportToWkt()
'POLYGON EMPTY'
>>> ogr.CreateGeometryFromWkb(ogr.CreateGeometryFromWkt('MULTILINESTRING
EMPTY').ExportToWkb()).ExportToWkt()
'MULTILINESTRING EMPTY'
>>> ogr.CreateGeometryFromWkb(ogr.CreateGeometryFromWkt('MULTIPOLYGON
EMPTY').ExportToWkb()).ExportToWkt()
'MULTIPOLYGON EMPTY'
>>> ogr.CreateGeometryFromWkb(ogr.CreateGeometryFromWkt('GEOMETRYCOLLECTION
EMPTY').ExportToWkb()).ExportToWkt()
'GEOMETRYCOLLECTION EMPTY'

The only exception is POINT EMPTY due to the lack of wkb representation for it
:
>>> ogr.CreateGeometryFromWkb(ogr.CreateGeometryFromWkt('POINT
EMPTY').ExportToWkb()).ExportToWkt()
'POINT (0 0)'


>
> Fortunately the only substantial difference for ISO WKB is the type number.
>
> I’m starting an isowkb branch on my git repo to hold this piece of work, I
> don’t think it’ll be very big.
>
> Then I’ll start asking about ‘m’ dimensions :)

That's a fresh new land to explore...

>
> P.
>
> --
> Paul Ramsey
> http://cleverelephant.ca
> http://postgis.net
>
> On December 12, 2013 at 2:33:41 PM, Even Rouault
> (even.rouault at mines-paris.org) wrote:
>
> Le jeudi 12 décembre 2013 21:36:42, Paul Ramsey a écrit :
> > Hey all,
> > Is there already a facility for writing out ISO-standard WKB in GDAL? The
> > biggest difference is the wkbGeometryType number for the case of 3d
> > features. OGR currently uses the old extended SFSQL adopted by PostGIS.
> > ISO (naturally) did their own thing. As far as I can see, there’s no
> > support there now, or is there? P.
>
> Hi Paul,
>
> no, there's no support for ISO WKB yet. We still stick to
> http://home.gdal.org/projects/opengis/twohalfdsf.html
>
> I can imagine we could have exportToISOWkb() method in OGRGeometry*. Or we
> could add an extra boolean argument bISOWkb to the existing exportToWkb().
> Not sure about WkbSize() : does the size of ISO WKB blobs differ from the
> unofficial WKB ?
>
> Even
>
> --
> Geospatial professional services
> http://even.rouault.free.fr/services.html

--
Geospatial professional services
http://even.rouault.free.fr/services.html
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20131213/ba094d01/attachment.html>


More information about the gdal-dev mailing list