8
votes

Obtenez des endroits les plus proches sur Google Maps, en utilisant les données spatiales MySQL

J'ai une base de données avec une liste de magasins avec des latitudes et des longitudes de chacun. Donc basé sur le lieu actuel (Lat, GNL) que je saisie, j'aimerais obtenir une liste d'articles de ceux de certains rayons comme 1 km, 5 km, etc.

Quel devrait être l'algorithme? J'ai besoin du code PHP pour l'algorithme lui-même.


0 commentaires

3 Réponses :


6
votes

Vous devez choisir une base de données accompagnée de manière spatiale comme MySQL ou PostgreSQL , puis vous pouvez utiliser certaines des fonctions prêtes à fournir. Sinon si vous voulez le faire manuellement vérifier Ceci pour heads up.


2 commentaires

Je recommanderais PostgreSQL avec l'extension PostGis. Son chemin plus rapide que MySQL.


@ 23TUX Il est plus rapide et plus complet mais mysql est ce que la plupart des gens connaissent et mysql extensions spatiales sont très utiles



6
votes

Si vous recherchez un code PHP pour calculer la distance entre deux séries de coordonnées Voici une classe que j'ai adaptée qui calculera la distance en kilomètres. Toutefois, si vous utilisez une base de données, je vous suggère de rechercher si votre base de données est capable de calculer des calculs spaciaux (je sais que SQL Server et MySQL sont en haut de ma tête).

Voici un intéressant Lien pour une solution SQL que vous pourriez vouloir vérifier. Optimisation d'un appel de formule Haversine SQL dans PHP xxx


2 commentaires

Ainsi, j'ai besoin de la base de données pour soutenir certaines fonctions spéciales? Ne peut-il pas être fait directement en utilisant PHP seul? Si je sauvegarde les coordonnées Lat / Long sous forme de 2 champs de DB


Le code que j'ai publié vous donnera la distance entre deux coordonnées.



32
votes

Vous avez juste besoin d'utiliser la requête suivante.

Par exemple, vous avez la latitude d'entrée et la longitude 37 et -122 en degrés. Et vous souhaitez rechercher des utilisateurs à moins de 24 km de l'actualité donnée la latitude et la longitude. xxx

Si vous souhaitez une distance de recherche dans KMS, puis remplacez 3959 avec 6371 dans la requête ci-dessus. < / p>

Vous pouvez également faire cela comme:

  1. Sélectionnez toutes la latitude et la longitude

  2. Calculez la distance de chaque enregistrement.

  3. Le processus ci-dessus peut être effectué avec une redirection multiple.

    pour optimiser la requête Vous pouvez utiliser la procédure stockée.

    et Ce peut également vous aider.


5 commentaires

Un peu d'avertissement, car cela sera hors de main si la table avec des points augmente de taille. Vous finirez par faire les calculs pour chaque point de la table pour chaque requête.


La procédure stockée peut être utilisée pour cela.


Vous êtes le plus proche Gaurav, mais toute aide sur l'optimisation de ce serait vraiment utile :)


Cochez cette case arubin.org/files/geo_search.pdf procédure peut être utile. Faites-moi savoir si vous pouvez le faire ou non.


C'est un grand tut pour le faire ... code.google.com / API / Cartes / Articles / ...