【问题标题】:Generate view with X and Y from geometry type从几何类型生成带有 X 和 Y 的视图
【发布时间】:2014-09-03 09:29:31
【问题描述】:
在sql-server-2012 中,我想生成包含几何类型的所有点的视图。我怎样才能做到这一点?
查看示例
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 以获取完整的工作示例。