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

SQL Server中Geography Point类型经纬度顺序问题咨询

问题解答

这不是你的操作错误,是文档表述的歧义导致的误解——文档里说的“先传入纬度”针对的是**geography::Point()构造函数**的参数顺序,而非直接使用WKT(Well-Known Text)字符串赋值的顺序。

核心原因:两种创建方式的参数规则不同

SQL Server的geography类型遵循OGC(开放地理空间信息联盟)标准:

  • 使用WKT字符串创建:POINT的语法是POINT(<经度> <纬度>),第一个值是经度,第二个是纬度。
  • 使用Point()构造函数创建:语法是geography::Point(<纬度>, <经度>, <SRID>),第一个参数是纬度,第二个是经度,这才是文档里描述的“先传纬度”的场景。

对应你的测试案例

你使用的是WKT字符串赋值:

DECLARE @g geography = 'POINT(51.486625 5.380910)';
select @g.Lat as lat,@g.Long as long

这里第一个值51.486625被解析为经度,第二个值5.380910被解析为纬度,所以查询结果里lat是5.38091、long是51.486625,完全符合WKT的规则。

如果颠倒WKT里的顺序,写成:

DECLARE @g geography = 'POINT(5.380910 51.486625)';
select @g.Lat as lat,@g.Long as long

此时lat会返回51.486625,long返回5.380910,和你预期的一致。

如果用文档描述的构造函数方式,写法应该是:

DECLARE @g geography = geography::Point(51.486625, 5.380910, 4326); -- 4326是常用的WGS84坐标系SRID
select @g.Lat as lat,@g.Long as long

这时候结果就会和文档描述一致,lat为51.486625,long为5.380910。

总结

文档的描述没有覆盖WKT字符串的场景,仅针对Point()构造函数,属于表述不够全面导致的混淆,你的测试结果是正确的,并非操作错误。

内容的提问来源于stack exchange,提问作者Connor Stoop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:52:17