ユーザーが場所を選択して、いくつかの関心のあるポイント (POI) からの距離を表示できるアプリケーションがあります。
これらの距離を取得するときに、各 POI から次に近い場所と次に遠い場所の ID も取得したいと考えています。例えば。10 か所の場所があり、それぞれが特定の POI から 1 マイル離れているとします。POI の名前、その POI からの距離、次に近い場所の ID、次の場所の ID を返します。最も遠い場所。結果セットの行の例: 'Football Ground', '1.5', 24, 784 (表示している場所はサッカー場から 1.5 マイルで、場所 24 が次に近く、784 が次に遠いため) .
注: 表示している場所が POI に最も近いか、POI から最も離れている可能性があります。その場合、次に近いまたは最も遠い場所の ID として -1 を返す必要があります。近づいたり遠ざかったりしないでください。
できれば一文で済ませたい。2 点間の距離を計算する関数を作成し、アプリケーションで使用しています。
create FUNCTION [dbo].[fnc_calc_distance]
(
@lat1 as float,
@lng1 as float,
@lat2 as float,
@lng2 as float
)
RETURNS float
AS
BEGIN
declare @result as float
select @result = (3959*acos(cos(radians(@lat2))*cos(radians(@lat1))*cos(radians(@lng1)-radians(@lng2))+sin(radians(@lat2))*sin(radians(@lat1))))
RETURN @result
END
サンプルのテーブル構造/データは次のとおりです。
CREATE TABLE tbl_locations(
[houseID] [int] NOT NULL,
[lat] [decimal](14, 10) not NULL,
[lng] [decimal](14, 10) not NULL)
insert into tbl_locations
values (1, 54.9834400000, -1.6314250000)
insert into tbl_locations
values (2, 54.9860420000, -1.5912680000)
insert into tbl_locations
values (3, 54.9882050000, -1.5707710000)
CREATE TABLE tbl_poi(
[ID] [int] NOT NULL,
[name] [varchar](32) NOT NULL,
[lat] [decimal](14, 10) NOT NULL,
[lng] [decimal](14, 10) NOT NULL)
insert into tbl_poi
values (1, 'Football Ground', 54.9752430000, -1.6219210000)
insert into tbl_poi
values (1, 'Train Station', 54.9898610000, -1.6047600000)
SQL Server 2008 を使用しています。
前もって感謝します。
クリス