[geos-devel] GEOS SRID Patch
Charlie Savage
cfis at savagexi.com
Tue Sep 18 23:51:35 EDT 2007
So - any comments on this. Will people get upset if I commit it (which
I would like to do)?
Charlie
Charlie Savage wrote:
> I've attached a patch that implements what we discussed yesterday.
>
> More specifically:
>
> * It updates WkbWriter to support outputting SRID values in EWKB/HEX
> format. This is off by default so is backwards compatible.
>
> * Adds getter/setter methods for byte order, dimensions and include SRID
> to WkbWriter - these are needed for the C API changes below.
>
> * Adds new C API interfaces for WktReader, WktWriter, WkbReader,
> WkbWriter. These were added to the end of the *.h file and I did not
> change any existing C apis - so this should be backwards compatible.
>
> Here is what the new WkbWriter interface, which is the most complicated
> one, looks like:
>
> extern GEOSWKBWriter GEOS_DLL *GEOSWKBWriter_create();
> extern void GEOS_DLL GEOSWKBWriter_destroy(GEOSWKBWriter* writer);
>
> extern unsigned char GEOS_DLL *GEOSWKBWriter_write(GEOSWKBWriter*
> writer, const GEOSGeometry* g, size_t *size);
> extern unsigned char GEOS_DLL *GEOSWKBWriter_writeHEX(GEOSWKBWriter*
> writer, const GEOSGeometry* g, size_t *size);
>
> extern int GEOS_DLL GEOSWKBWriter_getOutputDimension(const
> GEOSWKBWriter* writer);
> extern void GEOS_DLL GEOSWKBWriter_setOutputDimension(GEOSWKBWriter*
> writer, int newDimension);
>
> extern int GEOS_DLL GEOSWKBWriter_getByteOrder(const GEOSWKBWriter*
> writer);
> extern void GEOS_DLL GEOSWKBWriter_setByteOrder(GEOSWKBWriter* writer,
> int byteOrder);
>
> extern char GEOS_DLL GEOSWKBWriter_getIncludeSRID(const GEOSWKBWriter*
> writer);
> extern void GEOS_DLL GEOSWKBWriter_setIncludeSRID(GEOSWKBWriter* writer,
> const char writeSRID);
>
> Here is some example ruby code that uses the new api via SWIG:
>
> writer = Geos::WktWriter.new
> writer.includes_srid = true
> writer.output_dimension = 3
> wkb = writer.write(geom)
> hex = writer.write_hex(geom)
>
> The other readers/writers work similarly.
>
> I think this is a better approach then the current API because:
>
> 1. It eliminates the need for the hacky static variables for byte order
> and output dimensions
>
> 2. It gives the client more control - you can create a reader/writer
> and reuse it instead of having a new one created every time you
> read/write a geometry
>
> 3. Its more extensible. For example, at some point we may wish that
> the WktReader supports the EWKT format. That would require doing this:
>
> extern char GEOS_DLL GEOSWKTWriter_getIncludeSRID(const GEOSWKTWriter*
> writer);
> extern void GEOS_DLL GEOSWKTWriter_setIncludeSRID(GEOSWKTWriter* writer,
> const char writeSRID);
>
>
> So I think this patch meets my objectives (more client control, supports
> outputting SRID values), Frank's objectives (get rid of static fields)
> and Paul's (backwards compatible).
>
> I also tested it by exposing the new API via SWIG and updating the
> various Ruby tests I have. So at least every new method has been
> called/verified via a simple set of tests.
>
> Comments? If this looks ok, can I apply it?
>
> Charlie
>
-------------- 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/geos-devel/attachments/20070918/f8c0b2b4/smime.bin
More information about the geos-devel
mailing list