관리 메뉴

nalaolla

거리계산 최종정리 본문

MS-SQL

거리계산 최종정리

날아올라↗↗ 2015. 12. 20. 13:45
728x90
반응형
  1. /*
  2. ** 거리계산
  3. */
  4. declare @x float    --현재위치 위도
  5. declare @y float    --현재위치 경도
  6. declare @dx float   --위치 위도
  7. declare @dy float   --위치 경도
  8.  
  9. SET @x = 37.486273
  10. SET @y = 126.995882
  11.  
  12. SET @dx = 35.177286
  13. SET @dy = 126.900247
  14.  
  15. SELECT (6371 * ACOS(COS(RADIANS(@x)) * COS(RADIANS(@dx))
  16. *COS(RADIANS(@dy) - RADIANS(@dy)) + SIN(RADIANS(@x)) * SIN(RADIANS(@dx)))) AS distance;
  17.  
  18.  
  19.  
  20. -- select (6371 * acos( cos( radians(nowLat) ) * cos( radians( setLat ) ) * cos( radians( setLng ) - radians(nowLng) ) + sin( radians(nowLat) ) * sin( radians( setLat ) ) ) ) as distance;
  21.  
  22.  SELECT  ROUND(6371 * acos( cos( radians(37.486273) ) * cos( radians( 35.177286 ) ) * cos( radians( 126.900247 ) - radians(126.900247) ) + sin( radians(37.486273) ) * sin( radians( 35.177286 ) ) )2) AS distance;
  23.  
  24.  
  25.  
  26.  
  27.  
  28. --이게 정확한듯 함..
  29. declare @lat    FLOAT
  30. declare @lon    FLOAT
  31.    
  32. SET @lat = 37.502969
  33. SET @lon = 127.035272
  34. SELECT *, (3956 * 2 * ASIN(SQRT(  POWER(SIN((@lat - (nposY/1000000)) * pi()/180 / 2)2) + 
  35.  
  36.         COS(@lat * pi()/180) *  COS((nposY/1000000) * pi()/180) *  POWER(SIN((@lon - (nposX/1000000)) * pi()/180 / 2),2)  )) )
  37.         AS km
  38.         FROM dongpos
  39.         WHERE nID IN (284154775396)
  40.        
  41.        
  42.        
  43.        
  44.        
  45.         SELECT
  46.         (
  47.             (
  48.                 (
  49.                      acos(
  50.                              sin( 35.871058 * PI() /180.0 ) *
  51.                             sin( @lat * PI() /180.0 ) +
  52.                             cos( 35.871058 * PI() /180.0 )  *
  53.                             cos( @lat * PI() /180.0 ) *
  54.                             cos( (127.074297 - @lon ) * PI() /180.0  )
  55.                     )
  56.                 ) *  180.0 / PI()
  57.             ) * 60*1.1515*1.609344*1000
  58.         ) AS distnace


현대 DB는 없지만 간단하게 정리하면 다음과 같다..

dongpos라는 각 지번과 지번 위치를 담고있는 table이 존재한다..

거기서 284154775396 의 시퀀스를 가진 지역의 위경도값(nposY, nposX)값들이

초기변수값 @lat, @lon과의 거리를 산출해낸다..



대략 네이버 지도 및 구글 지도와의 거리값과 비슷하게 나온다..


나중에 은근히 쓰일데가 많다...


샘플DB는 추후 정리해서 올리도록 하겠다..

728x90
반응형

'MS-SQL' 카테고리의 다른 글

비용 발생하는 쿼리 찾아내기  (0) 2015.12.20
[MSSQL 2012] MSSQL 2012에서 새롭게 추가된 페이징 쿼리 기법  (0) 2015.12.20
거리계산  (0) 2015.12.20
거리계산  (0) 2015.12.20
MSSQL 메뉴 활성화 바로 가기 키  (0) 2015.12.20