两个坐标之间的距离
Distance Between 2 Coordinates
使用下面 SQL 中的查询,我试图获取源坐标和目标坐标之间的距离:
DECLARE @source geography = 'POINT(42.3629 -121.3897)'
DECLARE @target geography = 'POINT(47.2921 -111.469)'
SELECT @source.STDistance(@target)
但是,我收到以下错误:
> Msg 6522, Level 16, State 1, Line 55 A .NET Framework error occurred
> during execution of user-defined routine or aggregate "geography":
> System.FormatException: 24201:
> Latitude values must be between -90 and 90 degrees.
错误表明我的纬度值超出范围,但 42 和 47 值在范围内。只要经度减少到指定纬度范围内的某个值,此代码就会起作用。
错误的转换发生在哪里?
用于表示地理值的 WKT 格式使用 (X Y)
坐标顺序,通常映射到 (longitude latitude)
。 MS SQL 也使用此命令,请在此处查看此格式用法的示例:
https://docs.microsoft.com/en-us/sql/t-sql/spatial-geography/spatial-types-geography?view=sql-server-ver15
所以你有 lat/lng 顺序交换,请改用 'POINT(-121.3897 42.3629)'
。
使用下面 SQL 中的查询,我试图获取源坐标和目标坐标之间的距离:
DECLARE @source geography = 'POINT(42.3629 -121.3897)'
DECLARE @target geography = 'POINT(47.2921 -111.469)'
SELECT @source.STDistance(@target)
但是,我收到以下错误:
> Msg 6522, Level 16, State 1, Line 55 A .NET Framework error occurred
> during execution of user-defined routine or aggregate "geography":
> System.FormatException: 24201:
> Latitude values must be between -90 and 90 degrees.
错误表明我的纬度值超出范围,但 42 和 47 值在范围内。只要经度减少到指定纬度范围内的某个值,此代码就会起作用。
错误的转换发生在哪里?
WKT 格式使用 (X Y)
坐标顺序,通常映射到 (longitude latitude)
。 MS SQL 也使用此命令,请在此处查看此格式用法的示例:
https://docs.microsoft.com/en-us/sql/t-sql/spatial-geography/spatial-types-geography?view=sql-server-ver15
所以你有 lat/lng 顺序交换,请改用 'POINT(-121.3897 42.3629)'
。