当前位置: 首页 > 知识库问答 >
问题:

甲骨文SDO_CS。变换在从 RD 转换为 WGS84 时会转换坐标

全卜霸
2023-03-14

我有一个包含空间数据的Oracle数据库,其中坐标以RD格式存储(srid 28992)。要将它们放在地图上(带有开放街道地图的传单),我需要WGS84(srid 4326)格式的坐标。

我应该能够通过使用SDO_CS来获取该格式的坐标。变换。当我这样做时,所有坐标似乎都向东移动了大约6米。

为了验证表中存储的数据没有问题,我创建了一个查询,该查询采用RD坐标155000463000,并将其转换为WGS84。从该查询中,我得到:521551639130507 538735225721137

如果我对op做同样的变换http://www.gpscoordinaten.nl/converteer-gps-coordinaten.php我得到52.15517,5.38721(这是正确的坐标)

使用的查询是这样的:

SELECT
  t.X,
  t.Y
FROM
  (
    SELECT
      SDO_CS.TRANSFORM( MDSYS.SDO_GEOMETRY( 2001, 28992, MDSYS.SDO_POINT_TYPE(
      155000, 463000, NULL ), NULL, NULL ), 4326 ) AS geometry
    FROM
      dual
  )
  geo,
  TABLE( SDO_UTIL.GETVERTICES( geo.geometry ) ) t;

知道为什么Oracle中的转换会移动坐标吗?

共有2个答案

蒋健
2023-03-14

对于那些带着类似问题登陆这里的人来说。

正如公认的答案所指出的,变换参数有各种值。要在Oracle中更改SRID 28992的转换参数,必须执行以下操作:

update mdsys.sdo_datums set
  shift_x = 565.2369,
  shift_y = 50.0087,
  shift_z = 465.658,
  rotate_x = -0.406857330322398,
  rotate_y = 0.350732676542563,
  rotate_z =  -1.8703473836068 ,
  scale_adjust = 4.0812
where datum_id = 6289;

commit;

begin SDO_CS.UPDATE_WKTS_FOR_EPSG_DATUM(6289);
end;

commit;

我花了一些时间才弄清楚Oracle缓存了这些值。为了使这些更改生效,您必须注销并启动一个新会话。

晁砚
2023-03-14

看看这个 http://epsg.io/28992

PROJCS["Amersfoort / RD New",
    GEOGCS["Amersfoort",
        DATUM["Amersfoort",
            SPHEROID["Bessel 1841",6377397.155,299.1528128,
                AUTHORITY["EPSG","7004"]],
            TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725],
            AUTHORITY["EPSG","6289"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4289"]],
    PROJECTION["Oblique_Stereographic"],
    PARAMETER["latitude_of_origin",52.15616055555555],
    PARAMETER["central_meridian",5.38763888888889],
    PARAMETER["scale_factor",0.9999079],
    PARAMETER["false_easting",155000],
    PARAMETER["false_northing",463000],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["X",EAST],
    AXIS["Y",NORTH],
    AUTHORITY["EPSG","28992"]]

但是对于Oracle<code>来说,从cs_srs中选择wktext3d,其中srid=28992 你得到了什么

PROJCS[ "Amersfoort / RD New", 
    GEOGCS["Amersfoort", 
        DATUM["Amersfoort", 
        SPHEROID[ "Bessel 1841", 6377397.155, 299.1528128, 
            AUTHORITY["EPSG", "7004"]], 
        TOWGS84[593.16, 26.15, 478.54, -1.304398008226, -0.103297414969, -1.144501530423, 4.0775], 
            AUTHORITY["EPSG", "6289"]], 
        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", "4289"]], 
    PROJECTION ["Oblique Stereographic"], 
    PARAMETER ["Latitude_Of_Origin", 52.1561605555555556], 
    PARAMETER ["Central_Meridian", 5.3876388888888889], 
    PARAMETER ["Scale_Factor", 0.9999079], 
    PARAMETER ["False_Easting", 155000.0], 
    PARAMETER ["False_Northing", 463000.0], 
    UNIT["metre", 1.0, 
        AUTHORITY["EPSG", "9001"]], 
    AXIS["X", EAST], 
    AXIS["Y", NORTH], 
    AUTHORITY["EPSG", "28992"]]

您会看到 TOWGS84 参数不同。

也许您应该在https://gis.stackexchange.com/讨论这个问题,或者询问Oracle技术支持,看他们是否在参考资料中放入了错误的数据。

附加组件

在 http://www.epsg-registry.org/ 查看官方 EPSG 数据

当您搜索

  • Tpye = 坐标转换 - 单个
  • 阿拉 = 荷兰

你得到了一堆转变。我认为你必须做一些更深入的调查。

 类似资料:
  • 我一直试图将新西兰使用的横向墨卡托投影(http://www.linz.govt.nz/data/geodetic-system/datums-projections-and-heights/projections/new-zealand-transverse-mercator-2000)的一些变体NZTM2000转换为WSG84的方位/经度坐标,但没有成功。 NZTM2000规范规定TM配置有以

  • 功能介绍 坐标转换(Convert)是从一种坐标系统变换到另一种坐标系统的过程,可以通过建立两个坐标系统之间一一对应的关系来实现,是各种比例尺地图测量和编绘中建立地图数学基础必不可少的步骤。坐标转换服务实现了四维高德坐标、百度坐标、搜狗等坐标之间相互转换的功能。 注:该服务不支持将偏移GPS坐标(如:百度坐标、高德坐标等)转换为未偏移GPS坐标。 适用场景 按需实现现有坐标系到需求坐标系之间的转换

  • 实现四维高德坐标、百度坐标、搜狗等坐标之间的转换。注意:不支持将偏移GPS坐标(如:百度坐标、高德坐标等)转换为未偏移GPS坐标。 使用服务前需要先申请 key。 资源服务地址:https://www.supermapol.com/iserver/services/coordconvert/rest/coordinate/convert 资源接口参数说明 坐标转换服务服务支持GET和HEAD请求,

  • 给定的是一个旋转的矩形,该矩形内接到另一个矩形中<两个矩形都有自己的坐标系 在该区域中 我对变换矩阵的尝试(setRotate() 如何计算P点相对于外矩形的位置? 提前感谢!

  • 问题内容: 在SQL 9(2005)中创建了一个存储过程,此后已升级到SQL 10(2008)。从那时起,以下存储过程停止工作并引发上述错误: 传入的参数@vPortalUID包含:2A66057D-F4E5-4E2B-B2F1-38C51A96D385。我执行这样的存储过程: 它跌倒了。我也尝试过转换。仍然没有喜悦。也具有将{}括起来的价值。我如上所述以编程方式和手动方式删除了这些内容。 如果您

  • 我似乎无法让一种坐标格式与另一种格式配合使用。我想我只是没有使用正确的矩阵,但我对它们的了解还不够确定。我希望得到一些帮助,弄清楚我是否在假设我的转换应该是什么。 iText使用左下角作为ISO标准的原点,但pdfbox代码和从pdf中获取坐标的程序都使用左上角作为原点。 我应该做什么转换来调整坐标,以便iText能够以一种有效的方式使用它们? 我有一些代码,使用pdfbox来操作pdf并去除一些