2015-04-28 3 views
0

У меня есть таблица базы данных Oracle со столбцом в формате SDO_GEOMETRY. Я пытаюсь написать представление по этой таблице и получить столбец SDO_GEOMETRY с другим SRID. Я не хочу менять исходную таблицу или преобразовывать значение в другой SRID. Я просто хочу получить столбец геометрии с другим SID (те же значения вершин). Как достичь этого?изменение SRID SDO_geometry из существующего значения без изменения исходного значения

В таблице это:

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 

Я пытался использовать конструктор для SDO_GEOMETRY с помощью WKT в качестве параметра, но я не мог 't сделать это, потому что значения геометрии в моей таблице 3D, и Oracle не поддерживает преобразование WKT/WKB значений 3D SDO_GEOMETRY. Это один работает для 2D геометрии:

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

ответ

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 
Смежные вопросы