Quantcast
Channel: APEX-AT-WORK by Tobias Arnhold
Viewing all articles
Browse latest Browse all 177

Oracle Spatial (Teil 4) - Unterschiedliche Koordinaten Punkte zu einer Linie zusammenführen

$
0
0
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:
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
) SDOP
Mit dem Ergebnis:

Viewing all articles
Browse latest Browse all 177

Trending Articles