[postgis-users] Re: touches() not returning correct values, maybe?
Jeff D. Hamann
jeff.hamann at forestinformatics.com
Tue Jan 2 14:01:48 PST 2007
This seems to remedy this situation.
select
t1.gid as gid,
t2.gid as adj_gid
from
stands t1,
stands t2
where
intersects( t1.boundary, t2.boundary ) AND
t1.boundary && t2.boundary and
Equals( t1.boundary, t2.boundary ) is FALSE
order by
t1.gid,
t2.gid;
So why is this different than
select
t1.gid as gid,
t2.gid as adj_gid
from
stands t1,
stands t2
where
touches( t1.boundary, t2.boundary ) AND
t1.boundary && t2.boundary and
order by
t1.gid,
t2.gid;
Jeff.
--
Forest Informatics, Inc.
PO Box 1421
Corvallis, Oregon 97339-1421
> I've been examining postgis for a little while (for production, teaching,
> and research) and so far I'm very pleased with the results. I only wish
> Arc/Info had SQL like this!
>
> I've been loading shape files, generating adjacency lists, and then
> exporting the results to a text file for a project and noticed the
> touches() function isn't returning the correct results.
>
> I've got two polygons (out of 53) that contain common points (from R),
>
>> dp.stands$Shapes[[1]]$verts
> [,1] [,2]
> [1,] 500141.9 505664.9
> [2,] 500237.9 505734.9
> [3,] 500435.0 505821.6
> [4,] 500435.0 504810.6
> [5,] 500167.6 504636.5
> [6,] 500143.3 504616.9
> [7,] 500143.1 504616.5
> [8,] 500142.8 504616.3
> [9,] 499962.4 504434.0
> [10,] 499962.2 504433.7
> [11,] 499950.9 504420.8
> [12,] 499788.2 504212.4
> [13,] 499786.5 504209.5
> [14,] 499782.8 504205.1
> [15,] 499585.7 503918.4
> [16,] 499584.0 503915.2
> [17,] 499582.0 503912.7
> [18,] 499391.4 503606.6
> [19,] 499386.0 503596.3
> [20,] 499384.1 503593.6
> [21,] 499253.8 503329.0
> [22,] 499019.2 502965.0
> [23,] 498866.0 502743.1
> [24,] 498866.0 502743.1
> [25,] 498775.5 502993.1
> [26,] 498801.3 503256.2
> [27,] 498845.7 503517.7
> [28,] 498958.4 503821.9
> [29,] 499112.3 504197.1
> [30,] 499275.2 504463.3
> [31,] 499564.9 504869.7
> [32,] 499770.7 505108.3
> [33,] 499917.6 505287.0
> [34,] 500053.7 505517.0
> [35,] 500141.9 505664.9
>>
>
> and
>
>> dp.stands$Shapes[[39]]$verts
> [,1] [,2]
> [1,] 497710.9 503306.0
> [2,] 497740.8 503426.9
> [3,] 497776.1 503659.6
> [4,] 497803.2 503884.1
> [5,] 497852.9 504042.5
> [6,] 497910.0 504186.1
> [7,] 497995.7 504276.2
> [8,] 498167.8 504313.2
> [9,] 498412.8 504385.5
> [10,] 498551.0 504444.2
> [11,] 498577.9 504481.8
> [12,] 498966.3 503841.2
> [13,] 498958.4 503821.9
> [14,] 498845.7 503517.7
> [15,] 498801.3 503256.2
> [16,] 498775.5 502993.1
> [17,] 498858.9 502762.7
> [18,] 498225.1 502836.6
> [19,] 497846.5 503108.7
> [20,] 497710.9 503306.0
>>
>
> Using R's %in% operator,
>
>> dp.stands$Shapes[[1]]$verts %in% dp.stands$Shapes[[39]]$verts
> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> FALSE
> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> FALSE
> [25] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> FALSE
> [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> FALSE
> [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> TRUE
> [61] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>>
>
> Showing that there are points that are common to the two sets.
>
> When I used the touches() function to generate an list of adjacent
> polygons,
>
> drop table adj_list;
> select
> t1.gid as gid,
> t2.gid as adj_gid
> into table
> adj_list
> from
> stands t1,
> stands t2
> where
> touches( t1.boundary, t2.boundary ) AND
> t1.boundary && t2.boundary
> order by
> t1.gid,
> t2.gid;
>
> The resulting list was,
>
> 1,16
> 1,27
> 1,38
> 2,4
> 2,18
> ...blah, blah, blah...
> 2,19
> 2,27
> 2,38
>
> In which the first three (for polygon one) are correct but there's no
> polygon 39. I've attached the pdf of the shapefile (hope it gets through)
> and the accompanying adjacency list and sql file as an example for good
> measure.
>
> Is there something I should be doing to my query differently? Is this me?
>
>
> Jeff.
>
>
>
>
>
>
>
>
> --
> Forest Informatics, Inc.
> PO Box 1421
> Corvallis, Oregon 97339-1421
>
>
>
>
>
>
>
>
More information about the postgis-users
mailing list