Open HermanAssink opened 9 years ago
Het opzoeken van geometrie met meer dan twee dimensies obv de sdo metadata:
SELECT OWNER, TABLE_NAME, COLUMN_NAME, COUNT(*) FROM ALL_SDO_GEOM_METADATA M, TABLE(M.DIMINFO) DIM
GROUP BY OWNER, TABLE_NAME, COLUMN_NAME
HAVING COUNT(*) > 2;
Tellen van aantal records met LRS in een specifieke kolom (SHAPE) voor een bepaalde tabel (B2.DUURZAME_OV_ARC):
SELECT COUNT(*) FROM B2.DUURZAME_OV_ARC D
WHERE FLOOR(MOD(D.SHAPE.SDO_GTYPE / 100, 10)) > 0;
Opvragen van alle geometrie kolommen (werkt ook bij ontbrekende metadata):
SELECT OWNER, TABLE_NAME, COLUMN_NAME FROM ALL_TAB_COLUMNS
WHERE DATA_TYPE = 'SDO_GEOMETRY' AND OWNER != 'MDSYS';
Deze twee queries kunnen op de volgende wijze worden gecombineerd om alle tabellen af te lopen:
DECLARE
LRS_COUNT NUMBER;
C_OWNER ALL_TAB_COLUMNS.OWNER%TYPE;
C_TABLE_NAME ALL_TAB_COLUMNS.TABLE_NAME%TYPE;
C_COLUMN_NAME ALL_TAB_COLUMNS.COLUMN_NAME%TYPE;
CURSOR C IS
SELECT OWNER, TABLE_NAME, COLUMN_NAME FROM ALL_TAB_COLUMNS
WHERE DATA_TYPE = 'SDO_GEOMETRY' AND OWNER != 'MDSYS';
BEGIN
OPEN C;
LOOP
FETCH C INTO C_OWNER, C_TABLE_NAME, C_COLUMN_NAME;
EXECUTE IMMEDIATE 'SELECT COUNT(*) LRS_COUNT'
|| ' FROM ' || C_OWNER || '.' || C_TABLE_NAME || ' T'
|| ' WHERE FLOOR(MOD(T.' || C_COLUMN_NAME || '.SDO_GTYPE / 100, 10)) > 0'
INTO LRS_COUNT;
IF LRS_COUNT > 0 THEN
DBMS_OUTPUT.PUT_LINE(C_OWNER || '.' || C_TABLE_NAME || '.' || C_COLUMN_NAME || ' ' || LRS_COUNT);
END IF;
END LOOP;
END;
Verbeterde versie:
DECLARE
DUMMY CHAR(1);
C_OWNER ALL_TAB_COLUMNS.OWNER%TYPE;
C_TABLE_NAME ALL_TAB_COLUMNS.TABLE_NAME%TYPE;
C_COLUMN_NAME ALL_TAB_COLUMNS.COLUMN_NAME%TYPE;
CURSOR C IS
SELECT OWNER, TABLE_NAME, COLUMN_NAME FROM ALL_TAB_COLUMNS
WHERE DATA_TYPE = 'SDO_GEOMETRY' AND OWNER != 'MDSYS';
BEGIN
OPEN C;
LOOP
FETCH C INTO C_OWNER, C_TABLE_NAME, C_COLUMN_NAME;
EXIT WHEN C%NOTFOUND;
BEGIN
EXECUTE IMMEDIATE 'SELECT * FROM DUAL WHERE NOT EXISTS ('
|| ' SELECT 1 FROM ' || C_OWNER || '.' || C_TABLE_NAME || ' T'
|| ' WHERE FLOOR(MOD(T.' || C_COLUMN_NAME || '.SDO_GTYPE / 100, 10)) > 0)'
INTO DUMMY;
EXCEPTION
WHEN NO_DATA_FOUND
THEN DBMS_OUTPUT.PUT_LINE(C_OWNER || '.' || C_TABLE_NAME || '.' || C_COLUMN_NAME);
END;
END LOOP;
DBMS_OUTPUT.PUT_LINE('done');
END;
Beperken scope tot specifieke schema's:
DECLARE
...
WHERE DATA_TYPE = 'SDO_GEOMETRY' AND OWNER IN ('B0', 'B1');
...
BEGIN
...
END;
PoC: IDgis/geo-publisher@3df14c8d8a751935d243c7a3ea03860311b148c9
Het blijkt dat het wenselijk/noodzakelijk is om datasets met LRS geometrieën over te zetten naar de GIS Publicatieomgeving. Op dit moment is dat niet mogelijk omdat tijdens de conversie de geometrie wordt omgezet naar WKB format. Het WKB format ondersteunt geen LRS geometrie. Daarom de vraag: Is het akkoord om de LRS geometrie tijdens de conversie om te zetten naar een normale lijn geometrie? Van belang daarbij is natuurlijk of er in de GIS Publicatieomgeving gebruik gemaakt moet worden van de LRS functionaliteit, bijv. weergave van lichtmasten langs de weg.
Overigens, tijdens de PoC fase heeft Edwin Kuijer op navraag van Reijer Copier mondeling gemeld dat datasets met LRS geometrieën niet naar de GIS Publicatieomgeving geconverteerd hoeven te worden.