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

调整SQL Server地理STBuffer输出的经纬度精度至6位小数

在SQL Server中格式化Geography缓冲区输出为6位小数的经纬度字符串

你当前通过STBuffer(1)生成1米范围的多边形后,直接对ToString()结果做字符串替换得到坐标串,但输出的小数位数过长,无法匹配目标数据(Doogal.co.uk、英国国家统计局邮编数据)的6位小数精度。要自动将所有经纬度值保留6位小数,可以通过拆解坐标并逐个格式化的方式实现:

解决方案代码

DECLARE @g geography  
SET @g = geography::STGeomFromText('point(-0.124663 51.499840)', 4326)    

-- 提取并格式化多边形的坐标点
SELECT 
    CONCAT(
        '''',
        STRING_AGG(
            CONCAT(ROUND(CAST(value AS FLOAT), 6), ' ', ROUND(CAST(LEAD(value) OVER(ORDER BY (SELECT NULL)) AS FLOAT), 6)),
            ''','''
        ),
        ''''
    ) AS FormattedCoordinates
FROM 
    STRING_SPLIT(
        REPLACE(REPLACE(@g.STBuffer(1).ToString(), 'POLYGON ((', ''), '))', ''),
        ', '
    )
WHERE 
    -- 过滤掉多边形首尾重复的起始点
    value != LEAD(value) OVER(ORDER BY (SELECT NULL))

代码说明

  1. 提取坐标核心内容:先用REPLACE移除POLYGON ((和))的包裹,得到原始坐标对列表
  2. 拆分坐标对:通过STRING_SPLIT按, 拆分每个独立的坐标对
  3. 格式化经纬度精度:用LEAD函数配对经度与纬度值,通过ROUND(...,6)将每个数值保留6位小数
  4. 拼接目标格式:利用STRING_AGG将格式化后的坐标对用','拼接,再补充前后单引号,完全匹配你需要的WHERE子句使用格式
  5. 去重冗余点:多边形的起始点会重复出现,通过过滤条件去掉重复项,避免无效坐标

处理后输出的每个经纬度值都会保留6位小数,完全匹配目标数据的精度要求,无需手动修改。

内容的提问来源于stack exchange,提问作者A.Steer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:13:19