cs0815
cs0815

Reputation: 17388

determine if geography point falls on geography polygon line

I understand that you cannot check if a geography point touches for example a geography polygon (see here) using something like this, which is possible in the geometry world:

WHERE A.Geo.STTouches(@s0) = 1

Is there a way to achieve this in the geography world? I guess a solution would be to transform the geography polygon + geography point into their geometry equivalents?

PS:

This should also work with complex polygons - such as this one with holes:

POLYGON ((99.999999999999986 5.3926387744713564E-14, 101.00000000000001 5.3926387744713564E-14, 100.99999999999987 1.0000000000000155, 100.00000000000013 1.0000000000000155, 99.999999999999986 5.3926387744713564E-14), (100.20000000000003 0.19999999999992918, 100.19999999999989 0.79999999999990257, 100.80000000000011 0.79999999999990234, 100.79999999999998 0.19999999999992912, 100.20000000000003 0.19999999999992918))

enter image description here

Upvotes: 0

Views: 1434

Answers (1)

Ben Thul
Ben Thul

Reputation: 32697

I'm assuming that my statement of your wanting to track whether or not the given point intersects with the boundary of your polygon. The below should do the trick:

SELECT @point.STIntersects(@polygon.RingN(1));

In essence, you're getting the outer boundary with RingN(1) (I'm making an assumption that this is a simple polygon, so the first ring should be the outer boundary) and then checking whether that intersects with the point you care about.

Edit: If you want to check if a given point lies on the boundary of any ring in the given polygon, something like this should do the trick:

select n.n as [IntersectedRingNumber], 
   @polygon.RingN(n) as [IntersectedRing]
from dbo.Numbers as n
where n <= @polygon.NumRings()
   and @point.STIntersects(@polygon.RingN(n)) = 1;

Upvotes: 3

Related Questions