Создать вид с X и Y из типа геометрии

В sql-server-2012 Я хочу сгенерировать вид со всеми точками из геометрического типа. Как я могу это сделать? Посмотреть пример

GeomKey | X  | Y
--------+----+-----
 1      | X1 | Y1
 1      | x2 | Y2
 2      | x1 | Y1

Пример в Oracle с sys.SDO

select c.ngeometrykey,  z.* 
from gis_map.mp_geometry c ,    
table(sdo_util.getvertices(c.geometry)) z 

person user3752907    schedule 03.09.2014    source источник
comment
Какой тип геометрии вы храните? Мультипойнты или что-то другое?   -  person jpw    schedule 03.09.2014
comment
Я использую Point, Polygone и LineString.   -  person user3752907    schedule 06.09.2014


Ответы (1)


Я не думаю, что вы можете сделать это в представлении, но вы можете создать определяемую пользователем функцию с табличным значением (функцию, которая возвращает таблицу), чтобы получить то, что вы хотите.

В этом примере используется таблица, определенная как

CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)

который хранит различные типы геометрии (в приведенном ниже примере я использовал POINT, MULTIPOINT, LINESTRING и POLYGON).

CREATE FUNCTION dbo.GetVertices()
RETURNS @ret TABLE (GeomKey INT, X INT, Y INT, PointNo INT)
AS
BEGIN
    DECLARE @max INT
    SET @max = (SELECT MAX(vector.STNumPoints()) FROM GeoTable) 

    ;WITH Sequence(Number) AS
    (
        SELECT 1 AS Number
        UNION ALL
        SELECT Number + 1
        FROM Sequence
        WHERE Number < @max
    )
    INSERT INTO @ret 
    SELECT
        gt.GeomKey
        ,gt.vector.STPointN(nums.number).STX AS X
        ,gt.vector.STPointN(nums.number).STY AS Y
        ,nums.number AS PointNo
    FROM GeoTable gt, Sequence nums
    WHERE nums.number <= gt.vector.STNumPoints()
    RETURN
END;

Полный рабочий пример см. в этом примере скрипта SQL.

person jpw    schedule 06.09.2014