Скорее всего, вы отошли от этого, но я публикую для дальнейшего использования.
Если я вас правильно понимаю, вам нужно создать один многоугольник из таблицы LINESTRING, которая составляет границу многоугольника?
Сначала объедините все LINESTRING в вашей таблице в одну геометрию следующим образом:
DECLARE @g geometry
SELECT TOP 1 @g = geom from #geom_tmp
SELECT
@g = @g.STUnion(geom)
FROM
#geom_tmp
SELECT @g
Затем вы хотите создать многоугольник из вашей однолинейной границы.Есть только две вещи, которые отличаются между вашей однострочной границей и полигоном, во-первых, мы заменим «LINESTRING» на «POLYGON».Затем мы добавляем набор скобок, так как строка WKT многоугольника разделяет несколько многоугольников с круглыми скобками, например:
DECLARE @str NVARCHAR(max)
SET @str = REPLACE(REPLACE(@g.STAsText(),'(','((') + ')','LINESTRING','POLYGON')
SET @g = GEOMETRY::STGeomFromText(@str,0)
SELECT @g
, что даст вам ваш полигон страны.
Тогда вы просто увидите, еслиВаша точка пересекает многоугольник (@p - это геометрия точки):
SELECT @p.STIntersects(@g)
-- OUTPUT is 1 if it intersects and 0 if it does not.
ИЛИ, если ваши точки находятся в таблице, вы можете выбрать список точек, которые пересекают страну, как показано ниже, если таблица точекСтолбец геометрии называется «точка».
SELECT *
FROM point_table
WHERE point.STIntersects(@g) = 1
Поскольку многие из нас не могут перейти на SQL Server 2012 в ближайшее время, это очень удобно.Надеюсь, это поможет.