0

这个问题被发布了很多次,但由于得到的结果不正确,我不得不再次发布相同的问题。任何人都可以帮助我做错了什么。

我需要的是 Cust_Master 中给定客户的最近仓库名称以及 WH 和客户之间的距离

我有 2 张桌子,如下所示。

WH_Master

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

客户大师

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

我尝试了以下选项,它给了我错误的距离和位置。对于示例中的当前客户,Horamavu 是最近的仓库,根据谷歌,距离为 1.8 公里。但是我得到 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

你确定谷歌距离是乌鸦飞的距离,而不是公路距离吗?

至于您的原始查询,如果您愿意,TOP您需要指定ORDER BY

于 2013-09-23T06:52:03.843 回答