2

地図上にグリッドを表示しています。あなたの位置と地図上の 2 つのオブジェクトの位置を知っています。グリッド線が交差する場所にオブジェクトが表示されます。地図上の領域は短い距離にすぎないため、世界は丸ではなく平らであると考えてください。パフォーマンス上の理由から、三角法と乗算を使用せずに、どのオブジェクトが最も近いかを判断したいと考えています。大まかな指示を得るだけで、正確さを求めているわけではありません。現在地からの緯度と経度の差の最短距離を特定できるはずです。私のテーブル、場所は次のようになります。

ID   Latitude   Longitude
1       50         70
2       30         40

私の場所が緯度 = 40 で経度 = 60 の場合、ID = 1 の場所が私に近いことになります。

私の場所が緯度 = 30 で経度 = 60 の場合、おそらく両方の場所がほぼ同じ距離にあるため、どちらかを選択します。

私の場所が緯度 = 30 で経度 = 50 の場合、ID = 2 の場所が近くなります。

4

3 に答える 3

4

あらゆる種類の精度を得るには、実際に三角法を使用する必要があります。

DECLARE @LocationTable TABLE(ID int, Latitude int, Longitude int)
INSERT INTO @LocationTable(ID, Latitude, Longitude)
VALUES
    (1,50,70),
    (2,30,40)

DECLARE
    @MyLatitude int = 90,
    @MyLongitude int = 40

WITH DistanceTable AS
(
    SELECT ID, Latitude, Longitude,
        SQRT(POWER(Latitude - @MyLatitude,2) + POWER(Longitude - @MyLongitude, 2)) AS Distance
    FROM @LocationTable
)
SELECT ODT.ID, ODT.Latitude, ODT.Longitude, ODT.Distance
FROM (SELECT ID, Latitude, Longitude, Distance, ROW_NUMBER() OVER(ORDER BY Distance) AS Position
    FROM DistanceTable) AS ODT
WHERE ODT.Position = 1;
于 2012-04-30T12:19:30.187 に答える
2

違いの合計を少しだけ計算します。私はそれを試してみましたが、かなりうまくいきます。

SELECT MIN(ABS(s.Latitude - 47) + ABS(s.Longitude - -122)), s.ID FROM Sites as s Group By ID;
于 2012-04-30T12:00:58.183 に答える
1

SELECT MIN(((s.Latitude - @lat) (s.Latitude - @lat)) + ((s.Longitude - @lon) (s.Longitude - @lon))), s.ID FROM Sites as s Group ID別;

于 2012-04-30T12:19:30.620 に答える