Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#和谷歌地图中两个坐标之间的距离差_C#_Google Maps_Spatial - Fatal编程技术网

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