[geos-devel] Re: GEOS / SRID / WKB

Martin Davis mbdavis at VividSolutions.com
Thu Feb 2 19:20:12 EST 2006


In JTS we deprecated get/setSRID a few versions ago.   The reason for
doing this was because JTS didn't do anything with the SRID values, so
the feeling was that this was outside the scope of the API and should
not be supported.  The userData concept was introduced at the same time,
and the feeling was that this could be used for SRID management if
desired.

However, following this decision there started to be user pressure to
undeprecate the SRID feature, since it was just too convenient to
eliminate.  Also, while removing it may have been the right "pure"
decision, it does go against the OGC SFS spec.  So, the most recent
versions of JTS have removed the deprecation.

Maybe GEOS should do the same thing?  This should be a pretty trivial
change, I think.

But I agree with strk that starting to add support for reading and
writing SRIDs is fraught with peril, and should be carefully considered.
If a reader is needed to handle SRIDs coming out of a particular format,
perhaps that should be split out as an entirely separate reader class?
That would make it clear that it is tied to a particular extended
format.

Martin Davis, Senior Technical Architect
Vivid Solutions Inc.      www.vividsolutions.com
Suite #1A-2328 Government Street Victoria, B.C. V8T 5G5
Phone: (250) 385 6040 - Local 308 Fax: (250) 385 6046


> -----Original Message-----
> From: geos-devel-bounces at geos.refractions.net 
> [mailto:geos-devel-bounces at geos.refractions.net] On Behalf Of 
> strk at refractions.net
> Sent: February 2, 2006 2:17 AM
> To: geos-devel at geos.refractions.net
> Subject: Re: [geos-devel] Re: GEOS / SRID / WKB
> 
> 
> On Thu, Feb 02, 2006 at 01:26:33AM -0700, Charlie Savage wrote:
> > Hi Strk,
> > 
> > Yes, that sounds like a good way of doing it.  Is this 
> planned for the
> > near future, or should I  put something together if I need it?
> 
> No plans for near future.
> I think that should also include support for M, and
> GEOS is not ready for that yet.
> 
> > What do you think of saving the SRID on input (i.e., accepting
> > extensions)?  That's the part that I need at the moment.
> 
> The Geometry class provides a setUserData/getUserData 
> mechanism for extended informations to be added to a Geometry. 
> Maybe that's a better way to handle this, as the 
> setSRID/getSRID methods have been marked as deprecated.
> 
> --strk;
> 
> 
> > 
> > Thanks,
> > 
> > Charlie
> > 
> > strk at refractions.net wrote:
> > >Charlie, we're playing dirty here, even for Z values.
> > >One thing is accepting "extensions", another thing is 
> spitting them 
> > >out. Z,M and SRID flags are postgis-specific. The next 
> update on OGC 
> > >dox will define a different way to express Z and M for 
> example, and 
> > >won't say anything about SRID.
> > >
> > >The most correct way to support multiple different specs 
> would be to 
> > >provide a method to specify which one to use.
> > >
> > >For example:
> > >
> > >	WKBWriter writer;
> > >	writer.setFormat(DIALECT);
> > >	writer.write(geom);
> > >
> > >Same would apply to WKBReader and to WKT reader/writer.
> > >
> > >--strk;
> > >
> > >On Wed, Feb 01, 2006 at 06:50:07PM -0700, Charlie Savage wrote:
> > >  
> > >>I'd like to be able to read/write SRID information from 
> GEOS using 
> > >>the
> > >>WKB Reader/Writer.  Currently the WKBReader reads the 
> SRID value in an 
> > >>extended WKB format, but then tosses it away.  Attached 
> is a patch that 
> > >>saves the SRID value by calling setSRID on the newly 
> created geometry. 
> > >>
> > >>It would also be nice if WKBWriter could output SRID values.  
> > >>Looking
> > >>through the code, it would be easy enough to write this 
> information 
> > >>out.  However, if a geometry has an SRID, the output WKB 
> value would be 
> > >>one byte longer plus have an SRID flag in the geomtype 
> byte.  So this 
> > >>would break existing code that reads wkb values if a 
> geometry has an 
> > >>SRID.  I'm not sure if this is an issue or not, since I 
> see the SRID 
> > >>field on a geometry is not documented.  Is this a frequently used 
> > >>feature?  An alternative of course would be having a 
> separate method, 
> > >>maybe called writeExtended or some such thing.  
> > >>
> > >>Thanks,
> > >>
> > >>Charlie
> > >>    
> > >
> > >  
> > >>Index: source/io/WKBReader.cpp 
> > 
> >>===================================================================
> > >>RCS file: /home/cvs/postgis/geos/source/io/WKBReader.cpp,v
> > >>retrieving revision 1.15
> > >>diff -u -r1.15 WKBReader.cpp
> > >>--- source/io/WKBReader.cpp	20 Jan 2006 00:59:55 
> -0000	1.15
> > >>+++ source/io/WKBReader.cpp	2 Feb 2006 01:44:16 -0000
> > >>@@ -230,31 +230,43 @@
> > >> 	cout<<"WKB hasSRID: "<<hasZ<<endl;
> > >> #endif
> > >> 
> > >>-	if (hasSRID) dis.readInt(); // skip SRID
> > >>-
> > >>+	int srid = -1;
> > >>+	if (hasSRID) srid = dis.readInt(); // read SRID
> > >> 
> > >> 	// allocate space for ordValues 
> > >> 	if ( ordValues.size() < inputDimension )
> > >> 		ordValues.resize(inputDimension);
> > >> 
> > >>+	Geometry * result;
> > >> 
> > >> 	switch (geometryType) {
> > >> 		case WKBConstants::wkbPoint :
> > >>-			return readPoint();
> > >>+			result = readPoint();
> > >>+			break;
> > >> 		case WKBConstants::wkbLineString :
> > >>-			return readLineString();
> > >>+			result = readLineString();
> > >>+			break;
> > >> 		case WKBConstants::wkbPolygon :
> > >>-			return readPolygon();
> > >>+			result = readPolygon();
> > >>+			break;
> > >> 		case WKBConstants::wkbMultiPoint :
> > >>-			return readMultiPoint();
> > >>+			result = readMultiPoint();
> > >>+			break;
> > >> 		case WKBConstants::wkbMultiLineString :
> > >>-			return readMultiLineString();
> > >>+			result = readMultiLineString();
> > >>+			break;
> > >> 		case WKBConstants::wkbMultiPolygon :
> > >>-			return readMultiPolygon();
> > >>+			result = readMultiPolygon();
> > >>+			break;
> > >> 		case WKBConstants::wkbGeometryCollection :
> > >>-			return readGeometryCollection();
> > >>+			result = readGeometryCollection();
> > >>+			break;
> > >>+		default:
> > >>+			throw new ParseException("Unknown WKB type " +
> > >>geometryType);
> > >> 	}
> > >>-	throw new ParseException("Unknown WKB type " + geometryType);
> > >>+
> > >>+	result->setSRID(srid);
> > >>+	return result;
> > >> }
> > >> 
> > >> Point *
> > >>
> > >>    
> > >
> > >
> > >
> > >
> > >  
> 
> 
> 
> > _______________________________________________
> > geos-devel mailing list
> > geos-devel at geos.refractions.net 
> > http://geos.refractions.net/mailman/listinfo/geos-devel
> 
> 
> -- 
> 
>  +----------------------------------------+
>  | Fight against software patents in EU!  |
>  | www.ffii.org www.nosoftwarepatents.org |  
> +----------------------------------------+
> 
> _______________________________________________
> 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