Question

We have a table in an Oracle Spatial database containing polygons (lying in Austria) in Lambert projection (SRID=1000047), which we want to transform into WGS84 (SRID=8307). After performing

create table Table2 as (
  select ..., SDO_CS.TRANSFORM(geometry, 8307) as geometry, ...
from Table1)

the polygons in Table2 all lie practically on a single point north of Paris. What are we doing wrong?

Edit: As an example, the point [11.26555560027597,53.87928275206266] gets transformed to [2.3069645331040123,49.293822884973984]. I get the same results using SRID=4326 instead of 8307.

The sqlplus query select * from cs_srs where srid=100047 returns

PROJCS["LAMBERT",GEOGCS["GCS_MGI",DATUM["D_MGI",SPHEROID["Bessel_1841",6377397.1‌55,299.1528128]], PRIMEM["Greenwich",0],UNIT["Decimal Degree",0.017453292519943295]],PROJECTION["Lambert Conformal Conic"], PARAMETER["False_Easting",400000],PARAMETER["False_Northing",400000], PARAMETER["Central_Meridian",13.33333333333333],PARAMETER["Standard_Parallel_1",‌​46], PARAMETER["Standard_Parallel_2",49],PARAMETER["Scale_Factor",1], PARAMETER["Latitude_Of_Origin",47.5],UNIT["Meter",1]]
Was it helpful?

Solution

Your source SRID (1000047) is not a standard EPSG code, neither is it any coordinate system that ships with any version of Oracle: it looks like one you defined yourself. Can you show us the definition (select * from cs_srs where srid=1000047) ?

Looking at your input (11.26555560027597,53.87928275206266) - that does not look like any projection. It looks to me like some geodetic coordinates, possibly on a different datum than WGS84.

The coordinate system definition you use is that of the standard SRID 31287:

PROJCS[
  "MGI / Austria Lambert",
  GEOGCS["MGI",
    DATUM["Militar-Geographische Institut",
      SPHEROID[
        "Bessel 1841",
        6377397.155,
        299.1528128,
        AUTHORITY["EPSG", "7004"]],
      TOWGS84[577.326, 90.129, 463.919, 5.137, 1.474, 5.297, 2.4232],
      AUTHORITY["EPSG", "6312"]],
    PRIMEM["Greenwich", 0.000000, AUTHORITY["EPSG","8901"]],
    UNIT["degree (supplier to define representation)", 0.0174532925199433, AUTHORITY["EPSG", "9122"]],
    AXIS["Lat", NORTH],
    AXIS["Long", EAST],
    AUTHORITY["EPSG", "4312"]],
  PROJECTION ["Lambert Conformal Conic"],
  PARAMETER ["Latitude_Of_Origin", 47.5],
  PARAMETER ["Central_Meridian", 13.3333333333333333],
  PARAMETER ["Standard_Parallel_1", 49.0],
  PARAMETER ["Standard_Parallel_2", 46.0],
  PARAMETER ["False_Easting", 400000.0],
  PARAMETER ["False_Northing", 400000.0],
  UNIT["metre", 1.0, AUTHORITY["EPSG", "9001"]],
  AXIS["X", NORTH],
  AXIS["Y", EAST],
  AUTHORITY["EPSG", "31287"]]

The main difference with yours is that yours is missing the datum shift parameters. The other difference is that the standard parallels are reversed: parallel 1 is 49 and parallel 2 is 46 vs. 46 and 49 in your definition.

Here is what I get when I transform the geometry you posted as example (encoded using 31287):

select sdo_cs.transform (
  sdo_geometry(2003,31287,null,sdo_elem_info_array(1, 1003, 1),sdo_ordinate_array(607205.274999979, 528729.87700098, 607052.849999979, 528254.154000983, 607080.702999979, 528224.753000982, 607098.889999979, 528220.193000982, 607113.807999979, 528225.393000979, 607272.533999979, 528720.85100098, 607269.772999979, 528724.96700098, 607205.274999979, 528729.87700098)), 
  4326
) 
from dual;

SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(16.1442004, 48.62389, 16.1419009, 48.6196637, 16.1422641, 48.6193904, 16.1425084, 48.6193435, 16.1427132, 48.6193854, 16.1451079, 48.623787, 16.1450725, 48.6238249, 16.1442004, 48.62389))

The result looks fine to me. Can you verify that it is ?

What exact version of Oracle do you run? SRID 31287 exists since 10gR2.

The simplest seems to me to use srid 31287 for your data instead of the custom 100047.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top