Vor kurzem musste ich Daten aus einer Excel-Liste in das SDO_GEOMETRY Format bringen. Leider hatte die Excelliste einen Haken.
Die Anforderungen:
- Es musste eine Linie (Typ 2002) im GK3 Format (31467) aus VON und NACH Punkten generiert werden.
- Die Excel-Liste hatte die Punkte entweder als GK3 oder als WGS84 Format hinterlegt.
Nach Import der Daten sah meine Quelltabelle dann so aus:
Und hier das Select zur richtigen Transformation der Geo-Daten ins SDO_GEOMETRY Format:
Die Anforderungen:
- Es musste eine Linie (Typ 2002) im GK3 Format (31467) aus VON und NACH Punkten generiert werden.
- Die Excel-Liste hatte die Punkte entweder als GK3 oder als WGS84 Format hinterlegt.
Nach Import der Daten sah meine Quelltabelle dann so aus:
Und hier das Select zur richtigen Transformation der Geo-Daten ins SDO_GEOMETRY Format:
SELECT SDOP.ID, SDOP.VON_NAME, SDOP.NACH_NAME, /* Linie generieren */ MDSYS.SDO_GEOMETRY( 2002, /* Linie */ 31467, /* GK3 */ NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1), MDSYS.SDO_ORDINATE_ARRAY( SDOP.VON_GEO_GK3.SDO_POINT.X, SDOP.VON_GEO_GK3.SDO_POINT.Y, SDOP.NACH_GEO_GK3.SDO_POINT.X, SDOP.NACH_GEO_GK3.SDO_POINT.Y ) ) AS GEO_GK3, /* Entfernung berechnen */ ROUND(SDO_GEOM.SDO_DISTANCE( GEOM1 => SDOP.VON_GEO_GK3, GEOM2 => SDOP.NACH_GEO_GK3, TOL => 5, UNIT => 'unit=KM' ),3) ENTFERNUNG FROM ( /* Berechnung der SDO Punkte */ SELECT ID, VON_NAME, NACH_NAME, /* VON: Check ob GK3 oder WGS84 und Vereinheitlichung ins GK3 Format*/ CASE WHEN VON_GK3_X IS NOT NULL THEN MDSYS.SDO_GEOMETRY ( 2001, -- Zweidimensionaler Punkt 31467, -- Typ: GK3 SDO_POINT_TYPE( X => VON_GK3_X, Y => VON_GK3_Y, Z => NULL ), NULL, NULL ) ELSE SDO_CS.TRANSFORM( MDSYS.SDO_GEOMETRY ( 2001, -- Zweidimensionaler Punkt 8307, -- Typ: WGS84 SDO_POINT_TYPE( X => VON_WGS84_X, -- Längengrad / Longitude / Ost Y => VON_WGS84_Y, -- Breitengrad / Latitude / Nord Z => NULL ), NULL, NULL ), 31467 -- Umwandlung in GK3 ) END AS VON_GEO_GK3, /* NACH: Check ob GK3 oder WGS84 und Vereinheitlichung ins GK3 Format*/ CASE WHEN NACH_GK3_X IS NOT NULL THEN MDSYS.SDO_GEOMETRY ( 2001, -- Zweidimensionaler Punkt 31467, -- Typ: GK3 SDO_POINT_TYPE( X => NACH_GK3_X, Y => NACH_GK3_Y, Z => NULL ), NULL, NULL ) ELSE SDO_CS.TRANSFORM( MDSYS.SDO_GEOMETRY ( 2001, -- Zweidimensionaler Punkt 8307, -- Typ: WGS84 SDO_POINT_TYPE( X => NACH_WGS84_X, -- Längengrad / Longitude / Ost Y => NACH_WGS84_Y, -- Breitengrad / Latitude / Nord Z => NULL ), NULL, NULL ), 31467 -- Umwandlung in GK3 ) END AS NACH_GEO_GK3 FROM GEO_MEINE_DATEN ) SDOPMit dem Ergebnis: