You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL/SQL Server中将XY坐标转换为经纬度(附Oracle示例)

在MySQL/SQL Server中实现ARM-DAT投影坐标转WGS84经纬度

我在Oracle中有一个带XY坐标的点几何对象:

"MDSYS"."SDO_GEOMETRY"(2001,2400000,"MDSYS"."SDO_POINT_TYPE"(8452842.1981,4443992.9047,NULL),NULL,NULL)

用下面的语句可以把它转换成WGS84经纬度格式:

SELECT SDO_CS.TRANSFORM("MDSYS"."SDO_GEOMETRY"(2001,2400000,"MDSYS"."SDO_POINT_TYPE"(8452842.1981,4443992.9047,NULL),NULL,NULL), 4326) FROM DUAL

转换结果为:

"MDSYS"."SDO_GEOMETRY"(2001,4326,"MDSYS"."SDO_POINT_TYPE"(44.4467355804591,40.1282575487861,NULL),NULL,NULL)

现在需要在MySQL或SQL Server中对相同的XY坐标(8452842.1981,4443992.9047)执行经纬度转换,对应的投影参数翻译为中文如下:

投影坐标系["亚美尼亚GK-8 (ARM-DAT)",
地理坐标系 [ "ARM大地坐标系",
基准面["ARM-DAT(EPSG编码2400001)",
椭球体["克拉索夫斯基1940(EPSG编码7024)", 6378245.0, 298.3],
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
本初子午线 [ "格林尼治", 0.000000 ],
单位["十进制度", 0.0174532925199433]],
投影方式["横轴墨卡托"],
参数 ["原点纬度", 0.0],
参数 ["中央经线", 45.0],
参数 ["比例因子", 1.0],
参数 ["东伪偏移", 8500000.0],
参数 ["北伪偏移", 0.0],
单位["米", 1.0]]


MySQL转换方法

MySQL的ST_Transform函数支持自定义投影参数,因为ARM-DAT(EPSG:2400000)不在默认内置SRID列表里,直接用PROJ.4格式的投影字符串即可:

SELECT ST_AsText(
    ST_Transform(
        ST_GeomFromText('POINT(8452842.1981 4443992.9047)', 0),
        '+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs',
        4326
    )
) AS wgs84_point;

执行后会得到结果:POINT(44.4467355804591 40.1282575487861)


SQL Server转换方法

SQL Server需要先注册自定义空间参考,再执行转换:

  1. 注册自定义SRID(用和Oracle一致的2400000):
INSERT INTO sys.spatial_reference_systems (
    spatial_reference_id,
    authority_name,
    authority_key,
    well_known_text,
    unit_of_measure,
    unit_conversion_factor
)
VALUES (
    2400000,
    'EPSG',
    '2400000',
    'PROJCS["Armenia GK-8 (ARM-DAT)",GEOGCS["ARM-Geodetic",DATUM["ARM-DAT (EPSG ID 2400001)",SPHEROID["Krassowsky 1940 (EPSG ID 7024)",6378245.0,298.3],0.0,0.0,0.0,0.0,0.0,0.0,1.0],PRIMEM["Greenwich",0.000000],UNIT["Decimal Degree",0.0174532925199433]],PROJECTION["Transverse Mercator"],PARAMETER["Latitude_Of_Origin",0.0],PARAMETER["Central_Meridian",45.0],PARAMETER["Scale_Factor",1.0],PARAMETER["False_Easting",8500000.0],PARAMETER["False_Northing",0.0],UNIT["Meter",1.0]]',
    'Meter',
    1.0
);
  1. 执行坐标转换:
SELECT 
    geometry::STGeomFromText('POINT(8452842.1981 4443992.9047)', 2400000)
    .STTransform(4326)
    .ToString() AS wgs84_point;

执行后会得到结果:POINT (44.4467355804591 40.1282575487861)

内容的提问来源于stack exchange,提问作者Tigran Shahnazaryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:52:15