[postgis-users] ST_Union vs ST_Collect
L Bogert-OBrien
dlawbob at ncf.ca
Sat Sep 11 21:06:39 PDT 2010
Thanks for your detailed explanation Nicklas. I am worried now that
ST_Collect is not what I want then, because I really do want a
"dissolve" of all areas. If you use st_area on the query you sent as
follows:
SELECT st_area(st_AsText(ST_Collect(a, b))) as collected,
st_area(st_AsText(ST_Union(a,b))) as unioned
FROM
(SELECT 'POLYGON((1 1, 1 4, 4 4, 4 1, 1 1))'::geometry as a, 'POLYGON((3
3, 3 5, 5 5, 5 3, 3 3))'::geometry as b) as v;
you get 13 for the collected one and 12 for the unioned one, as there is
one square overlapping between the two polygons. It is the 12 value
that I would be wanting from my data.
So how do I correct these errors I get, so that I can get ST_Union to
return successfully?
NOTICE: TopologyException: found non-noded intersection between
-79.4565 44.2272, -79.4565 44.2272 and -79.4565 44.2272, -79.4565
44.2272 -79.4565 44.2272
NOTICE: TopologyException: Directed Edge visited twice during
ring-building -123.035 49.3916
I am using PostGIS 1.4 on PostgreSQL 8.4.
That is why I tried cleangeometry as found at:
http://www.sogis1.so.ch/sogis/dl/postgis/cleanGeometry.sql and referenced at
http://postgis.refractions.net/pipermail/postgis-users/2008-August/021042.html
I also thought that ST_Buffer with 0 was supposed to simplify things and
get rid of problems in geometries.
Thanks again for your assistance.
Regards,
Loretta
----- Original Message -----
From: Nicklas Avén <nicklas.aven at jordogskog.no>
Date: Saturday, September 11, 2010 12:57 pm
Subject: Re: [postgis-users] ST_Union vs ST_Collect
> Hi Loretta
>
> In the documentation of ST_Collect there is a note explaining the
> difference.
>
> http://postgis.org/documentation/manual-1.5/ST_Collect.html
>
>
>
> As an example you can compare the output of the first and the second
> column in:
>
> SELECT st_AsText(ST_Collect(a, b)) as collected, st_AsText(ST_Union(a,
> b)) as unioned
> FROM
> (SELECT 'POLYGON((1 1, 1 4, 4 4, 4 1, 1 1))'::geometry as a,
> 'POLYGON((33, 3 5, 5 5, 5 3, 3 3))'::geometry as b) as v;
>
> in the first column you will get:
> MULTIPOLYGON(((1 1,1 4,4 4,4 1,1 1)),((3 3,3 5,5 5,5 3,3 3)))
>
> and in the second column you will get:
> POLYGON((1 1,1 4,3 4,3 5,5 5,5 3,4 3,4 1,1 1))
>
>
> So when collected the result is just the same geometries as inputed
> butrolled into a Multi or Collection. When unioned the function
> tries to
> really melt the polygons together. The vertex 4 4 and 3 3 is
> removed and
> instead you have the crossing points of the two polygon borders 3 4
> and4 3
>
> That is also the answer to why you can collect just any geometries
> because the function doesn't care about what it is collecting. But
> whenit comes to melting the geometries together it is more tricky
> and the
> function has some demands for the algorithm to work.
>
> HTH
> Nicklas
>
>
>
>
> On Sat, 2010-09-11 at 02:25 -0400, L Bogert-OBrien wrote:
> > Hi,
> >
> > Yes, thanks Jamie, that is indeed what I meant. Didn't proofread
> the> message well enough!
> >
> > Regards,
> >
> > Loretta
> >
> > ----- Original Message -----
> > From: James DeMichele <james.demichele at redfin.com>
> > Date: Friday, September 10, 2010 6:50 pm
> > Subject: Re: [postgis-users] ST_Union vs ST_Collect
> >
> > > Hello, Loretta, when you said: " replacing the ST_DUMP with
> > > ST_COLLECT...", did you mean that you replaced the ST_UNION with
> > > ST_COLLECT?
> > >
> > > -Jamie
> > >
> > > -----Original Message-----
> > > From: postgis-users-bounces at postgis.refractions.net
> > > [mailto:postgis-users-bounces at postgis.refractions.net] On
> Behalf Of L
> > > Bogert-O'Brien
> > > Sent: Friday, September 10, 2010 3:26 PM
> > > To: postgis-users at postgis.refractions.net
> > > Subject: [postgis-users] ST_Union vs ST_Collect
> > >
> > > The question:
> > > Why would CT_COLLECT work when CT_UNION does not?
> > >
> > > The background:
> > > There are 49 distinct CMAs in my y2006.ca_ct.cbf_clp table.
> Each of
> > > them have many multipolygons within them that touch each other by
> > > boundaries only. I wanted to create a table containing a single
> > > dissolved multipolygon for each CMA, so I created the following
> query> > to insert the data into the new table, y2006.ca_cma_cbf_clp:
> > >
> > > INSERT INTO y2006.ca_cma_cbf_clp (pruid, cmauid, the_geom_4269)
> > > (SELECT dmp.pruid, dmp.cmauid,
> > > ST_MULTI(ST_BUFFER(ST_UNION(dmp.dmp_geom), 0.0))
> > > FROM (SELECT pruid, cmauid,
> > >
> > > cleangeometry(ST_BUFFER((ST_DUMP(the_geom_4269)).geom,0.0)) AS
> > > dmp_geom FROM y2006.ca_ct_cbf_clp) AS dmp --9683
> rows
> > > of dumped
> > > geometries
> > > GROUP BY pruid, cmauid
> > > ORDER BY pruid, cmauid); --49 rows of CMAs
> > >
> > > This returned 49 rows, but there were two of them that had
> geometries> > that were NULL, and the following errors were seen:
> > >
> > > NOTICE: TopologyException: found non-noded intersection between
> > > -79.4565 44.2272, -79.4565 44.2272 and -79.4565 44.2272, -79.4565
> > > 44.2272 -79.4565 44.2272
> > > NOTICE: TopologyException: Directed Edge visited twice during
> > > ring-building -123.035 49.3916
> > > (These locations were within the two geometries that were
> missing.)> >
> > > So I just made one change, replacing the ST_DUMP with
> ST_COLLECT, and
> > > then I got the results I was expecting. There were no errors
> and all
> > > 49 entries in the new table had valid geometries.
> > >
> > > Thanks for any clarification you can give on the difference
> between> > ST_UNION and ST_COLLECT and when one should be used over
> the other.
> > >
> > > Regards,
> > >
> > > Loretta
> > >
> > >
> > > _______________________________________________
> > > postgis-users mailing list
> > > postgis-users at postgis.refractions.net
> > > http://postgis.refractions.net/mailman/listinfo/postgis-users
> > > _______________________________________________
> > > postgis-users mailing list
> > > postgis-users at postgis.refractions.net
> > > http://postgis.refractions.net/mailman/listinfo/postgis-users
> > >
> > _______________________________________________
> > postgis-users mailing list
> > postgis-users at postgis.refractions.net
> > http://postgis.refractions.net/mailman/listinfo/postgis-users
> >
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
More information about the postgis-users
mailing list