2013-09-23 1 views
0

이 질문은 여러 번 게시했지만 다시 나는 잘못된 결과로 인해 같은 게시해야했다. 아무도 내가 잘못하고있는 일을 도울 수 있습니까?Sql 질문을 caculate 2 위도와 경도 사이의 거리

은 무엇 내가 필요한 것은 내가 다음과 같이 두 테이블이 WH 및 고객

사이 Cust_Master과의 거리에 주어진 고객의 가장 가까운 창고의 이름입니다.

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

내가 아래 옵션을 시도하고 나에게 잘못된 거리와 위치를 제공 WH_Master

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

Cust_Master

. 예를 들어 Horamavu의 현재 고객은 가장 가까운 창고이고 Google 당 거리는 1.8KM입니다. 그러나 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

구글에 의해 반환되는 거리 KM 또는 마일에있는 경우 당신은 확인 했나요? –

+0

Google에 따르면 1.8Km이고 휴대 전화는 0.751을 반환했습니다. – Subash

+1

검색어의 숫자는 어디서 오는 것입니까? 예제 테이블의 숫자가 다릅니다. 왜 테이블에서 선택하고 있지만 프로젝션에 상수 만 있습니까? – jboi

답변

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