thanks all for replies my apologies for confused replies and stringing the thread out
Nick No that wasnt me at stackexchange. altho the graphic shows a similar scenario, except mine are a little bit more evenly sized and distributed. Brett yea thats pretty much where I'm at... except I hadnt considered dropping to foreach vertex. Altho even then I can see that there might well be cases where count would be >2 for all vertexes in 'adjacent' polygons. Steven Re your diagram: Only A would be considered a neighbour of E And I agree only a raytracing type solution will give a complete solution. But its not justified. I think extending my current solution with Brents suggestion of foreach(vertex) is the best compromise. I feel there are sufficient vertices to identify a high percentage of neighbours. And since 99% is prob OK for this project, I guess thats the way to go. thanks all -- Colin On Wed, 16 Feb 2011 10:13 -0800, pcr...@pcreso.com wrote: Hi Colin, Given your definition of adjacent, you are probably better off with a script using sqls to retrieve data/write result & the script to implement the logic, iterating through the polygons: foreach polygon (a) foreach different polygon (b) foreach a.vertex foreach b.vertex get count of polygons intersected by a line between a.vertex and b.vertex if count > 2 then (a) and (b) are not adjacent next b.vertex next (a) vertex write result next (b) polygon next (a) polygon This would define adjacency as having no intervening polygons between any two polygons, partial adjacency (where parts of two polygons are & other parts are separated) would require a slight change in the logic, so if any a.vertex & b.vertex have no intervening polygons, then (a) and (b) are adjacent. How you define & implement adjacency is up to you. As is the choice of scripting language :-) HTH, Brent Wood Subject: Re: [postgis-users] How to locate adjacent polygons? To: postgis-users@postgis.refractions.net Date: Thursday, February 17, 2011, 2:09 AM sorry for double post - working from dodgy pda Hi Steve / Brent Thanks for replies Steve: Yes I did look at buffer but I discounted it because a small number of the polys are at distances well outside the mean and I didnt see any easy way of including them. Brents solution with st_distance and a tolerance factor might suffer from the same problem And in fact the definition of adjacent doesnt include distance - its simply that no other polygon crosses some path between any 2 I also have the centroids calced and stored so in my spatial innocence i devised a solution which almost works and uses ST_Crosses(ST_MakeLine something like this: select a.id, b.id, ST_Crosses(ST_MakeLine(a.centroid, b.centroid), b.geom) as stcrosses from a, b where a.id = nnn and a.id!=b.id order by stcrosses I run this per id from program code. I then filter the return to give adjacents I'm not at my dev machine right now and I suspect thats not exacty right(at all!) but what I have isnt affected by distance and almost works - except occasionally for the very complex and where there are larger gaps between polys. so maybe a combination of these methods? Or since the data wont change often, maybe I just plot them in qgis and do it manually! ;-) Colin On 02/16/2011 05:12 AM, Stephen Woodbridge wrote: > Colin, > > Did you look at buffer? > > Not tested but something like this might work where b.id are the > adjacent id's to a.id with the distance of <tolerance>. > > select a.id, b.id from mypolys a, mypolys b > where a.id != b.id > and buffer(a.geom, <tolerance>) && b.geom > and intersects(buffer(a.geom, <tolerance>), b.geom) > > -Steve > > On 2/15/2011 5:38 PM, Colin wrote: >> Hi >> >> I'm quite new to postgis and spatial databases. >> competent with sql and db's >> >> My problem: How to locate adjacent polygons. >> >> I have around around 2k irregular polygons. >> They've have been calculated as alpha / concave hulls from point sets. >> They're saved into pg as multipolygons >> >> id | description | geom >> >> The polygons dont have any regularity with regard to location and >> interaction >> the majority are close to a neighbour, but not touching. Typically >> within +/- 1 - 5% of polygon max dim >> a small number slightly overlap 1 or more neighbours, usually to quite a >> small extent >> their irregular shape can include 'undercuts' >> >> >> I need to identify the adjacent neighbours for each polygon >> >> I looked at various methods that might allow me to do this but I cant >> get a 100% solution >> >> Can anyone suggest methods that might work >> >> thanks >> >> >> Colin -- [1]http://www.fastmail.fm - IMAP accessible web-mail _______________________________________________ postgis-users mailing list postgis-users@postgis.refractions.net [2]http://postgis.refractions.net/mailman/listinfo/postgis-users References Visible links 1. http://www.fastmail.fm/ 2. http://postgis.refractions.net/mailman/listinfo/postgis-users Hidden links: 3. mailto:colinfl...@fastmail.co.uk -- http://www.fastmail.fm - IMAP accessible web-mail -- Colin colinfl...@fastmail.co.uk -- http://www.fastmail.fm - A fast, anti-spam email service. _______________________________________________ postgis-users mailing list postgis-users@postgis.refractions.net http://postgis.refractions.net/mailman/listinfo/postgis-users