3

次の SQL を使用して、固定された場所とデータベース内の会場に対する場所の間の距離を計算できます。

SELECT Location.STDistance(geography::Point(51, -2, 4326)) * 0.00062137119 FROM Venues

返される距離はマイル単位であり、Location フィールドは地理タイプであることに注意してください。

同じ値を返す.NETでこれに相当するものは何だろうと思っていました。このメソッドには、次の署名があります。

public static double Distance(location1Latitude, location1Longitude, location2Latitude, location2Longitude) {
    return ...;
}

.NET でデータベース メソッドを呼び出せることはわかっていますが、そうしたくありません。距離を計算する公式があることを願っています。ありがとう

4

3 に答える 3

7

Microsoft.SqlServer.Types.dll参照として追加するだけSqlGeometryで、メソッドの呼び出しを含め、他の .NET 型と同じように型を使用できると思いますSTDistance

于 2013-04-12T15:23:52.670 に答える
3

距離を手動で計算するには、地理的距離を計算する必要があります。これを行うためのさまざまな手法と式があり、それぞれに異なる基礎となる仮定 (例: 球体地球、楕円体地球など) があります。

一般的なオプションは hasersine 式で、C# の実装はこちらから入手できます

于 2013-04-12T15:19:33.533 に答える
1

これはここで非常によく説明されています。まもなく: EF5 で (より具体的には、.net 4.5 で) Microsoft はDbGeography型を含めました。すでに緯度/経度がたくさんあるとしましょう。次に、次のようなヘルパーを使用して DbGeography オブジェクトを簡単に作成できます。

public static DbGeography CreatePoint(double latitude, double longitude)
{
    var text = string.Format(CultureInfo.InvariantCulture.NumberFormat,
                             "POINT({0} {1})", longitude, latitude);
    // 4326 is most common coordinate system used by GPS/Maps
    return DbGeography.PointFromText(text, 4326);
}

2 つ以上のポイント (DbGeography) を取得すると、それらの間の距離を計算するためのすべてが得られます。

var distance = point1.Distance(point2)
于 2013-04-12T15:38:56.540 に答える