Sql server 2012 从几何图形类型生成具有X和Y的视图
在中,我希望使用“几何体类型”中的所有点生成视图。我该怎么做? 视图示例Sql server 2012 从几何图形类型生成具有X和Y的视图,sql-server-2012,sql,sql-server,geospatial,sqlgeography,Sql Server 2012,Sql,Sql Server,Geospatial,Sqlgeography,在中,我希望使用“几何体类型”中的所有点生成视图。我该怎么做? 视图示例 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))
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
我不认为您可以在视图中执行此操作,但您可以创建一个表值用户定义函数一个返回表以获得所需内容的函数 此示例使用定义为的表
CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)
它存储不同的几何体类型,我在下面链接的示例中使用了点、多点、线串和多边形
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;
有关完整的工作示例,请参见此。您存储的几何图形类型是什么?多点还是别的?我用的是点、多点和线串