Извлечь многоугольник широты / длинны из точки геометрии - PullRequest
0 голосов
/ 08 октября 2019

Позвольте мне предвосхитить это, заявив, что я рассмотрел почти все вопросы Stackoverflow, с которыми я столкнулся, и я не могу найти ничего, что работает. Я начинаю чувствовать, что поступаю неправильно.

У меня есть фигуры, хранящиеся в типе Geometry. Форма должна выглядеть так в моем приложении WPF -

enter image description here

Проблема в том, что многие мои точки геометрии имеют GEOMETRYCOLLECTION. В моем приложении мне нужны многоугольники широты и долготы. Коллекция геометрии также содержит линейные линии, которые мне не нужны. Мне нужны только точки многоугольника.

Пример -

enter image description here

Есть ли способ извлечь многоугольник широт / длинных точекчерез SQL Server? Ранее мы использовали функцию Geom.STConvexHull(), однако мне нужно больше определенных точек, чем это обеспечивает.

1 Ответ

1 голос
/ 08 октября 2019

Вы можете использовать небольшую вспомогательную функцию, например:

create or alter function GetGeometries(@geo geometry, @geometry_type varchar(200) = null)
returns @geometries table (i int primary key, geo geometry)
as
begin
  declare @i int = 1;
  while (1=1)
  begin
    declare @g geometry = @geo.STGeometryN(@i);
    if @g is null break;

    if (@geometry_type is null or @g.InstanceOf(@geometry_type)=1 )
    begin
      insert into @geometries(i,geo)values (@i, @g);
    end
    set @i += 1;
  end

  return;
end

go

create or alter function GetPoints(@geo geometry)
returns @geometries table (i int primary key, point geometry)
as
begin
  declare @i int = 1;
  while (1=1)
  begin
    declare @g geometry = @geo.STPointN(@i);
    if @g is null break;

    insert into @geometries(i,point)values (@i, @g);

    set @i += 1;
  end

  return;
end

go


DECLARE @g geometry = 'GEOMETRYCOLLECTION(LINESTRING(1 1, 3 5),POLYGON((-1 -1, -1 -5, -5 -5, -5 -1, -1 -1)))';

SELECT g.i geometry_index, p.i point_index, p.point.STX X, p.point.STY Y
from dbo.GetGeometries(@g,'POLYGON') g
outer apply dbo.GetPoints(g.geo) p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...