Distance between two lat/long points in Classic ASP

♀尐吖头ヾ 提交于 2019-12-11 05:34:12

问题


I have two pairs of latitude/longitude, and want to find the distance between them. I am stuck with using Classic ASP on this particular website.

I found plenty of code examples using the Haversine equation, but not in ASP (which lacks the ACos function, and doesn't have pi built in! I eventually got some code working, but after careful testing it proved to be flawed. My understanding of spherical geometry isn't good enough, so please can anyone say if they have done this in ASP before?! Thanks.


回答1:


Oh dear. I have just been a complete idiot, and failed to spot a little bit of code that was setting my lat/long to integers before I even got into the trigonometry. I feel very stupid....

At least it means that my code is correct, so I'll post it here in case it helps someone else:

'calculate distance in miles between two coordinates
Function DistanceBetweenPoints(iLat1, iLong1, iLat2, iLong2)
    Dim iDistance
    'first assume that the earth is spherical (ha ha)
    iDistance = ACos( ( Sin(ToRad(iLat1)) * Sin(ToRad(iLat2)) ) + ( Cos(ToRad(iLat1)) * Cos(ToRad(iLat2)) * Cos(ToRad(iLong2) - ToRad(iLong1)) ) ) * 3959 'mean radius of earth in miles
    DistanceBetweenPoints = CInt(iDistance) 'round up to lose decimal place
End Function

'ASP doesnt have these two trigonometric functions, or pi, built in (needed above)
Const PI = 3.141592653589793100 'use this value from SQL
Function ToRad(iDegrees)
    ToRad = CDbl(iDegrees) * PI / 180
End Function 
Function ACos(x)
If x = 1 Then
        ACos = 0
    ElseIf x= -1 Then
        Acos = PI
    Else
        ACos = ATn(-x / Sqr(-x * x + 1)) + 2 * ATn(1)
    End If
End Function



回答2:


This code source is more complete : distance can be in miles, or kilometers, or nautical miles.. http://www.geodatasource.com/developers/asp



来源:https://stackoverflow.com/questions/4827479/distance-between-two-lat-long-points-in-classic-asp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!