1

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

これらの結果が異なる理由を知る必要があります。

ありがとう。

4

2 に答える 2

2

緯度と経度が逆になっています。緯度: 53.477724、経度: -2.232121 と緯度: 53.478121、経度: -2.231105 = 距離: 0.08043 km の間に 80 メートルあります。緯度/経度を逆にすると、0.1213 km になります (このページでテスト済み) 。

于 2013-11-09T00:02:07.397 に答える
1

これは私にも起こりました。私はたくさんのコードを持っていて、バグがどこから来て、その理由を理解できませんでした (私の場合、距離の違いは数百キロメートルでした)。多くの努力の結果、問題を発見しました。

問題:

POINTすべてのメソッドが最初のパラメーターと 2 番目のパラメーターとして受け取るため、最初のパラメーターはLongitudeであり、2 番目のパラメーターは奇妙です。LatitudeLatitudeLongitude

例えば:

//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
于 2013-11-09T08:21:53.263 に答える