Hello, I've problems to parse WKB with GEOS. Here is my sample application:
#include <iostream> #include <string> #include <vector> #include <sstream> #include <iomanip> #include <pqxx/pqxx> #include <proj_api.h> #include <geos.h> using namespace std; using namespace pqxx; using namespace geos; projPJ pj; int main (int argc, char **argv) { result R; try { connection Conn ("dbname=osm"); work transaction (Conn, "OSMTransaction"); R = transaction.exec("SELECT name,AsBinary(way) FROM planet_osm_point WHERE place = 'city' and name != ''"); } catch (pqxx::broken_connection) { cerr << "No connection to database" << endl; } if (!(pj = pj_init_plus ("+datum=WGS84 +to +proj=utm +zone=32 +datum=WGS84"))) exit(1); for (result::const_iterator i = R.begin(); i != R.end(); ++i) { cout << "#City: " << (*i)[0] << endl; pqxx::binarystring b ((*i)[1]); stringstream binaryStream (ios_base::binary|ios_base::in|ios_base::out); binaryStream << b.str(); GeometryFactory geoFactory; WKBReader wkbReader (geoFactory); Geometry *geom; try { geom = wkbReader.read (binaryStream); } catch (geos::ParseException*) { cerr << "Parse exception" << endl; exit (1); } cout << geom->getGeometryType() << endl; cout << "getNumPoints(): " << geom->getNumPoints () << endl; const Coordinate *coord = geom->getCoordinate (); cout << "x/y: " << coord->x << "/" << coord->y << endl; } return 0; } It works in most cases, but sometimes the result values are broken or I get a segfault. So I used valgrind to get some more information. I got this as result: ==17755== Invalid read of size 4 ==17755== at 0x41327FE: geos::PrecisionModel::makePrecise(double) const (in /usr/lib/libgeos.so.2.2.3) ==17755== by 0x401D5D5A: ??? ==17755== Address 0x460A544 is 4 bytes inside a block of size 16 free'd ==17755== at 0x40212FA: operator delete(void*) (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17755== by 0x4132695: geos::PrecisionModel::~PrecisionModel() (in /usr/lib/libgeos.so.2.2.3) ==17755== by 0x42F083B: (below main) (in /lib/libc-2.5.so) ==17755== ... and this as often as I read coordinates. Any ideas why PrecisionModel has this problem? A problem in GEOS WKBParser or my application? regards Andreas _______________________________________________ geos-devel mailing list geos-devel@geos.refractions.net http://geos.refractions.net/mailman/listinfo/geos-devel