SQL Server中如何实现经纬度坐标向北移动固定米数
SQL Server中经纬度按指定米数向北偏移实现
借助geography空间类型的内置方法即可实现,计算逻辑和你之前用的STDistance共用同一套椭球面模型,精度可靠,不需要手动实现球面坐标换算公式。
实现代码
-- 初始化原始坐标点,注意WKT格式顺序为「经度 纬度」,SRID 4326对应通用WGS84坐标系 DECLARE @Origin GEOGRAPHY = GEOGRAPHY::STPointFromText('POINT(-0.124646 51.500709)', 4326); DECLARE @OffsetMeter INT = 50; -- 向北移动距离,单位米 -- 构造原始点所在经线向北极点延伸的正北方向线段 DECLARE @NorthLine GEOGRAPHY = GEOGRAPHY::STLineFromText( CONCAT('LINESTRING(', @Origin.Long, ' ', @Origin.Lat, ',', @Origin.Long, ' 90)'), 4326 ); -- 取原始点50米半径缓冲区与正北方向线的交点,即为偏移后的目标点 DECLARE @TargetPoint GEOGRAPHY = @Origin.STBuffer(@OffsetMeter).STIntersection(@NorthLine); -- 输出偏移后的坐标信息 SELECT @TargetPoint.STAsText() AS 目标点WKT, @TargetPoint.Lat AS 偏移后纬度, @TargetPoint.Long AS 偏移后经度;
注意事项
- 所有参与计算的空间实例必须使用相同SRID,如果你之前用
STDistance时采用了非4326的坐标系,替换成对应SRID即可。 - 不要搞反WKT的坐标顺序:
POINT结构内必须按「经度 纬度」顺序填写,顺序写反会定位到完全错误的位置。 - 该方案为椭球面精确计算,比“1度纬度约等于111km”的经验换算精度更高,不会因为所在纬度高低产生距离误差。
- 如需向其他方向偏移,只需要调整方向线段的构造逻辑:正南沿经线延伸至南纬90度,正东、正西沿所在纬线延伸至对应经度边界即可,非正方向偏移构造对应方位角的射线后做相同求交操作即可。
执行上述代码后,得到的偏移点和原始点用STDistance计算的距离正好为50米,偏移后纬度约为51.50116,经度基本保持不变,符合正北移动的预期。
内容的提问来源于stack exchange,提问作者CGarden
相关产品推荐
相关产品推荐

