1

我已经收获了 2 个坐标-2.232121, 53.477724-2.231105, 53.478121根据谷歌地图相距 80 米。

然后,我将这些坐标转换为 .NET C# Spatial 类型,如下所示。

var pointA = DbGeography.FromText("POINT (53.477724 -2.232121)", 4326);

var pointB = DbGeography.FromText("POINT (53.478121 -2.231105)", 4326);

当我计算它们之间的距离时,我得到一个完全不同的值。

var distanceAB = pointA.Distance(pointB);//distanceAb = 120.712849327128 metres

我需要知道为什么这些结果不同,拜托。

谢谢。

4

2 回答 2

2

你有向后的纬度和经度:我在纬度之间有 80 米:53.477724,经度:-2.232121 和纬度:53.478121,经度:-2.231105 = 距离:0.08043 公里;如果我反转纬度/经度,我得到 0.1213 公里(在此页面上测试)

于 2013-11-09T00:02:07.397 回答
1

这也发生在我身上,我有很多代码,无法理解错误来自哪里以及为什么(在我的情况下,距离差异是数百公里),经过多次努力,我发现了这个问题。

问题:

POINT第一个参数是Longitude,第二个是Latitude这很奇怪,因为所有方法都接收作为第一个参数Latitude和第二个参数Longitude

例如:

//First latitude then longitude.
public GeoCoordinate(double latitude, double longitude)

而 POINT 则相反:

//First longitude then latitude.
String.Format("POINT ({0} {1})", location.Longitude, location.Latitude);

我不知道为什么相反,但我知道这里是出错的好地方。

解决方案:

只是为了改变坐标的位置:

var pointA = DbGeography.FromText("POINT (-2.232121 53.477724)", 4326);
var pointB = DbGeography.FromText("POINT (-2.231105 53.478121)", 4326);

var distanceAB = pointA.Distance(pointB); //distanceAB = 80.6382796064941 metres

或者更易读的语法:

double longitudeA = -2.232121;
double latitudeA = 53.477724;

double longitudeB = -2.231105;
double latitudeB = 53.478121;

int coordinateSystemId = 4326;

var pointA = DbGeography.FromText(String.Format("POINT ({0} {1})", longitudeA, latitudeA), coordinateSystemId);
var pointB = DbGeography.FromText(String.Format("POINT ({0} {1})", longitudeB, latitudeB), coordinateSystemId);

var distanceAB = pointA.Distance(pointB); //distanceAB = 80.6382796064941 metres
于 2013-11-09T08:21:53.263 回答