Le vendredi 13 décembre 2013 21:00:33, Paul Ramsey a écrit : > 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.
The fact that getGeometryType() returns type + dimensionality is actually not new to your proposal. The main issue I see is that, now, the OGRwkbGeometryType enumeration contains different ways of encoding the same information. For mortals, a wkbPoint25D is the same as a wkbPointIsoZ. As OGRwkbGeometryType belongs to the OGR public C API, we must be careful when touching it. The direct consequence of introducing new values is that all code that currently accepts OGRwkbGeometryType as an argument will not know what to do with it if it is fed with a wkb*****IsoZ value. Such code is for example the implementation of the CreateLayer() method of all existing OGR drivers that have creation capabilities. The wkbFlatten() macro will not work on IsoZ constants. Perhaps a documentation note saying that the wkb****IsoZ values are only returned by getGeometryType(OGRwkbVariant = wkbVariantIso), and should not be used as values of parameters of any method should be sufficient ? Or have a separate OGRwkbIsoGeometryType enumeration { wkbPointIso, ... wkbGeometryCollectionIso, wkbPointIsoZ, ... wkbGeometryCollectionIsoZ }, a getIsoGeometryType() method that returns it, and the exportToWkb() methods that calls int getGeometryType(OGRwkbVariant eVariant) { return (eVariant == wkbVariantOgc) ? getGeometryType() : getIsoGeometryType(); } I'm not sure what's the best way of addressing that. It looks like the now famous motto "We can't be compatible to MULTIPLE standards at the same time." applies... Even -- Geospatial professional services http://even.rouault.free.fr/services.html _______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev