<HTML dir=ltr><HEAD><TITLE>Re: [postgis-users] Transform overlapping polygons to non-overlapping?</TITLE>
<META http-equiv=Content-Type content="text/html; charset=unicode">
<META content="MSHTML 6.00.2900.3354" name=GENERATOR></HEAD>
<BODY>
<DIV id=idOWAReplyText25254 dir=ltr>
<DIV dir=ltr><FONT face=Arial color=#000000 size=2>Brent,</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>This might help reduce your problem set a bit.&nbsp; You don't care about the ones that don't overlap anything right.&nbsp; Hopefully there are a lot of those.&nbsp; So use the old LEFT JOIN trick</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>Create new table</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>INSERT INTO newtable(gid,the_geom)</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>SELECT a.gid, a.the_geom</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>FROM oldtable a LEFT JOIN oldtable b ON (a.gid &lt;&gt; b.gid AND ST_Overlaps(a.the_geom, b.the_geom))</FONT></DIV>
<DIV dir=ltr>WHERE b.gid IS NULL</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>Next step create unique index on gid on new table</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>DELETE FROM oldtable</DIV>
<DIV dir=ltr>WHERE gid IN(SELECT gid FROM newtable)</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>Now all you are left to work with are your polygons that overlap each other.</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>With those follow Kevin's lead by creating&nbsp; an intermediary workspace table</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>Hope that helps,</DIV>
<DIV dir=ltr>Regina</DIV></DIV>
<DIV dir=ltr><BR>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>From:</B> postgis-users-bounces@postgis.refractions.net on behalf of Kevin Neufeld<BR><B>Sent:</B> Wed 7/16/2008 2:24 PM<BR><B>To:</B> PostGIS Users Discussion<BR><B>Subject:</B> Re: [postgis-users] Transform overlapping polygons to non-overlapping?<BR></FONT><BR></DIV>
<DIV>
<P><FONT size=2>Ah, another reason to have topology finished in PostGIS. If only, eh?<BR><BR>Brent, what if you created a plpgsql script that simply iterated through<BR>a table of source polygons and slowly inserted them one at a time into a<BR>target table by:<BR><BR>foreach poly in source table<BR><BR>&nbsp;&nbsp; 1. move all bounding box overlaps in target table with current poly<BR>into a temp table.<BR>&nbsp;&nbsp; 2. take all polygons from your temp table and union the current poly<BR>using the techniques described on the wiki and what Regina suggested.<BR>&nbsp;&nbsp; 3. insert the individual polygons from the overlay back into the<BR>target table using ST_Dump.<BR><BR>end foreach.<BR><BR>It might take a while, but in the end, you would have a single<BR>topologically correct (non-overlapping) polygonal table.<BR><BR>You may want to insert the geometries ordered by some x,y grid so that<BR>your working area will more likely be cached in memory.<BR><BR>Also, you may want to perform vacuum once in while on your target table.<BR>&nbsp; It could bloat really quickly.&nbsp; So don't iterate through all the<BR>source polygons all at once.<BR><BR>Cheers,<BR>Kevin<BR><BR><BR>Brent Fraser wrote:<BR>&gt; Regina,<BR>&gt;<BR>&gt;&nbsp; I'm not convinced ST_Union is the way to go (using ST_Overlaps OR<BR>&gt; ST_Intersects as a condition).&nbsp; Basically I want to iterate over the<BR>&gt; collection (recursively?) clipping one polygon to another until I'm left<BR>&gt; with no overlapping (or intersecting) polygons (planar topology).&nbsp; This<BR>&gt; is sightly more complicated than the way I originally posed the problem<BR>&gt; (I wanted to created slivers from the overlapping areas to get planar<BR>&gt; topology).<BR>&gt;<BR>&gt;&nbsp; A little background:<BR>&gt;<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp; My polygons represent a classification of vegetation of a large area<BR>&gt; of interest.&nbsp; In theory any point in the area of interest must fall in<BR>&gt; one and only one polygon.&nbsp; Due to an artifact of my image segmentation<BR>&gt; process, my polygons currently have slight overlap which I need to<BR>&gt; "dissolve" (and I don't care which polygon the overlap sliver gets<BR>&gt; dissolved into).<BR>&gt;<BR>&gt; Thanks!<BR>&gt; Brent.<BR>&gt; Paragon Corporation wrote:<BR>&gt;&gt; One more question -&nbsp; you sure you want ST_Overlaps and not ST_Intersects.<BR>&gt;&gt; If one geometry sits completely inside another, it is not considered to<BR>&gt;&gt; overlap, but they do intersect.<BR>&gt;&gt; -----Original Message-----<BR>&gt;&gt; From: postgis-users-bounces@postgis.refractions.net<BR>&gt;&gt; [<A href="mailto:postgis-users-bounces@postgis.refractions.net">mailto:postgis-users-bounces@postgis.refractions.net</A>] On Behalf Of<BR>&gt;&gt; Paragon<BR>&gt;&gt; Corporation<BR>&gt;&gt; Sent: Wednesday, July 16, 2008 12:41 PM<BR>&gt;&gt; To: 'PostGIS Users Discussion'<BR>&gt;&gt; Subject: RE: [postgis-users] Transform overlapping polygons to<BR>&gt;&gt; non-overlapping?<BR>&gt;&gt;<BR>&gt;&gt; Brent,<BR>&gt;&gt;<BR>&gt;&gt;&nbsp; INSERT INTO temp3_lines (the_geom)&nbsp;&nbsp;&nbsp;&nbsp; SELECT ST_ExteriorRing(<BR>&gt;&gt; ST_GeometryN(the_geom, generate_series(1,<BR>&gt;&gt; ST_NumGeometries(the_geom)))) AS the_geom FROM temp2_polys;<BR>&gt;&gt;<BR>&gt;&gt; Can be done more efficiently using ST_Dump<BR>&gt;&gt;<BR>&gt;&gt;&nbsp; INSERT INTO temp3_lines (the_geom)&nbsp;&nbsp;&nbsp;&nbsp; SELECT<BR>&gt;&gt; ST_ExteriorRing((ST_Dump(the_geom)).geom) AS the_geom FROM<BR>&gt;&gt; temp2_polys;<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; Regarding the unioning I mentioned - I thought about more why what I<BR>&gt;&gt; proposed had still overlapping polygons and I realized its because the<BR>&gt;&gt; grouping I proposed needs to be A recursive query (which means you'd<BR>&gt;&gt; need to<BR>&gt;&gt; wrap it in an sql or plpgsql<BR>&gt;&gt; function)&nbsp; since as it stands it would only find the first root<BR>&gt;&gt; overlaps and<BR>&gt;&gt; not the A overlap B overlap C&nbsp; (e.g. c would not be in the same<BR>&gt;&gt; grouping and<BR>&gt;&gt; A,B if it doesn't also overlap with A) .<BR>&gt;&gt;<BR>&gt;&gt; So two ways<BR>&gt;&gt; 1) Write recursive query (using a plpgsql or sql helper function) -<BR>&gt;&gt; which I<BR>&gt;&gt; haven't given much thought to the most efficient way of doing that<BR>&gt;&gt;<BR>&gt;&gt; Or<BR>&gt;&gt;<BR>&gt;&gt; 2) Repeat the union thing I mentioned over and over again until you<BR>&gt;&gt; have a<BR>&gt;&gt; set that has no more overlapping polygons.<BR>&gt;&gt;<BR>&gt;&gt; Then you do a ST_Dump to get back individual polygons.<BR>&gt;&gt;<BR>&gt;&gt; Hope that helps,<BR>&gt;&gt; Regina<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; -----Original Message-----<BR>&gt;&gt; From: postgis-users-bounces@postgis.refractions.net<BR>&gt;&gt; [<A href="mailto:postgis-users-bounces@postgis.refractions.net">mailto:postgis-users-bounces@postgis.refractions.net</A>] On Behalf Of Brent<BR>&gt;&gt; Fraser<BR>&gt;&gt; Sent: Wednesday, July 16, 2008 12:13 PM<BR>&gt;&gt; To: PostGIS Users Discussion<BR>&gt;&gt; Subject: Re: [postgis-users] Transform overlapping polygons to<BR>&gt;&gt; non-overlapping?<BR>&gt;&gt;<BR>&gt;&gt; To all,<BR>&gt;&gt;<BR>&gt;&gt;&nbsp;&nbsp; My quest for non-overlapping polygons continues:<BR>&gt;&gt;<BR>&gt;&gt; I started with a table (temp_polys) of 3253 polygons (with some overlap)<BR>&gt;&gt; with a "class" attribute.<BR>&gt;&gt;<BR>&gt;&gt; To get rid of overlapping polys with the same class value:<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; CREATE TABLE temp2_polys as SELECT class, ST_UNION(the_geom) from<BR>&gt;&gt; temp_polys GROUP BY class;<BR>&gt;&gt;<BR>&gt;&gt; This created a table of 32 multi-polygons (grouped by class).&nbsp; I still<BR>&gt;&gt; have<BR>&gt;&gt; to remove the overlap between polygons with different class values, so my<BR>&gt;&gt; plan is to convert to linestrings, node the linestrings, polygonize, and<BR>&gt;&gt; (re)assign the class value using StarSpan. So first:<BR>&gt;&gt;<BR>&gt;&gt; Convert to linestrings:<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; INSERT INTO temp3_lines (the_geom) SELECT ST_ExteriorRing(<BR>&gt;&gt; ST_GeometryN(the_geom, generate_series(1,<BR>&gt;&gt; ST_NumGeometries(the_geom)))) AS<BR>&gt;&gt; the_geom FROM temp2_polys;<BR>&gt;&gt;<BR>&gt;&gt; This produced 1768 linestring records.&nbsp; Attempting to node the<BR>&gt;&gt; linestrings:<BR>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; INSERT INTO temp4_lines (the_geom) SELECT St_Union(the_geom) AS<BR>&gt;&gt; the_geom FROM temp3_lines;<BR>&gt;&gt;<BR>&gt;&gt; Yikes!&nbsp; This query ran for 4.5 hours and crashed Postgres (1.8 gHz<BR>&gt;&gt; Windows<BR>&gt;&gt; XP, Postgres 8.3.3, PostGIS 1.3.3).<BR>&gt;&gt;<BR>&gt;&gt; I dumped the temp3_lines table into a shapefile and asked OpenJump to<BR>&gt;&gt; node<BR>&gt;&gt; AND polygonize.&nbsp; That took 24 seconds.<BR>&gt;&gt;<BR>&gt;&gt; Since the above data is a small sub-set of my 1.2 million polygons,<BR>&gt;&gt; OpenJump<BR>&gt;&gt; is not really a solution for cleaning the data all at once.&nbsp; Looks<BR>&gt;&gt; like some<BR>&gt;&gt; scripting is in order...<BR>&gt;&gt;<BR>&gt;&gt; Brent<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; Brent Fraser wrote:<BR>&gt;&gt;&gt; Regina,<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt;&nbsp; The "SELECT MAX..." query didn't work on my sub-set of 12800<BR>&gt;&gt;&gt; polygons.&nbsp; It created 12643 polygons some of which overlap (I<BR>&gt;&gt;&gt; expected more, not less, than the original).<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt;&nbsp; I may try converting to linestrings, creating one "minimum bounding<BR>&gt;&gt;&gt; rectangle" for the entire dataset, then doing an intersect of the<BR>&gt;&gt;&gt; lines with the MBR.&nbsp; In my case this would be ok as there are not<BR>&gt;&gt;&gt; attributes on the polygons yet.<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; Thanks!<BR>&gt;&gt;&gt; Brent<BR>&gt;&gt;&gt;<BR>&gt;&gt;&gt; Obe, Regina wrote:<BR>&gt;&gt;&gt;&gt; Brent,<BR>&gt;&gt;&gt;&gt;&nbsp;<BR>&gt;&gt;&gt;&gt; I guess it really depends on how exactly you want to achieve<BR>&gt;&gt;&gt;&gt; non-overlapping.<BR>&gt;&gt;&gt;&gt; If for example you are basing it on some sort of attribute and all<BR>&gt;&gt;&gt;&gt; your overlapping polygons are valid<BR>&gt;&gt;&gt;&gt;&nbsp;<BR>&gt;&gt;&gt;&gt; Then a simple<BR>&gt;&gt;&gt;&gt;&nbsp;<BR>&gt;&gt;&gt;&gt; SELECT ST_Union(the_geom) As newgeom, field1 FROM sometable GROUP BY<BR>&gt;&gt;&gt;&gt; field1<BR>&gt;&gt;&gt;&gt;&nbsp;<BR>&gt;&gt;&gt;&gt; I think will guarantee non-overlapping polygons because as part of<BR>&gt;&gt;&gt;&gt; the process of ST_Union - it would irradicate the overlapping<BR>&gt;&gt;&gt;&gt; regions to just create one.&nbsp; That is part of the reason why its so<BR>&gt;&gt;&gt;&gt; much slower than ST_Collect for example.<BR>&gt;&gt;&gt;&gt;&nbsp;<BR>&gt;&gt;&gt;&gt; For your exact case below - you would union all the overlapping<BR>&gt;&gt;&gt;&gt; polygons together which could be really slow depending on how many<BR>&gt;&gt;&gt;&gt; overlap. The query I would write to achieve that would be something<BR>&gt;&gt;&gt;&gt; like this<BR>&gt;&gt;&gt;&gt;&nbsp;<BR>&gt;&gt;&gt;&gt; SELECT MAX(a.gid) As newgid, ST_Union(a.the_geom) As the_geom FROM<BR>&gt;&gt;&gt;&gt; poly a GROUP BY (SELECT MAX(r.gid) FROM poly r<BR>&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp; WHERE (a.gid = r.gid OR ST_Overlaps(r.the_geom, a.the_geom)));<BR>&gt;&gt;&gt;&gt;&nbsp;<BR>&gt;&gt;&gt;&gt; Hope that helps,<BR>&gt;&gt;&gt;&gt; Regina<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; ---------------------------------------------------------------------<BR>&gt;&gt;&gt;&gt; ---<BR>&gt;&gt;&gt;&gt; *From:* postgis-users-bounces@postgis.refractions.net on behalf of<BR>&gt;&gt;&gt;&gt; Brent Fraser<BR>&gt;&gt;&gt;&gt; *Sent:* Fri 7/11/2008 12:14 PM<BR>&gt;&gt;&gt;&gt; *To:* PostGIS Users Discussion<BR>&gt;&gt;&gt;&gt; *Subject:* Re: [postgis-users] Transform overlapping polygons to<BR>&gt;&gt;&gt;&gt; non-overlapping?<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; To All,<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt;&nbsp;&nbsp; There doesn't seem to be an obvious answer to the problem given<BR>&gt;&gt;&gt;&gt; below (aka cleaning polygons, creating planar polygons, etc).&nbsp; I did<BR>&gt;&gt;&gt;&gt; see a note on the PostGIS wiki wishlist to "Add a geometry cleaner".<BR>&gt;&gt;&gt;&gt; There is also a suggestion to convert to linestrings, node, then<BR>&gt;&gt;&gt;&gt; polygonize (while that may work for a small set of polygons, I've got<BR>&gt;&gt;&gt;&gt; 1.1 million to clean).&nbsp; JTS, Geos, etc will likely fail due to the<BR>&gt;&gt;&gt;&gt; large number of polygons so I'll need a different approach.<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt;&nbsp;&nbsp; I'm considering writing some code to iterate through my table of<BR>&gt;&gt;&gt;&gt; polygons, cleaning a small subset at a time.&nbsp; I think using PostGIS<BR>&gt;&gt;&gt;&gt; for the geometry storage and spatial query/selection makes sense.<BR>&gt;&gt;&gt;&gt; Any suggestions on which API to use?<BR>&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GDAL's OGR<BR>&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PostgreSQL's libpq<BR>&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; other?<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; Thanks!<BR>&gt;&gt;&gt;&gt; Brent Fraser<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; Brent Fraser wrote:<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; PostGIS'ers,<BR>&gt;&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; I've got a table of overlapping polygons.&nbsp; How can I make it a<BR>&gt;&gt;&gt;&gt;&gt; table of&nbsp; non-overlapping polygons?<BR>&gt;&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; For example, if table "polys2" contains two polygons A1 and B1<BR>&gt;&gt;&gt;&gt;&gt; which&nbsp; overlap.&nbsp; I'd like to create table "polys3" with polygons<BR>&gt;&gt;&gt;&gt;&gt; A2, B2, C2,&nbsp; where C2 is the overlap region of A1 and B1, and A2 =<BR>&gt;&gt;&gt;&gt;&gt; A1 - C2, and B2 =<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; B1 - C2.<BR>&gt;&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; Looking at the overlay operations in the JTS doc it looks like<BR>&gt;&gt;&gt;&gt;&gt; doing an&nbsp; Intersection (to get only the overlapping area) then<BR>&gt;&gt;&gt;&gt;&gt; adding the&nbsp; Symmetric Difference (to get the non-overlapping areas)<BR>&gt;&gt; might work.<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; Am I on the right track or is there an easier way (since all the<BR>&gt;&gt;&gt;&gt;&gt; polygons are in one table)?<BR>&gt;&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; Thanks!<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; Brent Fraser<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; _______________________________________________<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; postgis-users mailing list<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; postgis-users@postgis.refractions.net<BR>&gt;&gt;&gt;&gt;&gt;&nbsp; <A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>&gt;&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; _______________________________________________<BR>&gt;&gt;&gt;&gt; postgis-users mailing list<BR>&gt;&gt;&gt;&gt; postgis-users@postgis.refractions.net<BR>&gt;&gt;&gt;&gt; <A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; ---------------------------------------------------------------------<BR>&gt;&gt;&gt;&gt; ---<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; * The substance of this message, including any attachments, may be<BR>&gt;&gt;&gt;&gt; confidential, legally privileged and/or exempt from disclosure<BR>&gt;&gt;&gt;&gt; pursuant to Massachusetts law. It is intended solely for the<BR>&gt;&gt;&gt;&gt; addressee. If you received this in error, please contact the sender<BR>&gt;&gt;&gt;&gt; and delete the material from any computer. *<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; ---------------------------------------------------------------------<BR>&gt;&gt;&gt;&gt; ---<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; * Help make the earth a greener place. If at all possible resist<BR>&gt;&gt;&gt;&gt; printing this email and join us in saving paper. *<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; * *<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; * *<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; ---------------------------------------------------------------------<BR>&gt;&gt;&gt;&gt; ---<BR>&gt;&gt;&gt;&gt;<BR>&gt;&gt;&gt;&gt; _______________________________________________<BR>&gt;&gt;&gt;&gt; postgis-users mailing list<BR>&gt;&gt;&gt;&gt; postgis-users@postgis.refractions.net<BR>&gt;&gt;&gt;&gt; <A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>&gt;&gt;&gt; _______________________________________________<BR>&gt;&gt;&gt; postgis-users mailing list<BR>&gt;&gt;&gt; postgis-users@postgis.refractions.net<BR>&gt;&gt;&gt; <A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>&gt;&gt;&gt;<BR>&gt;&gt; _______________________________________________<BR>&gt;&gt; postgis-users mailing list<BR>&gt;&gt; postgis-users@postgis.refractions.net<BR>&gt;&gt; <A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; _______________________________________________<BR>&gt;&gt; postgis-users mailing list<BR>&gt;&gt; postgis-users@postgis.refractions.net<BR>&gt;&gt; <A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; _______________________________________________<BR>&gt;&gt; postgis-users mailing list<BR>&gt;&gt; postgis-users@postgis.refractions.net<BR>&gt;&gt; <A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>&gt;&gt;<BR>&gt; _______________________________________________<BR>&gt; postgis-users mailing list<BR>&gt; postgis-users@postgis.refractions.net<BR>&gt; <A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR>_______________________________________________<BR>postgis-users mailing list<BR>postgis-users@postgis.refractions.net<BR><A href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</A><BR></FONT></P></DIV></BODY></HTML>