2010-04-13 6 views
0

J'ai une coordonnée. Je veux trouver le top "n" (n étant une valeur variable) les coordonnées les plus proches sur plusieurs milliers de lignes stockées sur une base de données MySQL. Je veux aussi pouvoir définir les distances maximum et minimum entre la coordonnée en question et les coordonnées dans la base de données.Trouver top "n" coordonnées à proximité

Comment puis-je aller à ce sujet? Serait-il bon d'utiliser PHP car je comprends mieux la syntaxe que MySQL?

Si j'utilise une fonction MySQL, comment puis-je la déplacer entre les bases de données si je choisis de changer de serveur? Comment est-il stocké?

Enfin, quelle est la méthode la plus efficace pour passer à travers toutes ces coordonnées exactement - les coordonnées sont toutes relativement proches les unes des autres?

Merci pour votre temps,

John.

+1

moi: http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL Et, une autre question stackoverflow: http://stackoverflow.com/questions/574691/mysql -great-circle-distance-haversine-formula – Billiam

+0

Cette question a déjà été résolue (même sur ce site). Voir le commentaire de @ Billiam. Le seul conseil que je peux donner est d'éviter de marteler la base de données autant que possible en mettant en cache des "zones populaires" ou quelque chose comme ça. Cela vous donnera la solution la plus efficace. – aduric

+0

J'ai eu un problème similaire dans mes mains il y a peu de temps: une table pleine de lieux, et donné un emplacement X (le plus souvent l'emplacement de l'utilisateur), je voulais savoir quels sont les N endroits les plus proches de ma table, à travers d'autres critères en même temps. Je me suis rendu compte qu'il serait très mauvais de continuer à interroger la base de données et qu'il serait trop difficile de mettre en cache chaque requête, alors j'ai fini par faire quelque chose comme calculer la liste ordonnée des emplacements en fonction de la distance de X, (mem) mettre en cache que pendant un certain temps et en appliquant des filtres d'affichage supplémentaires sur cela. –

Répondre

0

Il serait bon de le faire en PHP, et non farm this off to MySQL. Si vous respectez les nombres à virgule flottante en double précision, vous devriez avoir une meilleure précision que la précision disponible (c.-à-d. Que le GPS civil est au mieux d'environ 5m, mais vos calculs donneront une précision de quelques centimètres)

Questions connexes