2010-10-10 9 views
2

J'essaie de créer une application Web de base qui détecte la géolocalisation des utilisateurs, interroge une base de données mySQL et renvoie tous les arrêts de bus à moins de 5 kilomètres. Le flux GTFS comprenant la longitude et la latitude a été inséré dans une base de données mySQL, et j'ai trouvé un exemple de page HTML qui indique la longitude et la latitude du navigateur accédant à l'application web.Géolocalisation et formule de Haversine

Je cherche de l'aide pour écrire la requête mySQL qui prend cette information et retourne les résultats.

+1

Combien de questions avec la haversine dans le titre avez-vous regardé avant de décider que la réponse n'était pas déjà disponible? J'ai obtenu entre 100 et 150 résultats (environ 130 sur un compte approximatif) sur la seule haversine; beaucoup de ceux-ci incluent la géolocalisation, et beaucoup incluent une base de données. –

Répondre

0

Dans ce link vous trouvez:

SELECT id, (3959 * ACOS (cos (radians (37)) * cos (radians (lat)) * cos (radians) - (lng radians (-122)) + sin (radians (37)) * sin (radians (lat)))) AS distance FROM marqueurs ayant une distance < 25 ORDER BY distance LIMIT 0, 20;

2

Bien que la formule du grand cercle soit précise, vous n'avez pas besoin de la précision dans ce cas. Une minute de latitude est d'environ 1 mile (1.6 km). Une minute de longitude est sur cos (LAT) * 1 mile. Je considérerais la sélection pour la boîte de LAT +/- 3 minutes, et LONG +/- (3/cos (LAT)) minutes. Si vous avez vraiment besoin d'un cercle, pas d'une boîte, alors faites comme s'il s'agissait de coordonnées euclidiennes. L'erreur sur cette échelle est inférieure à la longueur du bus. La seule difficulté est que la longueur d'une minute de longitude varie en fonction de la distance qui vous sépare de l'équateur.

+0

Pouvez-vous élaborer davantage sur la partie "prétendre que ce sont des coordonnées euclidiennes", comment faire cela? – AndrewMk