根据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
我需要知道为什么这些结果会有所不同。
感谢。
答案 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