Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez des points dans la base de données cartographiques en fonction du rayon

Parfois, le paramètre de ACOS() peut être légèrement supérieur à 1 - légèrement en dehors du domaine de cette fonction - lorsque les distances sont petites. Il y a une meilleure formule de distance disponible, grâce à Vincenty. Il utilise le ATAN2(y,x) plutôt que la fonction ACOS() fonction et est donc plus stable numériquement.

C'est ça.

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

Cette fonction renvoie son résultat en degrés. Il y a 111,045 km dans un degré. 60 milles nautiques. 69 milles terrestres. Multipliez donc le résultat par l'un de ces nombres pour obtenir la distance. mysql/vicenty-great-circle-distance-formula/">ici .

Une autre solution consiste à utiliser ISNULL(ACOS(formula), 0.0)