[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