我正在尝试使用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
有没有人知道发生了什么事?
答案 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);
}