c# SqlGeography latitude & longitude 意外行为

c# SqlGeography latitude & longitude unexpected behavior

Microsoft.SqlServer.Types.SqlGeography.ToString 出现意外行为。

看看我的单元测试:

 latitude = 40.584474F;
 longitude = -111.633491F;
 var location = SqlGeography.Point( latitude, longitude, 4326 );
 var point = location.ToString();

此时变量point的值为: 点 (-111.63349151611328 40.58447265625)

如您所见,纬度和经度已与标准调换。

这是来自今天下载的 nuget 包。 (v11.0.2)

澄清: Object 值是正确的,但 ToString() 生成的格式不适合 SQL 服务器本身,即使在我看来,这是 SQL 服务器特定 class。

更新 2:这不是重复的,因为它与标题相似的问题不同,因为这是关于 .NET class (Microsoft.SqlServer.Types.SqlGeography.ToString),而不是 SQL 服务器本身。

纬度和经度没有调换。只是 Point() 构造函数在纬度之后接受经度,但是在 ToString() 中经度打印在纬度之前。

打印值 location.Latlocation.Long 以确定。

SQL 服务器 12 将接受:geography::Point(47.65100, -122.3490, 4326)。要生成 SQL 服务器可接受的字符串:

var point = ColValue as SqlGeography;
if (point != null)
return "geography::Point(" + point.Lat + ", " + point.Long + ", 4326)";