[postgis-users] relationship functions not working well

Martin Davis mbdavis at refractions.net
Fri Dec 5 09:22:25 PST 2008


Good news!  I thought about this some more overnight, and I realized 
that the relation "interior-intersects" should produce the result you're 
looking for.  This still doesn't have a named predicate, but the really 
good news is that the IM pattern for this is trivial:  [T********] .

(Exercise left for the student: Prove that the pattern expression for 
"intersects-and-not-touches"  is equivalent to [T********].  Or not - 
the proof in either situation would be interesting)


Martin Davis wrote:
> It sounds like you want the relationship "intersects-and-not-touches" 
> - does that sound right?
>
> This relation has quite a complex expression in terms of the IM 
> pattern languge.  It is:
>
> [T********]  or [*T*******] or [***T*****] or [****T****]
> and not ( [FT*******] or [F**T*****] or [F***T****] )
>
> This is equivalent to:
>
> not ([FF*FF****] or [FT*******] or [F**T*****] or [F***T****] )
>
> Unfortunately I don't think there is a "closed-form" or single-string 
> pattern for this which can be used with the boolean relate function.  
> The intersection-matrix-returning version of relate will be needed - 
> but even then testing these patterns is going to be tricky.
>
> I've had some thoughts in the past that what is required is a more 
> complete pattern-matching language for relate, so that the above logic 
> could be specified and evaluated. Or, a matches_IM_pattern function 
> could be provided, which would allow evaluation of boolean 
> combinations of patterns against the IM string returned from relate.
>
> Another option would be for PostGIS to provide some standard "combined 
> name relationship" functions, such as "intersects_not_touches". 
> Of course you can also evaluate a boolean expression containing both 
> predicates - but this is less efficient.
>
> Hope this helps...
>
> William Kyngesburye wrote:
>> When I was debugging my invalid geometry problem, I needed to select 
>> a small area to view.  The data is divided up into 1 degree tiles 
>> (it's the SRTM SWBD shapefiles imported).  I figured selecting by 
>> whole integer degrees would be simple to deal with.
>>
>> I started with st_overlaps(), as it was mentioned in the wiki I 
>> think, or somewhere online (this was a few weeks ago, and don't 
>> remember the details).  But it was not selecting very much at all in 
>> a large area.  I looked at the PostGIS documentation to see what 
>> other functions would work, but their descriptions are not plain 
>> english and and tried them all.  And there was a pointer to:
>>
>> http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html 
>>
>>
>> that helped a little.  But none of the ones I tried gave me what I 
>> want - polygon areas  completely inside the box boundary and area, 
>> and not polygons where only the boundary touches the box boundary.
>>
>> Snapshots:
>>
>> http://www.kyngchaos.com/wiki/gallery:gis:temp:index
>>
>> ST_Overlaps() -- only polygons selected where their boundaries touch 
>> the box boundary and any part of the polygon area is inside the box.  
>> I get none that are completely within but not touching are selected.
>>
>> ST_Intersects() -- all polygons selected where //any// part of the 
>> polygon (boundary and inside) are in or touch //any// part of the 
>> box, though it seems to have missed some from the upper-right 
>> neighboring cells.  A lot more than I want.
>>
>> ST_CoveredBy() -- only polygons where the boundary //and// area are 
>> completely inside only the area of the box and not touching the box 
>> boundary.  I don't get the polys touching the box edge.
>>
>> ST_Within() -- similar to st_coveredby, except that it only seems to 
>> look at the outer boundary of the polygons, and that upper-right 
>> corner polygon is actually an invalid polygon where the "outer" 
>> polygon is a "hole" polygon (not visible here), thus inside and not 
>> touching the box boundary.
>>
>>
>> Did I miss an obvious function, or is there something that will get 
>> what I want?  hmmm, maybe a combination (but would that slow it down 
>> a lot)?
>>
>> -----
>> William Kyngesburye <kyngchaos*at*kyngchaos*dot*com>
>> http://www.kyngchaos.com/
>>
>> [Trillian]  What are you supposed to do WITH a maniacally depressed 
>> robot?
>>
>> [Marvin]  You think you have problems?  What are you supposed to do 
>> if you ARE a maniacally depressed robot?  No, don't try and answer, 
>> I'm 50,000 times more intelligent than you and even I don't know the 
>> answer...
>>
>> - HitchHiker's Guide to the Galaxy
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>
>

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022




More information about the postgis-users mailing list