Optimisation des requêtes MySQL pour les recherches de géolocalisation à l'aide de la latitude et de la longitude
Dans MySQL, la récupération de données en fonction de la proximité géographique est une tâche courante. Lorsque vous travaillez avec des valeurs de longitude et de latitude, il est essentiel d'utiliser des requêtes efficaces pour éviter des résultats inattendus.
Considérez la requête suivante qui tente de trouver des lignes dans un rayon de 25 miles autour d'une latitude et d'une longitude centrale :
SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180)) cos(($lat*pi()/180))
* cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515)
AS `distance` FROM `geo_locations` HAVING `distance` Bien que cette requête fonctionne généralement, elle peut produire des résultats inexacts pour certaines lignes, les montrant beaucoup plus éloignées de la valeur spécifiée rayon.
Pour améliorer la précision, envisagez la requête optimisée suivante :
SELECT
`id`,
(
6371 *
acos(
cos( radians( :lat ) ) *
cos( radians( `lat` ) ) *
cos(
radians( `long` ) - radians( :long )
)
sin(radians(:lat)) *
sin(radians(`lat`))
)
) `distance`
FROM
`location`
HAVING
`distance` Dans cette requête, les paramètres :lat et :long représentent la latitude et la longitude du point central, et :distance représente le rayon en miles.
La principale différence entre les deux requêtes est l'utilisation de 6371 comme facteur de conversion pour convertir les radians en miles. Ce facteur est plus précis que 3959, utilisé dans la requête d'origine. De plus, la requête optimisée utilise une formule plus stricte pour calculer la distance en fonction de la latitude et de la longitude.
En mettant en œuvre ces optimisations, vous pouvez améliorer considérablement la précision de vos requêtes MySQL lorsque vous effectuez des recherches de géolocalisation à l'aide de valeurs de latitude et de longitude, garantissant que les résultats sont toujours dans la distance de rayon spécifiée.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3