2014-09-03 66 views
0

中我希望生成具有几何类型中所有点的视图。我怎样才能做到这一点? 查看示例使用几何类型中的X和Y生成视图

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

在甲骨文与示例sys.SDO

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

你存储什么类型的几何?多点还是其他? – jpw 2014-09-03 09:57:00

+0

我正在使用Point,Polygone和LineString – user3752907 2014-09-06 16:11:09

回答

1

我不认为你可以做到这一点的观点,但你可以创建一个表值用户定义函数(函数返回一个表)来获得你想要的。

本例使用定义为

CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY) 

,其存储不同的几何形状的类型(在我联下面我用点,多点,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为一个完整的工作示例。

相关问题