Nogle gange er parameteren ACOS()
kan være lidt større end 1 -- lidt uden for den funktions domæne -- når afstandene er små. Der er en bedre afstandsformel tilgængelig på grund af Vincenty. Den bruger ATAN2(y,x)
funktion i stedet for ACOS()
funktion og er dermed mere numerisk stabil.
Dette er det.
DEGREES(
ATAN2(
SQRT(
POW(COS(RADIANS(lat2))*SIN(RADIANS(lon2-lon1)),2) +
POW(COS(RADIANS(lat1))*SIN(RADIANS(lat2)) -
(SIN(RADIANS(lat1))*COS(RADIANS(lat2)) *
COS(RADIANS(lon2-lon1))) ,2)),
SIN(RADIANS(lat1))*SIN(RADIANS(lat2)) +
COS(RADIANS(lat1))*COS(RADIANS(lat2))*COS(RADIANS(lon2-lon1))))
Denne funktion returnerer sit resultat i grader. Der er 111.045 km i en grad. 60 sømil. 69 vedtægtsmæssige miles. Så multiplicer resultatet med et af disse tal for at få afstand.Der er en mere komplet opskrivning, inklusive en lagret funktionsdefinition for MySQL, her .
En anden løsning er at bruge ISNULL(ACOS(formula), 0.0)