0

我有一个 Oracle 数据库表,其中有一列 SDO_GEOMETRY 类型。我正在尝试在此表上编写一个视图并获取具有不同 SRID 的 SDO_GEOMETRY 列。我不想更改原始表或将值转换为不同的 SRID。我只想获得具有不同 SID(相同顶点值)的几何列。如何做到这一点?

表是这样的:

Create Table Locations (CityCode VARCHAR(2), Location SDO_GEOMETRY)

我正在尝试创建这样的视图,例如:

CREATE OR REPLACE VIEW VW_Locations AS
SELECT 
  CityCode, 
  SDO_GEOMETRY(Location, <NEW_SRID>) 
FROM Locations

我尝试使用 WKT 作为参数来使用 SDO_GEOMETRY 的构造函数,但我无法做到,因为我的表中的几何值是 3D 并且 Oracle 不支持 3D SDO_GEOMETRY 值的 WKT/WKB 转换。这适用于 2D 几何:

CREATE OR REPLACE VIEW VW_Locations AS
SELECT 
  CityCode, 
  SDO_GEOMETRY(SDO_UTIL.TO_WKTGEOMETRY(Location), <NEW_SRID>) AS Loc
FROM Locations
4

1 回答 1

0

我尝试了与您相同的方法,但遇到了同样的问题(TO_WKTGEOMETRY 导出仅适用于 2D 几何图形)。

我目前的方法是使用自定义函数通过对象点符号应用 SRID:

CREATE OR REPLACE FUNCTION APPLY_SRID 
(
  GEOM IN OUT MDSYS.SDO_GEOMETRY 
, SRID IN NUMBER DEFAULT 8307 
) RETURN MDSYS.SDO_GEOMETRY AS 
BEGIN
  GEOM.SDO_SRID := SRID;
  RETURN GEOM;
END APPLY_SRID;

在您自己的代码中,您可以按如下方式使用它:

CREATE OR REPLACE VIEW VW_Locations AS
SELECT 
  CityCode, 
  APPLY_SRID(Location, <NEW_SRID>) 
FROM Locations
于 2015-07-14T19:54:13.220 回答