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@geos.refractions.net
http://geos.refractions.net/mailman/listinfo/geos-devel
_______________________________________________
geos-devel mailing list
geos-devel@geos.refractions.net
http://geos.refractions.net/mailman/listinfo/geos-devel