这个问题多次发布,但由于结果不正确,我不得不发布相同的内容。任何人都可以帮助我做错事。
我需要的是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_Master
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作为我的数据库。
答案 0 :(得分: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