C#和谷歌地图中两个坐标之间的距离差
根据谷歌地图,我收集了两个坐标C#和谷歌地图中两个坐标之间的距离差,c#,google-maps,spatial,C#,Google Maps,Spatial,根据谷歌地图,我收集了两个坐标-2.232121、53.477724和-2.231105、53.478121,它们相距80米 然后我将这些坐标转换成.NETC#空间类型,如下所示 var pointA = DbGeography.FromText("POINT (53.477724 -2.232121)", 4326); var pointB = DbGeography.FromText("POINT (53.478121 -2.231105)", 4326); 当我计算它们之间的距离时,我
-2.232121、53.477724
和-2.231105、53.478121
,它们相距80米
然后我将这些坐标转换成.NETC#空间类型,如下所示
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
我需要知道为什么这些结果是不同的,请
谢谢。你把纬度和经度倒过来了:我在纬度:53.477724,经度:-2.232121和纬度:53.478121,经度:-2.231105=距离:0.08043公里之间有80米;如果我反转纬度/经度,我会得到0.1213公里(测试)这也发生在我身上,我有很多代码,无法理解错误的来源和原因(在我的情况下,距离的差异是数百公里),经过多次努力,我发现了问题 问题是:
点
第一个参数是经度
,第二个参数是纬度
,这很奇怪,因为所有方法都接收第一个参数纬度
,第二个参数经度
e、 g:
这一点正好相反:
//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
一个好问题是:哪一个是正确的?拿出一支铅笔和一张纸,算出球面三角,然后至少你会知道哪个是对的。你如何计算距离?使用平方增量的平方根的欧几里得距离对于地理坐标是不行的。哦,天哪,我觉得自己太傻了。。。谢谢,回答得很好
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