これは私にも起こりました。私はたくさんのコードを持っていて、バグがどこから来て、その理由を理解できませんでした (私の場合、距離の違いは数百キロメートルでした)。多くの努力の結果、問題を発見しました。
問題:
POINT
すべてのメソッドが最初のパラメーターと 2 番目のパラメーターとして受け取るため、最初のパラメーターはLongitude
であり、2 番目のパラメーターは奇妙です。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