我有一个带有空间数据的Oracle数据库,其中坐标以RD格式存储(srid 28992)。要将它们放在地图上(带有openstreetmap的传单),我需要WGS84(srid 4326)格式的坐标。
我应该能够使用SDO_CS.TRANSFORM获取该格式的坐标。当我这样做时,所有坐标似乎都向东移动了大约6米。
验证表中存储的数据没有问题,我创建了一个查询,它采用RD坐标155000,463000并将其转换为WGS84。从那个查询我得到:52,1551639130507 5,38735225721137
如果我在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中的转换会改变坐标吗?
答案 0 :(得分:1)
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 select wktext3d from cs_srs where 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数据搜索
时你得到了一堆变换。我认为你必须进行更深入的调查。
答案 1 :(得分:0)
对于那些遇到类似问题的人。
正如在接受的答案中指出的那样,转换参数有各种不同的值。要在 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 缓存了这些值。为了使这些更改生效,您必须注销并开始新的会话。