Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie Punkte aus der Kartendatenbank nach Radius aus

Manchmal der Parameter zu ACOS() kann etwas größer als 1 sein – etwas außerhalb des Bereichs dieser Funktion – wenn die Abstände klein sind. Aufgrund von Vincenty ist eine bessere Entfernungsformel verfügbar. Es verwendet den ATAN2(y,x) Funktion anstelle von ACOS() Funktion und ist somit numerisch stabiler.

Das ist es.

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))))

Diese Funktion gibt ihr Ergebnis in Grad zurück. Ein Grad hat 111,045 km. 60 Seemeilen. 69 gesetzliche Meilen. Multiplizieren Sie also das Ergebnis mit einer dieser Zahlen, um Abstand zu bekommen. mysql/vicenty-großkreis-entfernungsformel/">hier .

Eine andere Lösung ist die Verwendung von ISNULL(ACOS(formula), 0.0)