1. Identify polygon and it's boundary. In this example I create a point and buffer it to create a polygon.
DECLARE @g geometry
DECLARE @h geometry
DECLARE @border geometry
DECLARE @BUFFER geometry
SET @g = geometry::STGeomFromText('POINT(0 0)', 0);
SELECT @g.BufferWithTolerance(1, .5, 0).ToString();
SELECT @h=@g.BufferWithTolerance(1, .5, 0)
SELECT @h as h
SELECT @border = @h.STBoundary()
SELECT @border as border

2. Add a buffer, with some buffer factor, around the border and create a new shape. The the inner part of this buffer is going to get subtracted from the original polygon/shape.
SELECT @BUFFER=@border.BufferWithTolerance(0.1, 0.001, 0)
SELECT @border as border
union all
SELECT @BUFFER as test
SELECT @BUFFER as test

3. Identify the polygon/shape of the inner part of the buffer by getting the polygon that intersect the buffer and the original shape.
SELECT @BUFFER as test
union all
select @h as h
declare @diff geometry
SELECT @diff=@BUFFER.STIntersection(@h)
select @diff as diff

4. Subtract this overlapping polygon from the original shape and we get our desired results.
SELECT @h.STSymDifference(@diff) as blah

OGC Methods on Geometry Instances
No comments:
Post a Comment