[geos-devel] GEOS with PostGIS - how to
David Blasby
dblasby at refractions.net
Tue May 27 18:34:47 EDT 2003
We have gotten GEOS to work (with exceptions) with PostGIS.
The solution is quite simple - you have to link the C++ standard library
into postgresql. For a complete technical discussion on this, see the
previous messages in the GEOS mailing list.
THIS IS EXPERIMENTAL
Linking stdc++ (the c++ standard library) into postgresql is done by
setting the LDFLAGS environment variable and running configure.
1. move to your postgresql source directory
2. LDFLAGS=-lstdc++ ./configure <whatever options you want to compile
postgresql with>
3. make clean;make; make install
4. verify that your postmaster has libstdc++:
[postgres at hydra init.d]$ ldd /opt/pgsql73/bin/postmaster
libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3
(0x40028000)
libz.so.1 => /lib/libz.so.1 (0x40075000)
libreadline.so.4.2 => /lib/libreadline.so.4.2 (0x40084000)
libncurses.so.5 => /lib/libncurses.so.5 (0x400ae000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x400ef000)
libresolv.so.2 => /lib/libresolv.so.2 (0x4011c000)
libnsl.so.1 => /lib/libnsl.so.1 (0x4012e000)
libdl.so.2 => /lib/libdl.so.2 (0x40144000)
libm.so.6 => /lib/libm.so.6 (0x40147000)
libc.so.6 => /lib/libc.so.6 (0x40169000)
libgpm.so.1 => /usr/lib/libgpm.so.1 (0x402a6000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
NOTICE "libstdc++-libc6.2-2.so.3" in the list.
Next you need the most up-to-date postgis.
1. checkout the postgis CVS archive
2. compile and install
3. there are several new GEOS related functions, so I suggest you run
the postgis.sql install file into a new database.
To test:
dblasby=# select disjoint('LINESTRING(0 0,0 0)'::geometry, 'LINESTRING(0
0,0 1)'::geometry );
ERROR: GEOS disjoin() threw an error!
More test are available:
1. cd to the postgis regress directory
2. load the isvalid test data with something like:
psql dblasby < isvalid_test
3. load the relate test data with something like:
psql dblasby < relate_test
4. you should see two new tables in your database 'validtest' and
'relate_test'.
5. run these tests - you should get the same answers:
dblasby=# select count(*) from relate_test WHERE relate (g1,g2) <> result;
count
-------
0
(1 row)
dblasby=# select count(*) from relate_test WHERE relate (g1,g2) = result;
count
-------
555
(1 row)
dblasby=# select count(*) from validtest WHERE isvalid(g) = result;
count
-------
799
(1 row)
dblasby=# select count(*) from validtest WHERE isvalid(g) <> result;
count
-------
7
(1 row)
NOTE: the 7 "errors" in the validtest are okay - repeated points in JTS
1.2 are invalid, but valid in 1.3. GEOS is currently based on JTS 1.2,
but the test results are based on JTS 1.3.
Please report to this list that you have successfully installed it and
it works on your system.
dave
ps. I have not changed how postgis includes the new functions like
norman suggested in "RE: [geos-devel] Re: [postgis-users] GEOS /
Predicates Update" to the postgis mailing list. Thats a todo.
More information about the geos-devel
mailing list