<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Regina,<div><br></div><div>Okay, I've finished running your fuller test query included on the wiki.</div><div><br></div><div>Both of the variations on your cascade union timed the same, and astonishingly faster that ST_Union:</div><div><br></div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span style="color: #0000cc">SELECT</span> ST_NPoints(upgis_cascadeunion(the_geom)) As afterpoints, Sum(ST_NPoints(the_geom)) <span style="color: #0000cc">as</span> beforepoints</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span style="color: #0000cc">FROM</span> npsa;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- 4.05 minutes</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- points before = 163612</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- points after = 1069320</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span style="color: #0000cc">SELECT</span> ST_NPoints(ST_Union(the_geom)) As afterpoints, Sum(ST_NPoints(the_geom)) <span style="color: #0000cc">as</span> beforepoints</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span style="color: #0000cc">FROM</span> npsa;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">--161.85 min</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- points before = 163612</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- points after = 1069320</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- <a href="http://postgis.refractions.net/pipermail/postgis-devel/2008-August/003412.html">http://postgis.refractions.net/pipermail/postgis-devel/2008-August/003412.html</a></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span style="color: #0000cc">SELECT</span> ST_NPoints(st_cascadeunion(the_geom)) As afterpoints, Sum(ST_NPoints(the_geom)) <span style="color: #0000cc">as</span> beforepoints</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; "><span style="color: #0000cc">FROM</span> npsa;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- 4.06 minutes</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- points before = 163612</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">-- points after = 1069320</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); ">Dane</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal 'Lucida Grande'; color: rgb(85, 85, 85); "><br></div></div><div><br><div><div>On Oct 5, 2008, at 10:29 AM, Paragon Corporation wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"> <div style="WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space"> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">Dane,</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">Nice to hear. I ran on your set too, but ran thru the whole thing</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">SELECT ST_NPoints(upgis_cascadeunion(the_geom)) As afterpoints, Sum(ST_NPoints(the_geom)) as beforepoints<br>FROM npsa_albers</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">Took SELECT 259329/1000.0/60 ms => 4.322 minutes</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">N Points after = </font></span><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">163,612;</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">N Points Before = 1,069,320;</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">I was afraid to try this using the current ST_Union (you remember by chance how long your below takes with ST_Union?)</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">I tried unioning the shape in OpenJump version that has the cascade union and it took about 5 minutes. </font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">I'll have to try that again since in all the tests</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">I have run OpenJump has always been faster (unfortunately where I am at the moment, my PostgreSQL is running on server and OpenJump with shape locally, so that may not have been a fair test). But it seems to end up with the same number of points of 163,612.</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">Thanks,</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2">Regina</font></span></div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div> <div dir="ltr" align="left"><span class="848251317-05102008"><font face="Arial" color="#0000ff" size="2"></font></span> </div><br> <div class="OutlookMessageHeader" lang="en-us" dir="ltr" align="left"> <hr tabindex="-1"> <font face="Tahoma" size="2"><b>From:</b> postgis-users-bounces@postgis.refractions.net [<a href="mailto:postgis-users-bounces@postgis.refractions.net">mailto:postgis-users-bounces@postgis.refractions.net</a>] <b>On Behalf Of </b>Dane Springmeyer<br><b>Sent:</b> Sunday, October 05, 2008 12:59 PM<br><b>To:</b> PostGIS Users Discussion<br><b>Subject:</b> Re: [postgis-users] Cascaded Union Aggregate function<br></font><br></div> <div></div>Regina, <div><br></div> <div>Great, my query now works with your amended upgis function posting.</div> <div><br></div> <div>So, here are my timing outputs for the dataset on watersheds I just sent a reference to:</div> <div><br></div> <div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'; COLOR: rgb(0,0,204)">select<span style="COLOR: #000000"> </span>count<span style="COLOR: #000000">(*) </span>from<span style="COLOR: #000000"> npsa;</span></div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'; COLOR: rgb(85,85,85)">--3162 records</div> <div style="MIN-HEIGHT: 15px; MARGIN: 0px; FONT: 12px 'Lucida Grande'"><br></div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'"><span style="COLOR: #0000cc">select</span> st_cascadeunion(the_geom) <span style="COLOR: #0000cc">from</span> npsa <span style="COLOR: #0000cc">group</span> <span style="COLOR: #0000cc">by</span> wholedrain;</div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'; COLOR: rgb(85,85,85)">-- 48.39 sec</div> <div style="MIN-HEIGHT: 15px; MARGIN: 0px; FONT: 12px 'Lucida Grande'"><br></div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'"><span style="COLOR: #0000cc">select</span> upgis_cascadeunion(the_geom) <span style="COLOR: #0000cc">from</span> npsa <span style="COLOR: #0000cc">group</span> <span style="COLOR: #0000cc">by</span> wholedrain;</div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'; COLOR: rgb(85,85,85)">-- 50.91 sec</div> <div style="MIN-HEIGHT: 15px; MARGIN: 0px; FONT: 12px 'Lucida Grande'"><br></div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'"><span style="COLOR: #0000cc">select</span> ST_Union(the_geom) <span style="COLOR: #0000cc">from</span> npsa <span style="COLOR: #0000cc">group</span> <span style="COLOR: #0000cc">by</span> wholedrain;</div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'; COLOR: rgb(85,85,85)">-- 2.49 minutes</div> <div style="MIN-HEIGHT: 15px; MARGIN: 0px; FONT: 12px 'Lucida Grande'"><br></div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'"><span style="COLOR: #0000cc">select</span> ST_Collect(the_geom) <span style="COLOR: #0000cc">from</span> npsa <span style="COLOR: #0000cc">group</span> <span style="COLOR: #0000cc">by</span> wholedrain;</div> <div style="MARGIN: 0px; FONT: 12px 'Lucida Grande'; COLOR: rgb(85,85,85)">-- 10.73 seconds</div> <div><font class="Apple-style-span" face="'Lucida Grande'" color="#555555"><br></font></div> <div>Next chance I get I'll take a look at the actual results.</div> <div><br></div> <div>Thanks!</div> <div>Dane</div> <div><br></div> <div><br></div></div> <div> <div> <div>On Oct 5, 2008, at 5:53 AM, Paragon Corporation wrote:</div><br class="Apple-interchange-newline"> <blockquote type="cite"> <div>Dane,<br>Dane,<br>Oops sorry about that . I just posted a revised version. Can you try that<br>out? Thanks.<br><br>Also can you send me a sample of your data off list. I think the issue was<br>I was experimenting with array_append vs. st_geom_accum and I had gotten the<br>error you described below, but then was unable to replicate it again.<br><br>It could be the detoasting affect of st_geom_accum that Mark had described<br>was the difference between the two. <br><br>Thanks,<br>Regina<br><br>-----Original Message-----<br>From: <a href="mailto:postgis-users-bounces@postgis.refractions.net">postgis-users-bounces@postgis.refractions.net</a><br>[<a href="mailto:postgis-users-bounces@postgis.refractions.net">mailto:postgis-users-bounces@postgis.refractions.net</a>] On Behalf Of Dane<br>Springmeyer<br>Sent: Sunday, October 05, 2008 1:47 AM<br>To: PostGIS Users Discussion<br>Subject: Re: [postgis-users] Cascaded Union Aggregate function<br><br>Hi Regina,<br><br>Thank you so much for the wiki posting. I've been using your code from your<br>august 12th email with great success, if not joy. What an amazing speed<br>improvement, especially for such a critical function. This was your exact<br>email of code I have working:<br><a href="http://postgis.refractions.net/pipermail/postgis-devel/2008-August/003412.ht">http://postgis.refractions.net/pipermail/postgis-devel/2008-August/003412.ht</a><br>ml<br><br>I've just downloaded the new code off the wiki, but I'm getting an error of<br>'Unknown Geometry Type: 0'. I'll paste the whole error below in case you<br>have an idea what might be going on. I'm running mac 10.5 with these<br>details:<br><br> postgis_version<br>---------------------------------------<br> 1.3 USE_GEOS=1 USE_PROJ=1 USE_STATS=1<br>(1 row)<br><br>--------------------------------------------------------------<br> PostgreSQL 8.3.3 on i386-apple-darwin9.4.0, compiled by GCC<br><br><br>Cheers,<br><br>Dane<br><br><br>-- full error:<br>test=# select upgis_cascadeunion(the_geom) from npsa group by wholedrain;<br><br>ERROR: Unknown geometry type: 0<br>CONTEXT: SQL function "upgis_dump_collect_garray" statement 1<br>SQL statement "SELECT <br>upgis_dump_collect_garray( array_append(ARRAY(SELECT $1 [s] As geom FROM<br>generate_series(1, $2 ) As s WHERE NOT (s = ANY( $3 )) ), <br>st_unite_garray(ARRAY(SELECT $1 [s] As geom FROM generate_series(1, <br>$2 ) As s WHERE s = ANY( $3 ) ) ) ) )"<br>PL/pgSQL function "st_collect_unite_garray" line 29 at assignment SQL<br>statement "SELECT upgis_unitecascade_garray(ARRAY(SELECT<br>st_collect_unite_garray( $1 [i:least(i + $2 - 1, $3 )]) As geom FROM<br>generate_series(1, $3 , $2 ) As i), $4 + 1, $5 , false)"<br>PL/pgSQL function "upgis_unitecascade_garray" line 48 at assignment<br>SQL statement "SELECT <br>upgis_dump_collect_garray( array_append(ARRAY(SELECT $1 [ $2 [s]] As geom<br>FROM generate_series(1, array_upper( $2 ,1)) As s ),<br>upgis_unitecascade_garray(ARRAY(SELECT $1 [s] As geom FROM <br>generate_series(1, $3 ) As s WHERE NOT (s = ANY( $2 )) ), $4 + 1, <br>$5 , true) ) )"<br>PL/pgSQL function "upgis_unitecascade_garray" line 33 at assignment SQL<br>function "upgis_unitecascade_garray_sort" statement 1<br><br><br>On Oct 4, 2008, at 4:53 PM, Paragon Corporation wrote:<br><br> <blockquote type="cite"><br></blockquote> <blockquote type="cite">Oops sorry about that.<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite">Just realized I had ugly spaces in the link. I've changed it. Use <br></blockquote> <blockquote type="cite">this one<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite"><a href="http://postgis.refractions.net/support/wiki/index.php?upgis_cascadeuni">http://postgis.refractions.net/support/wiki/index.php?upgis_cascadeuni</a><br></blockquote> <blockquote type="cite">on<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite">-----Original Message-----<br></blockquote> <blockquote type="cite">From: <a href="mailto:postgis-users-bounces@postgis.refractions.net">postgis-users-bounces@postgis.refractions.net</a><br></blockquote> <blockquote type="cite">[<a href="mailto:postgis-users-bounces@postgis.refractions.net">mailto:postgis-users-bounces@postgis.refractions.net</a>] On Behalf Of <br></blockquote> <blockquote type="cite">Paragon Corporation<br></blockquote> <blockquote type="cite">Sent: Saturday, October 04, 2008 7:44 PM<br></blockquote> <blockquote type="cite">To: 'PostGIS Users Discussion'<br></blockquote> <blockquote type="cite">Subject: [postgis-users] Cascaded Union Aggregate function<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite">For those people who have unions to do that are slow, feel free to try <br></blockquote> <blockquote type="cite">out this aggregate union function.<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite">I haven't tested it enough for it to make it into 1.3.4, but have <br></blockquote> <blockquote type="cite">included a link to the source code in the wiki. It should work just <br></blockquote> <blockquote type="cite">fine on PostGIS versions 1.2.2 and above.<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite"><a href="http://postgis.refractions.net/support/wiki/index.php?PL%2FPGSQL%20Pse">http://postgis.refractions.net/support/wiki/index.php?PL%2FPGSQL%20Pse</a><br></blockquote> <blockquote type="cite">udo%20 Cascade%20Union%20Aggregate%20Function<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite">Let me know if you run into any problems with it. It has worked well <br></blockquote> <blockquote type="cite">for the samples I have used it on.<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite">Thanks,<br></blockquote> <blockquote type="cite">Regina<br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite">_______________________________________________<br></blockquote> <blockquote type="cite">postgis-users mailing list<br></blockquote> <blockquote type="cite"><a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br></blockquote> <blockquote type="cite"><a href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</a><br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite"><br></blockquote> <blockquote type="cite">_______________________________________________<br></blockquote> <blockquote type="cite">postgis-users mailing list<br></blockquote> <blockquote type="cite"><a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br></blockquote> <blockquote type="cite"><a href="http://postgis.refractions.net/mailman/listinfo/postgis-users">http://postgis.refractions.net/mailman/listinfo/postgis-users</a><br></blockquote><br>_______________________________________________<br>postgis-users mailing list<br><a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>http://postgis.refractions.net/mailman/listinfo/postgis-users<br><br><br><br>_______________________________________________<br>postgis-users mailing list<br>postgis-users@postgis.refractions.net<br>http://postgis.refractions.net/mailman/listinfo/postgis-users<br></div></blockquote></div><br></div></div> _______________________________________________<br>postgis-users mailing list<br><a href="mailto:postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br>http://postgis.refractions.net/mailman/listinfo/postgis-users<br></blockquote></div><br></div></body></html>