DbGeography.Distance()返回不正确的距离

时间:2013-04-15 19:41:59

标签: google-maps coordinates gis bing-maps geospatial

我正在尝试使用System.Data.Spatial.DbGeography,我想用它来确定从一个坐标到另一个坐标的距离(将存储在SQL服务器中)。

我的坐标是纬度/经度,我从Bing地图中得到它们(我也尝试使用Google地图的坐标,结果相同)。

var osloCentralStation = DbGeography.FromText("POINT(59.9109 10.7523)", 4326);
var drammen = DbGeography.FromText("POINT(59.7378 10.2050)", 4326);
Console.WriteLine("Distance: {0}km", osloCentralStation.Distance(drammen) / 1000);

返回: 距离:63,4340839088124km

返回的距离大约是应该的两倍。

https://maps.google.com/maps?saddr=59.9109+10.7523&daddr=59.7378+10.2050

有没有人知道发生了什么事?

2 个答案:

答案 0 :(得分:4)

您未按正确顺序声明WKT中的元素。 WKT应该在你的情况下:

POINT(10.2050 59.7378)

请参阅此处的OGC标准:

然后必须声明:

POINT(LONGITUDE LATITUDE)

另外请记住,它不是驾驶距离,而是空中距离。

答案 1 :(得分:0)

事实证明,在创建新的DbGeography对象时,lat / long被赋予long / lat。

我写了一个小助手方法,以便将来再也不会出错:

private static DbGeography CreateDbGeography(double latitude, double longitude, int srid = 0)
{
    var text = string.Format(CultureInfo.InvariantCulture.NumberFormat, "POINT({0} {1})", longitude, latitude);

    if (srid > 0)
    {
        return DbGeography.FromText(text, srid);
    }

    return DbGeography.FromText(text);
}