调整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))
代码说明
- 提取坐标核心内容:先用
REPLACE移除POLYGON ((和))的包裹,得到原始坐标对列表 - 拆分坐标对:通过
STRING_SPLIT按,拆分每个独立的坐标对 - 格式化经纬度精度:用
LEAD函数配对经度与纬度值,通过ROUND(...,6)将每个数值保留6位小数 - 拼接目标格式:利用
STRING_AGG将格式化后的坐标对用','拼接,再补充前后单引号,完全匹配你需要的WHERE子句使用格式 - 去重冗余点:多边形的起始点会重复出现,通过过滤条件去掉重复项,避免无效坐标
处理后输出的每个经纬度值都会保留6位小数,完全匹配目标数据的精度要求,无需手动修改。
内容的提问来源于stack exchange,提问作者A.Steer
相关产品推荐
相关产品推荐

