[ASP]

<%
function asin(x)
    asin = atn(x / sqr(1 - x ^ 2))
end function

function acos(x)
    acos = M_PI_2 - asin(x)
end function

function getMeter(lat1, lng1, lat2, lng2)
  if (lat1 = lat2) and (lng1 = lng2) then
      getMeter = 0
  else
  pi = 4 * atn(1)

  e10 = lat1 * pi / 180
  e11 = lng1 * pi / 180
  e12 = lat2 * pi / 180
  e13 = lng2 * pi / 180

  c16 = 6356752.314140910
  c15 = 6378137.000000000
  c17 = 0.0033528107

  f15 = c17 + c17 * c17
  f16 = f15 / 2
  f17 = c17 * c17 / 2
  f18 = c17 * c17 / 8
  f19 = c17 * c17 / 16

  c18 = e13 - e11
  c20 = (1 - c17) * tan(e10)
  c21 = atn(c20)
  c22 = sin(c21)
  c23 = cos(c21)
  c24 = (1 - c17) * tan(e12)
  c25 = atn(c24)
  c26 = sin(c25)
  c27 = cos(c25)

  c29 = c18
  c31 = (c27 * sin(c29) * c27 * sin(c29)) + (c23 * c26 - c22 * c27 * cos(c29)) * (c23 * c26 - c22 * c27 * cos(c29))
  c33 = (c22 * c26) + (c23 * c27 * cos(c29))
  c35 = sqr(c31) / c33
  c36 = atn(c35)
  c38 = 0
  if c31 = 0 then
   c38 = 0
  else
   c38 = c23 * c27 * sin(c29) / sqr(c31)
  end if

  c40 = 0
  if (cos(asin(c38)) * cos(asin(c38))) = 0 then
   c40 = 0
  else
   c40 = c33 - 2 * c22 * c26 / (cos(asin(c38)) * cos(asin(c38)))
  end if

  c41 = cos(asin(c38)) * cos(asin(c38)) * (c15 * c15 - c16 * c16) / (c16 * c16)
  c43 = 1 + c41 / 16384 * (4096 + c41 * (-768 + c41 * (320 - 175 * c41)))
  c45 = c41 / 1024 * (256 + c41 * (-128 + c41 * (74 - 47 * c41)))
  c47 = c45 * sqr(c31) * (c40 + c45 / 4 * (c33 * (-1 + 2 * c40 * c40) - c45 / 6 * c40 * (-3 + 4 * c31) * (-3 + 4 * c40 * c40)))
  c50 = c17 / 16 * cos(asin(c38)) * cos(asin(c38)) * (4 + c17 * (4 - 3 * cos(asin(c38)) * cos(asin(c38))))
  c52 = c18 + (1 - c50) * c17 * c38 * (acos(c33) + c50 * sin(acos(c33)) * (c40 + c50 * c33 * (-1 + 2 * c40 * c40)))

  c54 = c16 * c43 * (atn(c35) - c47)

  getMeter = FormatNumber((c54/1000),1) '키로미터
  end if
end function
%>

 

[사용예]

'전주역 : 35.849773, 127.161796
'전주시청 : 35.824112, 127.148078
response.write(getMeter(35.849773, 127.161796, 35.824112, 127.148078) &"km")

[결과]

3.1km

 

 

[MSSQL]

select
(
  6371     /* 6371->키로미터 단위, 3959->마일단위 */
  * acos(
    cos( radians(lat1) )
    * cos( radians(lat2))
    * cos(
      radians(lng2) - radians(lng1)
    )
    + sin( radians(lat1) )
    * sin( radians(lat2) )
  )
) AS distance
from 테이블

 

[Java Script]

function getmeter(lat1, lon1, lat2, lon2) {
  delta_lon = deg2rad(lon2) - deg2rad(lon1);
  
  distance = Math.acos(Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
  Math.cos(delta_lon)) * 3963.189; //마일
  
  gap = parseInt(distance * 1609.344);
  return gap;
}

function deg2rad(val) {
  var pi = Math.PI;
  var de_ra = ((eval(val))*(pi/180));
  return de_ra;
}



출처: https://horangi.tistory.com/263 [노을빛호랑이의 연습장]


 

+ Recent posts