[geos-devel] GEOS SRID Patch
Howard Butler
hobu.inc at gmail.com
Wed Sep 19 00:05:34 EDT 2007
Do we need to increment the API with these additions? What policy
did Sandro have going?
Howard
On Sep 18, 2007, at 10:51 PM, Charlie Savage wrote:
> 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
> _______________________________________________
> geos-devel mailing list
> geos-devel at geos.refractions.net
> http://geos.refractions.net/mailman/listinfo/geos-devel
More information about the geos-devel
mailing list