2010-02-28 16 views
0

J'essaie de comprendre ce qui serait le plus efficace (en ce qui concerne le temps de chargement) pour comparer la distance entre un code postal (que l'utilisateur fournit) et un tas d'autres codes postaux (il y a environ 200 codes postaux en ce moment, mais il est sujet à augmenter avec le temps). Je n'ai pas besoin de quelque chose d'exact juste dans le parc de balle.MySQL comparaison de code postal PHP spécifiquement distance

J'ai téléchargé un fichier csv de code postal pour tous les États-Unis, et j'ai une fonction qui produit la distance entre deux codes postaux (en radians je crois.) Je n'ai pas besoin d'afficher la distance que je viens besoin de trier les 200 codes postaux avec le plus proche étant le premier des résultats.

J'ai téléchargé le fichier csv dans une table mysql. Je pensais pouvoir faire défiler tous les 200 codes postaux, et mettre à jour un champ pour chacun contenant la distance. Ensuite, en utilisant ORDER BY, triez-les du plus proche au plus éloigné.

Est-ce que quelqu'un sait d'une manière plus efficace de faire ceci? De cette façon, il faudrait mettre à jour la totalité de la base de codes postaux à chaque fois qu'une requête de recherche est exécutée. Avec seulement 200 codes postaux, ce n'est pas une grosse affaire maintenant, mais j'imagine que cela va ralentir le temps de chargement à mesure que la base de données se construit. Merci pour tout conseil, c'est très apprécié!

Répondre

2

en Javascript:

var R = 6371; // km 
var dLat = (lat2-lat1).toRad(); 
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c; 

où d = distance entre deux points

C'est le Haversine formula.