グループ、
テーブル列ProductID, latitude,longitude,timestampGMT
があり、この境界ボックスまたはエンベロープ内にある ID の数をカウントするクエリを探しています。
役立つ提案。
グループ、
テーブル列ProductID, latitude,longitude,timestampGMT
があり、この境界ボックスまたはエンベロープ内にある ID の数をカウントするクエリを探しています。
役立つ提案。
SQL Server 2008
GEOGRAPHY
データ型をサポートします。
lat, lon
このデータ型の単一の列に格納し、そのSPATIAL
上にインデックスを作成してクエリで使用する必要があります。
SELECT m.*
FROM mytable
ON coords.STDistance(@mypoint) <= @mydistance
この質問は、コミュニティ ウィキであってはなりません。できれば切り替えてください。いずれにせよ、ここにあなたの答えがあります。
@Quassnoi は SQL 2008 の優れたソリューションを提供しましたが、あなたは 2003 を求めていますよね? 2003 には、2008 と同じ地理サポートがありません。私が行ったように、独自に作成する必要があります。必要な精度のレベルによっては、難しいことではありません。これは、2 組の座標間の距離を計算するための一般的な式に基づいて思いついたスカラー関数です。
-- =====================================================================
-- Author: Byron Sommardahl
-- Create date: June 15, 2007
-- Description: Calculates the distance between two sets of coordinates.
-- ======================================================================
CREATE FUNCTION [dbo].[Distance]
(
@lat1 float,
@long1 float,
@lat2 float,
@long2 float
)
RETURNS float
AS
BEGIN
RETURN (3958*3.1415926*sqrt((@lat2-@lat1)*(@lat2-@lat1) + cos(@lat2/57.29578)*cos(@lat1/57.29578)*(@long2-@long1)*(@long2-@long1))/180);
END
GO
これを使用するには、SELECT を使用して座標を入力するだけです。
SELECT dbo.Distance(MyPlace.Lat, MyPlace.Long, TheirPlace.Lat, TheirPlace.Long);
次に、製品が焦点の特定の半径内にあるかどうかを確認できます. 厳密にはバウンディング ボックスではありませんが、正しい方向に移動できます。
これも参照してください。