【问题标题】:Generate view with X and Y from geometry type从几何类型生成带有 X 和 Y 的视图
【发布时间】:2014-09-03 09:29:31
【问题描述】:

中,我想生成包含几何类型的所有点的视图。我怎样才能做到这一点? 查看示例

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

使用 sys.SDO 在 Oracle 中的示例

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

【问题讨论】:

  • 您要存储什么类型的几何图形?多点还是别的什么?
  • 我正在使用点、多边形和线串

标签: sql-server-2012 sql sql-server sql-server-2012 geospatial sqlgeography


【解决方案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;

请参阅此sample SQL Fiddle 以获取完整的工作示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2021-12-06
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多