<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Brent, good to see someone else having fun with this issue!&nbsp; We worked
through it a couple of months ago, established a procedure, but had
some continuing issues with robustness and performance with large
datasets.&nbsp; <br>
<br>
What I wanted out of the analysis was a 'flat' geometry table with a
one to many join back to attributes from the input geometries.&nbsp; The
approach we used was to first find the overlaps (using a method similar
to the left join below), then apply this process:<br>
&nbsp;&nbsp; 1) Converting polygons -&gt; lines
<br>
&nbsp;&nbsp; 2) Converting lines -&gt; points
<br>
&nbsp;&nbsp; 2) Add intersecting nodes where lines cross.
<br>
&nbsp;&nbsp; 3) Build lines from points &amp; nodes
<br>
&nbsp;&nbsp; 4) Polygonize new lines.<br>
<br>
We also experimented with using a UNION of the lines followed by the
POLYGONIZE (similar to the methodology that JUMP uses I believe).&nbsp;
There are generally some robustness issues with either of these
processes.&nbsp;&nbsp; We have also used the intersection and difference method
you describe, which has worked well on small subsets, but is
problematic on large sets.&nbsp; <br>
<br>
We ended up utilizing Grass to complete the analysis, as it was faster
and more dependable.&nbsp; Good luck, if you want the sql that we used, let
me know and I can send it to you.&nbsp; <br>
<pre class="moz-signature" cols="72">Dan Erikson
</pre>
Obe, Regina wrote:
<blockquote
 cite="mid:53F9CF533E1AA14EA1F8C5C08ABC08D20197A130@ZDND.DND.boston.cob"
 type="cite">
  <title>Re: [postgis-users] Transform overlapping polygons to
non-overlapping?</title>
  <meta http-equiv="Content-Type" content="text/html; ">
  <meta content="MSHTML 6.00.2900.3354" name="GENERATOR">
  <div id="idOWAReplyText25254" dir="ltr">
  <div dir="ltr"><font color="#000000" face="Arial" size="2">Brent,</font></div>
  <div dir="ltr">&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">&nbsp;</div>
  <div dir="ltr"><font face="Arial" size="2">Create new table</font></div>
  <div dir="ltr">&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>
<a class="moz-txt-link-abbreviated" href="mailto:postgis-users-bounces@postgis.refractions.net">postgis-users-bounces@postgis.refractions.net</a> 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: <a class="moz-txt-link-abbreviated" href="mailto:postgis-users-bounces@postgis.refractions.net">postgis-users-bounces@postgis.refractions.net</a><br>
&gt;&gt; [<a moz-do-not-send="true"
 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: <a class="moz-txt-link-abbreviated" href="mailto:postgis-users-bounces@postgis.refractions.net">postgis-users-bounces@postgis.refractions.net</a><br>
&gt;&gt; [<a moz-do-not-send="true"
 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:* <a class="moz-txt-link-abbreviated" href="mailto:postgis-users-bounces@postgis.refractions.net">postgis-users-bounces@postgis.refractions.net</a>
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; <a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
&gt;&gt;&gt;&gt;&gt;&nbsp; <a moz-do-not-send="true"
 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; <a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
&gt;&gt;&gt;&gt; <a moz-do-not-send="true"
 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; <a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
&gt;&gt;&gt;&gt; <a moz-do-not-send="true"
 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; <a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
&gt;&gt;&gt; <a moz-do-not-send="true"
 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; <a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
&gt;&gt; <a moz-do-not-send="true"
 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; <a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
&gt;&gt; <a moz-do-not-send="true"
 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; <a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
&gt;&gt; <a moz-do-not-send="true"
 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; <a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
&gt; <a moz-do-not-send="true"
 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>
<a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>
  <a moz-do-not-send="true"
 href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</a><br>
  </font></p>
  </div>
  <pre wrap="">
<hr size="4" width="90%">
_______________________________________________
postgis-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a>
<a class="moz-txt-link-freetext" href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</a>
  </pre>
</blockquote>
</body>
</html>