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

SQL Server中如何交换geography类型Polygon的经纬度顺序

交换SQL Server Geography类型Polygon坐标顺序方案

方案1:自定义转换函数(全版本兼容)

你可以创建一个自定义标量函数,遍历Polygon的所有顶点,交换经纬度顺序后拼接为需要的WKT格式:

CREATE FUNCTION dbo.SwapPolygonLatLong(@geo geography)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @pointCount INT = @geo.STNumPoints();
    DECLARE @result NVARCHAR(MAX) = 'POLYGON ((';
    DECLARE @i INT = 1;
    
    WHILE @i <= @pointCount
    BEGIN
        DECLARE @point geography = @geo.STPointN(@i);
        -- 按纬度在前、经度在后拼接坐标
        SET @result += CONCAT(@point.Lat, ' ', @point.Long, CASE WHEN @i < @pointCount THEN ', ' ELSE '' END);
        SET @i += 1;
    END
    
    SET @result += '))';
    RETURN @result;
END

使用方式:

SELECT TOP 1 dbo.SwapPolygonLatLong(KMLLocation) FROM Polygon

方案2:单次查询快速转换(仅支持SQL Server 2017及以上版本)

如果不需要复用逻辑,单次查询可以直接用系统函数实现:

SELECT TOP 1 
    'POLYGON ((' + STRING_AGG(CONCAT(p.Lat, ' ', p.Long), ', ') + '))' AS SwappedPolygon
FROM Polygon
CROSS APPLY (
    SELECT 
        KMLLocation.STPointN(n.number).Lat AS Lat,
        KMLLocation.STPointN(n.number).Long AS Long
    FROM master..spt_values n
    WHERE n.type = 'P' AND n.number BETWEEN 1 AND KMLLocation.STNumPoints()
) t

注意事项

  • 上述示例默认处理单环Polygon,如果你存储的是带内部空洞的多环Polygon,需要额外遍历STNumGeometries获取所有内环后再做坐标交换
  • Geography类型本身遵循OGC标准存储为「经度在前、纬度在后」,如果只是输出需要调整顺序,不要修改原始存储的geography字段值,避免后续空间计算、索引等功能异常

内容的提问来源于stack exchange,提问作者Keerthi Srilal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:45:04