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