0

この質問は何度も投稿されましたが、間違った結果が得られたため、同じものを投稿する必要がありました。何が間違っているのか誰でも助けてくれますか。

私が必要としているのは、Cust_Master で指定された顧客の最も近い倉庫名と、WH と顧客の間の距離です。

以下のように2つのテーブルがあります。

WH_マスター

WH_Name      Latitude   Longitude
-----------  ---------  ---------
Horamavu     13.02457   77.65723
White Field  12.985278  77.729899
Hennur       13.030672  77.634034

Cust_Master

Cust_ID  Latitude   Longitude
-------  ---------  ---------
Cust-1   13.025579  77.6515 

以下のオプションを試しましたが、間違った距離と場所が表示されます。この例の現在の顧客の場合、Horamavu が最寄りの倉庫であり、Google によると距離は 1.8 KM です。しかし、間違っている 0.751 を取得しています。

私が使用したクエリは以下のとおりです。

SELECT Top 1 WH_Name, (( 6367.45 * acos( cos( radians(13.025579) ) * cos( radians( Latitude ) ) * cos( radians( Longitude ) - radians(77.6515) ) + sin( radians(13.025579) ) * sin( radians( Latitude ) ) ) )) AS distance_KM FROM WH_Master

残念ながら、これは私と同じWH_Nameになり、距離も間違っています。正しいクエを教えてください。データベースとして MS SQL Server を使用しています。

4

1 に答える 1

0

SQL 2008 以降を使用している場合は、geographyデータ型とSTDistance関数を使用する必要があります。

例えば:

declare @t table (wh_name nvarchar(50), p geography)
insert @t values 
('horamavu',geography::STGeomFromText('POINT(13.02457 77.65723)', 4326)),
('white field',geography::STGeomFromText('POINT(12.985278  77.729899)', 4326)),
('hennur', geography::STGeomFromText('POINT(13.030672  77.634034)', 4326))

select wh_name, 
    p.STDistance(geography::STGeomFromText('POINT(13.025579 77.6515)', 4326)) distance_m
from @t
order by distance_m

Google の距離は、経由地の距離ではなく、カラスが飛ぶ距離であると確信していますか?

元のクエリについては、TOP必要に応じて指定する必要がありますORDER BY

于 2013-09-23T06:52:03.843 に答える