Ein solcher Fall kann vorkommen. Dann liefert Ihnen die SQL-Abfrage wie im nachfolgenden Fall
select * from cs_srs where srid = 4647;eine leere Ergebnismenge. Aber das ist kein Grund zur Panik.
Denn das Problem ist mit wenigen INSERT-Befehlen behoben, sofern man nicht bis zum nächsten DB-Release warten möchte.
Was wird benötigt?
Zuerst wird die Transformation eingetragen, da später beim INSERT des Koordinatensystems auf diese referenziert wird.
Der Wert für die Spalte COORD_OP_METHOD_ID wurde mit der nachfolgenden Abfrage ermittelt.
- Die Informationen zum fehlenden Koordinatensystem.
Für unser Beispiel 4647 sind die über die Suchfunktion auf den EPSG-Seiten zu finden. - Dazu braucht es noch die Angaben zur Transformation.
Die sind im Bereich Conversion zu finden, wenn man auf den Link View öffnet.
Wie man dort sieht, ist der dazugehörige EPSG-Code 4648. Und auch dafür gibt es einen Eintrag auf den EPSG-Seiten.
Zuerst wird die Transformation eingetragen, da später beim INSERT des Koordinatensystems auf diese referenziert wird.
insert into sdo_coord_ops ( COORD_OP_ID, COORD_OP_NAME, COORD_OP_TYPE, SOURCE_SRID, TARGET_SRID, COORD_TFM_VERSION, COORD_OP_VARIANT, COORD_OP_METHOD_ID, UOM_ID_SOURCE_OFFSETS, UOM_ID_TARGET_OFFSETS, INFORMATION_SOURCE, DATA_SOURCE, SHOW_OPERATION, IS_LEGACY, LEGACY_CODE, REVERSE_OP, IS_IMPLEMENTED_FORWARD, IS_IMPLEMENTED_REVERSE) values ( 4648, -- Code 'UTM zone 32N with prefix', -- Name 'CONVERSION', -- Operation NULL, NULL, NULL, NULL, 9807, -- Transverse Mercator (= Operation Method Name) NULL, NULL, 'Landesvermessungsamt Schleswig-Holstein.', -- Information Source 'OGP', -- Data Source 1, -- 'FALSE', -- Not legacy NULL, 1, -- Operation is reversible 1, -- Forward 1); -- and reverseAls Wert für die Spalte COORD_OP_TYPE ist CONVERSION einzutragen. Informationen zu möglichen anderen Werten sind im Oracle Spatial Developer's Guide zu finden.
Der Wert für die Spalte COORD_OP_METHOD_ID wurde mit der nachfolgenden Abfrage ermittelt.
-- Operation Method select * from sdo_coord_op_methods where coord_op_method_name = 'Transverse Mercator'; -- COORD_OP_METHOD_ID = 9807Nun sind noch die Parameterwerte wie in der Abbildung angegeben einzufügen. Dazu braucht es ein paar IDs aus den Tabellen SDO_COORD_OP_PARAMS und SDO_UNIT_OF_MEASURE.
-- Conversion parameters select parameter_id from sdo_coord_op_params where parameter_name = 'Latitude of natural origin'; -- 8801 select parameter_id from sdo_coord_op_params where parameter_name = 'Longitude of natural origin'; -- 8802 select parameter_id from sdo_coord_op_params where parameter_name = 'Scale factor at natural origin'; -- 8805 select parameter_id from sdo_coord_op_params where parameter_name = 'False easting'; -- 8806 select parameter_id from sdo_coord_op_params where parameter_name = 'False northing'; -- 8807 -- Units of measure select uom_id from sdo_units_of_measure where unit_of_meas_name = 'degree'; -- 9102 select uom_id from sdo_units_of_measure where unit_of_meas_name = 'unity'; -- 9201 select uom_id from sdo_units_of_measure where unit_of_meas_name = 'metre'; -- 9001Die 5 Parameter Latitude of natural origin, Longitude of natural origin, Scale factor at natural origin, False easting und False northing werden jetzt nacheinander in die Tabelle SDO_COORD_OP_PARAM_VALS eingetragen.
insert into sdo_coord_op_param_vals ( COORD_OP_ID, COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE, PARAM_VALUE_FILE_REF, PARAM_VALUE_FILE, PARAM_VALUE_XML, UOM_ID) values ( 4648, 9807, 8801, -- Latitude of natural origin 0, NULL, NULL, NULL, 9102); -- degree insert into sdo_coord_op_param_vals ( COORD_OP_ID, COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE, PARAM_VALUE_FILE_REF, PARAM_VALUE_FILE, PARAM_VALUE_XML, UOM_ID) values ( 4648, 9807, 8802, -- Longitude of natural origin 9, NULL, NULL, NULL, 9102); -- degree insert into sdo_coord_op_param_vals ( COORD_OP_ID, COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE, PARAM_VALUE_FILE_REF, PARAM_VALUE_FILE, PARAM_VALUE_XML, UOM_ID) values ( 4648, 9807, 8805, -- Scale factor at natural origin .9996, NULL, NULL, NULL, 9201); -- unity insert into sdo_coord_op_param_vals ( COORD_OP_ID, COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE, PARAM_VALUE_FILE_REF, PARAM_VALUE_FILE, PARAM_VALUE_XML, UOM_ID) values ( 4648, 9807, 8806, -- False easting 32500000, NULL, NULL, NULL, 9001); -- metre insert into sdo_coord_op_param_vals ( COORD_OP_ID, COORD_OP_METHOD_ID, PARAMETER_ID, PARAMETER_VALUE, PARAM_VALUE_FILE_REF, PARAM_VALUE_FILE, PARAM_VALUE_XML, UOM_ID values ( 4648, 9807, 8807, -- False northing 0, NULL, NULL, NULL, 9001); -- metreAbschliessend ist dann nur noch das Koordinatensystem 4647 einzutragen in den dafür vorgesehenen View SDO_COORD_REF_SYSTEM.
insert into sdo_coord_ref_system ( SRID, COORD_REF_SYS_NAME, COORD_REF_SYS_KIND, COORD_SYS_ID, DATUM_ID, GEOG_CRS_DATUM_ID, SOURCE_GEOG_SRID, PROJECTION_CONV_ID, CMPD_HORIZ_SRID, CMPD_VERT_SRID, INFORMATION_SOURCE, DATA_SOURCE, IS_LEGACY, LEGACY_CODE, LEGACY_WKTEXT, LEGACY_CS_BOUNDS, IS_VALID, SUPPORTS_SDO_GEOMETRY) values ( 4647, -- Code 'ETRS89 / UTM zone N32', -- Name 'PROJECTED', -- Projected CRS 4400, -- Erläuterung nachfolgend NULL, 6258, -- Erläuterung nachfolgend 4258, -- Erläuterung nachfolgend 4648, -- Zuvor registrierte Operation NULL, NULL, 'Landesvermessungsamt Schleswig-Holstein', -- Information Source 'OGP', -- Data Source 'FALSE', -- Not legacy NULL, NULL, NULL, 'TRUE', -- Is valid 'TRUE'); commit;Um den Wert 4400 für COORD_SYS_ID zu ermitteln, muss man ein bisschen genauer in die Tabelle SDO_COORD_SYS schauen. Und findet dann:
-- Coordinate axes: Easting, Northing. UoM = m select * from sdo_coord_sys where coord_sys_name like '%2D%Axes: easting, northing (E,N)%Orientations: east, north%UoM: m.'; -- COORD_SYS_ID = 4400GEOG_CRS_DATUM_ID und SOURCE_GEOG_SRID sind auch wieder mit den entsprechenden Abfragen zu ermitteln.
-- Geodetic Datum = European Terrestrial Reference System (ETRS) 1989 select * from sdo_datums where datum_name = 'European Terrestrial Reference System 1989'; -- DATUM_ID = 6258 select * from sdo_coord_ref_sys where coord_ref_sys_name = 'ETRS89' and coord_ref_sys_kind like '%2D%'; -- SRID = 4258Das Ergebnis kann nun begutachtet werden:
select * from cs_srs where srid = 4647;Mehr Infos sind natürlich im Oracle Spatial Developer's Guide zu finden.
Keine Kommentare:
Kommentar veröffentlichen