如何通过T-SQL将SQL Server Geometry的兰伯特投影坐标转EPSG:4269经纬度?
解决SQL Server中兰伯特投影转EPSG:4269的T-SQL方法
你的问题核心是未正确初始化兰伯特正形圆锥投影的参数,导致SQL Server Spatial Tools的转换结果无效。以下是两种可行的T-SQL实现方案:
方案1:正确配置SQL Server Spatial Tools的投影参数
兰伯特正形圆锥投影需要明确指定一系列关键参数(标准纬线、中央经线、原点坐标等),必须与原始数据的投影定义完全匹配才能得到正确结果。
示例代码
假设你的原始数据采用的是NAD83基准下的加拿大兰伯特投影(EPSG:3347),你可以替换为实际数据的投影参数:
DECLARE @LambertConformalConic LambertConformalConic; -- 初始化兰伯特投影对象,参数需严格匹配原始数据的投影定义 SET @LambertConformalConic = LambertConformalConic::Create( 4269, -- 目标地理坐标系SRID(NAD83) 49.0, -- 标准纬线1 77.0, -- 标准纬线2 -95.0, -- 中央经线 63.0, -- 原点纬度 0.0, -- 假东偏移 0.0 -- 假北偏移 ); -- 执行投影转换 SELECT @LambertConformalConic.UnprojectWithSRID('POINT (-305577.363799997 94517.064100001)', 4269).ToString();
关键注意事项
- 必须从数据元数据或提供者处获取原始投影的精确参数,参数不匹配会导致坐标完全失真。
- 如果原始数据的SRID已在EPSG数据库中注册,可以直接通过EPSG代码查询对应的投影参数。
方案2:利用SQL Server原生空间函数(需SRID已注册)
如果原始数据的投影SRID已在SQL Server的空间参考系统中注册,可以直接通过Geometry转Geography后调用STTransform完成转换:
示例代码
-- 假设你的表名为your_table,几何字段为geom,原始投影SRID为3347 SELECT geography::STGeomFromText(geom.STAsText(), 3347) .STTransform(4269) .ToString() AS nad83_coords FROM your_table;
关键注意事项
- 如果原始投影的SRID未在SQL Server中注册,需要先通过
sys.sp_addextendedproperty手动添加空间参考定义,否则STGeomFromText会报错。
内容的提问来源于stack exchange,提问作者MWInCO
相关产品推荐
相关产品推荐

