C#中2个坐标与谷歌地图之间的距离不同

时间:2013-11-08 23:40:26

标签: c# google-maps spatial

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

然后我将这些坐标转换为.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

我需要知道为什么这些结果会有所不同。

感谢。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

问题:

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

e.g:

//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