2

我们在 Oracle Spatial 数据库中有一个表,其中包含 Lambert 投影 (SRID=1000047) 中的多边形(位于奥地利),我们希望将其转换为 WGS84 (SRID=8307)。表演后

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

表 2 中的多边形实际上都位于巴黎以北的一个点上。我们做错了什么?

编辑:例如,该点[11.26555560027597,53.87928275206266]被转换为[2.3069645331040123,49.293822884973984]. 我使用 SRID=4326 而不是 8307 得到了相同的结果。

sqlplus 查询select * from cs_srs where srid=100047返回

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]]
4

1 回答 1

1

您的源 SRID (1000047) 不是标准 EPSG 代码,也不是任何版本的 Oracle 附带的任何坐标系:它看起来像您自己定义的。你能告诉我们定义吗(select * from cs_srs where srid=1000047)?

查看您的输入 (11.26555560027597,53.87928275206266) - 这看起来不像任何投影。在我看来,它像一些大地坐标,可能在与 WGS84 不同的基准上。

您使用的坐标系定义是标准 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"]]

与您的主要区别在于您缺少基准偏移参数。另一个区别是标准平行线是相反的:平行线 1 是 49,平行线 2 是 46,而您的定义中是 46 和 49。

这是我转换您作为示例发布的几何图形时得到的结果(使用 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))

结果对我来说看起来不错。你能验证它是吗?

您运行什么确切版本的 Oracle?SRID 31287 从 10gR2 开始存在。

在我看来,最简单的方法是为您的数据使用 srid 31287 而不是自定义的 100047。

于 2014-05-07T08:13:22.900 回答