<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Would it not be simpler to use ST_Distance?<br><br>Unless I'm missing something, the tolerance is the minimum distance between two polygons, so: <br><br>select a.id as poly_a, <br>          b.id as poly_b<br>from mypolys a, mypolys b<br>where a.id != b.id<br>   and ST_Distance(a.geom, b.geom) <= <tolerance>;<br><br>to add some intelligence, if the tolerance is proportional to the max dim of a.geom, then a rule of thumb will be that tolerance is vaguely proportional to the sqrt(ST_area(a.geom))<br><br>so the sql becomes:<br>select a.id as poly_a, b.id as poly_b from mypolys a, mypolys b<br>
  where a.id != b.id<br>
     and ST_Distance(a.geom, b.geom) <= sqrt(ST_area(a.geom)) * <scale factor>;<br><br>A scale actor of 0.05 would roughly get you neighbouring polygons within about 5% as you mention. This does not account for polygon shape irregularity, but may get you something close enough.<br><br>If you do need to take irregularity into account, a similar rough estimate can be derived by ST_NumPoints(ST_Simplify(a.geom,0.0)). Generally the more vertices that are required to define a polygon, the more complex a shape (or irregular) it is. The where clause tolerance can derive from this value as well if that would help. <br><br>You could also<br><br>select a.id as poly_a, <br>
          b.id as poly_b<br>         
ST_Distance(a.geom,b.geom) as ab_dist<br>from mypolys a, mypolys b<br>
where a.id != b.id<br>
   and ST_Distance(a.geom, b.geom) <= <tolerance>;<br><br>so in the output you also have stored a measure of just how adjacent (far apart) each pair of polygons returned is.<br><br><br>These will not measure exactly what you are asking, but may give a result that is close enough.<br> <br><br>This assumes you are OK with the stored multipolygons as the shapes you are working with, and don't need to compare the constituent polygons<br><br>HTH,<br><br>  Brent Wood<br><br><br><br>--- On <b>Wed, 2/16/11, Stephen Woodbridge <i><woodbri@swoodbridge.com></i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Stephen Woodbridge <woodbri@swoodbridge.com><br>Subject: Re: [postgis-users] How to locate adjacent polygons?<br>To: postgis-users@postgis.refractions.net<br>Date: Wednesday, February 16, 2011, 6:12 PM<br><br><div
 class="plainMail">Colin,<br><br>Did you look at buffer?<br><br>Not tested but something like this might work where b.id are the <br>adjacent id's to a.id with the distance of <tolerance>.<br><br>select a.id, b.id from mypolys a, mypolys b<br>  where a.id != b.id<br>    and buffer(a.geom, <tolerance>) && b.geom<br>    and intersects(buffer(a.geom, <tolerance>), b.geom)<br><br>-Steve<br><br>On 2/15/2011 5:38 PM, Colin wrote:<br>> Hi<br>><br>> I'm quite new to postgis and spatial databases.<br>> competent with sql and db's<br>><br>> My problem: How to locate adjacent polygons.<br>><br>> I have around around 2k irregular polygons.<br>> They've have been calculated as alpha / concave hulls from point sets.<br>> They're saved into pg as multipolygons<br>><br>> id | description | geom<br>><br>> The polygons dont have any regularity with regard to location and<br>>
 interaction<br>> the majority are close to a neighbour, but not touching. Typically<br>> within +/- 1 - 5% of polygon max dim<br>> a small number slightly overlap 1 or more neighbours, usually to quite a<br>> small extent<br>> their irregular shape can include 'undercuts'<br>><br>><br>> I need to identify the adjacent neighbours for each polygon<br>><br>> I looked at various methods that might allow me to do this but I cant<br>> get a 100% solution<br>><br>> Can anyone suggest methods that might work<br>><br>> thanks<br>><br>><br>> Colin<br>><br><br>_______________________________________________<br>postgis-users mailing list<br><a ymailto="mailto:postgis-users@postgis.refractions.net" href="/mc/compose?to=postgis-users@postgis.refractions.net">postgis-users@postgis.refractions.net</a><br><a href="http://postgis.refractions.net/mailman/listinfo/postgis-users"
 target="_blank">http://postgis.refractions.net/mailman/listinfo/postgis-users</a><br></div></blockquote></td></tr></table>