Udregn afstand mellem 2 koordinater - virker ikke med variabler
Jeg har fundet dette finde stykke kode som udregner en afstand mellem to punkter/koordinater - Så længe jeg indtaster koordinaterne direkte ind i funktionen, som i eksemplet nedenfor, så virker det perfekt, men jeg vil jeg bruge nogle variabler til udregningen i stedet - og så fejler det - ved at udregningen bliver forkert og den distance jeg får er helt hen i vejret.Følgende skal give afstanden i kilometer:
distance(32.9697, -96.80322, 29.46786, -98.53506, "K")
Den vil jeg gerne have til at se sådan her ud i stedet:
distance(Request.form("lat"), Request.form("lon"), rs("lat"), rs("lon"), "K")
Form felterne henter en aktuel lokation på brugeren og ser blot sådan her ud
<input type="text" name="lat"><input type="text" name="lon">
rs("lat") og rs("lon") henter data fra min sql db.
Felterne er lavet med data typen varchar(12)
Jeg har haft problemer med at finde en datatype til felterne hvor det blev accepteret at der er et punktum i nummeret - og samtidig ikke vil få "distance" funktionen til at fejle helt, ved at den siger at der er mismach i datatypen (hvis jeg f.eks. laver feltet til et tekstfelt)
Mine input felter er også text, men laver jeg dem om til numbers erstattes punktum med komma og det dur heller ikke.
Jeg er virkelig løbet panden mod en mur og syntes snart jeg har prøvet alverdens krumspring for at få det til at virke.
Mit bedste bud er at den måde dataen leveres til funktion på er forkert og derfor er udregningen skæv - og det må være både dataen fra form felterne og fra databasen det går galt med, for erstatter jeg et af koordinatsættene med en fast tekst, så er udregningen stadig forkert
F.eks sådan her:
distance(Request.form("lat"), Request.form("lon"), 56.183463532, 9.78537071, "K")
Kan du hjælpe mig med en løsning?
<%
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: :::
'::: This routine calculates the distance between two points (given the :::
'::: latitude/longitude of those points). It is being used to calculate :::
'::: the distance between two location using GeoDataSource(TM) :::
'::: products. :::
'::: :::
'::: Definitions: :::
'::: South latitudes are negative, east longitudes are positive :::
'::: :::
'::: Passed to function: :::
'::: lat1, lon1 = Latitude and Longitude of point 1 (in decimal degrees) :::
'::: lat2, lon2 = Latitude and Longitude of point 2 (in decimal degrees) :::
'::: unit = the unit you desire for results :::
'::: where: 'M' is statute miles (default) :::
'::: 'K' is kilometers :::
'::: 'N' is nautical miles :::
'::: :::
'::: Worldwide cities and other features databases with latitude longitude :::
'::: are available at https://www.geodatasource.com :::
'::: :::
'::: For enquiries, please contact sales@geodatasource.com :::
'::: :::
'::: Official Web site: https://www.geodatasource.com :::
'::: :::
'::: GeoDataSource.com (C) All Rights Reserved 2022 :::
'::: :::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
const pi = 3.14159265358979323846
Function distance(lat1, lon1, lat2, lon2, unit)
Dim theta, dist
If lat1 = lat2 And lon1 = lon2 Then
distance = 0
Else
theta = lon1 - lon2
dist = sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(theta))
dist = acos(dist)
dist = rad2deg(dist)
distance = dist * 60 * 1.1515
Select Case ucase(unit)
Case "K"
distance = distance * 1.609344
Case "N"
distance = distance * 0.8684
End Select
End If
End Function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: This function get the arccos function from arctan function :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function acos(rad)
If Abs(rad) <> 1 Then
acos = pi/2 - Atn(rad / Sqr(1 - rad * rad))
ElseIf rad = -1 Then
acos = pi
End If
End function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: This function converts decimal degrees to radians :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function deg2rad(Deg)
deg2rad = cdbl(Deg * pi / 180)
End Function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::: This function converts radians to decimal degrees :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function rad2deg(Rad)
rad2deg = cdbl(Rad * 180 / pi)
End Function
response.write distance(32.9697, -96.80322, 29.46786, -98.53506, "M") & " Miles<br>"
response.write distance(32.9697, -96.80322, 29.46786, -98.53506, "K") & " Kilometers<br>"
response.write distance(32.9697, -96.80322, 29.46786, -98.53506, "N") & " Nautical Miles<br>"
%>