sql >> Database teknologi >  >> RDS >> Mysql

Vælg punkter fra kortdatabasen efter radius

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)




  1. PHP/MySQL dato/tidsforskel

  2. MySQL #1364 - Feltet 'column_name' har ikke en standardværdi - Kan ikke indsættes i DB

  3. Henter Lås ventetimeout overskredet; prøv at genstarte transaktionen, selvom jeg ikke bruger en transaktion

  4. Antal poster returneret af gruppe af