Trouver des villes à l'intérieur de «X» kilomètres (ou miles)
Cela peut ou peut ne pas être clair, laissez-moi un commentaire si je suis hors de la base, ou vous avez besoin plus d'informations. Peut-être il y a une solution qui existe déjà pour ce que je veux en PHP.
Je suis à la recherche d'une fonction qui va ajouter ou de soustraire une distance à partir de la longitude, la latitude de la valeur.
Raison: j'ai une base de données avec toutes les Latitudes et Longitudes en elle et l'envie de former une requête pour extraire toutes les villes à moins de X kilomètres (ou miles). Ma requête devrait ressembler à quelque chose comme ça...
Select * From Cities Where (Longitude > X1 and Longitude < X2) And (Latitude > Y1 and Latitude < Y2)
Where X1 = Longitude - (distance)
Where X2 = Longitude + (distance)
Where Y1 = Latitude - (distance)
Where Y2 = Latitude + (distance)
Je travaille en PHP, avec une Base de données MySql.
Ouverts à toutes les suggestions! 🙂
source d'informationauteur MichaelICE
Vous devez vous connecter pour publier un commentaire.
C'est une requête MySQL qui va faire exactement ce que vous voulez. Gardez à l'esprit ce genre de choses sont des approximations en général, que la terre n'est pas parfaitement sphérique et ne prendre en compte les montagnes, les collines, les vallées, etc.. Nous utiliser ce code sur AcademicHomes.com avec PHP et MySQL, il renvoie les enregistrements dans $rayon de miles de $latitude, $longitude.
EDIT: Si vous avez, quelque part, une liste de toutes les villes dans le monde, ainsi que leurs lat. et longue. les valeurs, vous pouvez faire une recherche. Dans ce cas, voir mon premier lien ci-dessous pour la formule pour calculer la largeur de l'une longitudinale degré de latitude :
Honnêtement, les complications, derrière ce problème, sont tels qu'il serait de loin préférable d'utiliser un service tel que Google Maps pour récupérer vos données. Plus précisément, la Terre n'est pas une sphère parfaite, et la distance entre deux degrés varie selon que vous êtes plus près de /loin de l'équateur.
Voir http://en.wikipedia.org/wiki/Geographic_coordinate_system pour des exemples de ce que je veux dire, et découvrez l'API Google Maps.
En fonction du nombre de villes où vous y compris, vous pouvez précalculer la liste. Nous le faisons ici pour une application interne où une imprécision de +100 m est de trop pour notre configuration. Il fonctionne avec deux clés de la table de location1, location2, de la distance. Nous pouvons alors tirer en arrière des emplacements de la distance x de location1 très rapidement.
Aussi depuis le calcs peut être fait en ligne, il n'a pas d'impact sur le fonctionnement du système. Les utilisateurs peuvent également obtenir des résultats plus rapides.
J'ai Essayé d'utiliser le code ci-dessus, et les réponses ont été par trop d'lorsque la distance entre les points est dans les 20 à 30 milles, et je suis ok avec quelques kilomètres de l'erreur. Parlé avec une cartographie copain à moi et nous avons trouvé cette place. Le code est en python, mais vous pouvez le traduire assez facilement. Afin d'éviter la constante de conversion en radians, j'ai refait ma base de données, la conversion de la lat/lng points de degrés en Radians. La belle partie de ceci est que la plus grande partie des mathématiques se fait le plus souvent qu'une fois.
Semble être très précis lors de la distance est petite, et à moins de 10 miles à mesure que la distance augmente à 200 milles, (bien sûr, d'ici là, vous avez des problèmes avec le "vol d'oiseau" vs "les routes pavées").
Ici est le modèle ZipData que je mentionne ci-dessus.
Une note, c'est que vous pouvez BEAUCOUP de données géographiques liées à des codes postaux à GeoNames.org et ils ont même de certains webservice Api que vous pouvez utiliser.
Il y a beaucoup de (mauvais options)
Calculer la distance à l'aide de la formule mathématique (traiter X1-X2 et Y1-Y2) en tant que vecteurs.
Créer une table à l'avance avec toutes les combinaisons et garder les distances.
Envisager l'utilisation d'un SIG spécifique à l'extension de MySQL. Voici un article j'ai trouvé à ce sujet.
lessthandot.com en fait a 3 façons de le faire. vous aurez à faire défiler les blogs un peu, mais ils sont là.
http://blogs.lessthandot.com/
La fonction ci-dessous est à partir de la nerddinner'(ASP.NET MVC exemple d'application disponible sur codeplex) base de données (MSSQL).
Je suppose que cela pourrait être utile.
Vous pouvez utiliser le Théorème de Pythagore pour calculer la proximité de deux paires de coordonnées lat/lon points.
Si vous avez deux endroits (Alpha et Bêta), vous pouvez calculer leur distance avec:
En utilisant le programme d'installation à partir de l'URL suivante, j'ai construit la requête ci-dessous. (Veuillez noter Im en utilisant codeIgnitor pour interroger la base de données)
http://howto-use-mysql-spatial-ext.blogspot.com/2007/11/using-circular-area-selection.html
Ne pas réinventer la roue. C'est une requête spatiale. Utilisation MySQL est intégré dans l'espace des extensions pour stocker la latitude-longitude de coordonner les données dans le natif MySQL géométrie type de colonne. Ensuite, utilisez la Distance fonction de requête pour les points qui sont à une certaine distance l'un de l'autre.
Avertissement: ceci est basé sur la lecture de la documentation, je n'ai pas essayé moi-même.