
지구상의 두 좌표점 사이의 거리를 계산하는 긴 공식은 다음과 같습니다.
=ACOS(COS(RADIANS(90-LAT1)) *COS(RADIANS(90-LAT2)) +SIN(RADIANS(90-LAT1)) *SIN(RADIANS(90-LAT2)) *COS(RADIANS(Long1-LAT2) ))) *6371
다른 수식 안에 사용하는 것은 약간 번거롭기 때문에 이를 위해 사용자 정의 함수를 작성했습니다.
기능 DistXY(Lat1을 단일로, Lng1을 단일로, Lat2를 단일로, Lng2를 단일로) 단일로
DistXY = WorksheetFunction.Acos(Cos(WorksheetFunction.Radians(90 - Lat1)) * Cos(WorksheetFunction.Radians(90 - Lat2)) + Sin(WorksheetFunction.Radians(90 - Lat1)) * Sin(WorksheetFunction.Radians(90 - Lat2)) * Cos(WorksheetFunction.Radians(Lng1 - Lng2))) * 6371
기능 종료
보시다시피, 그들은 완전히 동일합니다. VBA에는 Acos 또는 Radians 함수가 없으므로 "worksheetFunction" 메서드도 사용합니다.
동일한 XY 좌표 쌍에 이 공식을 적용하면 왜 다른 결과가 나오나요?
예를 들어:
ABC 45.4960674,-73.514446에서 XYZ 43.5369,-71.8592로
거리XY()결과: 254.313156128
긴 수식 방법: 254.313268914
@raystafarian의 의견에 따라 모든 유형을 두 배로 변경하면 정밀도가 향상되었습니다. 하지만 여전히 차이가 있습니다.
기능 DistXY(Lat1 As double, Lng1 As double, Lat2 As double, Lng2 As double) As double ...
새로운 결과:
거리XY(): 254.3132689135060킬로미터
긴 수식 방법: 254.3132689135250킬로미터
답변1
답변2
기반레이스타파리안의답변:
Public Function DistXY(Lat1 As Double, Lng1 As Double, Lat2 As Double, Lng2 As Double) As Double
Dim i As Double, f As Double
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
i = 90
f = 6371
DistXY = wf.Acos(Cos(wf.Radians(i - Lat1)) * Cos(wf.Radians(i - Lat2)) + Sin(wf.Radians(i - Lat1)) * Sin(wf.Radians(i - Lat2)) * Cos(wf.Radians(Lng1 - Lng2))) * f
End Function