1

LocationC#で2つの間の距離を取得するにはどうすればよいですか? また、デバイスのコンパス値があれば、2 つの場所の間の方向を取得できれば非常に便利です。

これのためのAPIはありますか?

4

1 に答える 1

1

場合によります。場所とはどういう意味ですか?

ケース 1: 場所が地理的なポイント (緯度、経度) の場合

球面ジオメトリを通過する必要があります。実際、球体 (または楕円体やその他の球体) で計算を行う必要があります。しかし、このような複雑な計算を避ける最善の方法は、Microsoft.SqlServer.Types.dll(v.10 または v.11) を使用することです。システムに SQL Server 2012 (または 2008) がインストールされている場合は、次のような場所にあります (それ以外の場合は、Web からダウンロードできます)。

"C:\Program Files\Microsoft SQL Server\110\Shared\Microsoft.SqlServer.Types.dll"

次に、この dll を使用して 2 つのSqlGeography型を宣言し、メソッドを呼び出すとSTDistance()、すべてが正しく行われます。(ここで失われた問題があることを思い出してください。これ以上複雑にするつもりはありません)。コードは次のとおりです。

SqlGeography p1 =
SqlGeography.STPointFromText(new System.Data.SqlTypes.SqlChars("POINT( lat1, long1)"), 4326); // SRID of WGS84: 4326

SqlGeography p2 =
SqlGeography.STPointFromText(new System.Data.SqlTypes.SqlChars("POINT( lat2, long2)"), 4326); // SRID of WGS84: 4326

double distance = p1.STDistance(p2).Value;

ケース 2: 位置が平面上の単純なローカル 2D ポイント (x, y) の場合

この場合、有名な式を使用して距離を計算できます。

double distance = Math.Sqrt(dx*dx + dy*dy); //dx and dy are the difference of the x and y of the two points
于 2013-02-15T15:46:26.877 に答える