Bonjour,
Je suis actuellement dans le développement d'une petit app, qui permet d'afficher les bars autour d'une adresse défini.
Pour cela je suis sous PostgreSQL et j'utilise des decimal avec une colonne latitude et longitude. J'ai trouver un petit script qui me permet de faire ce que je souhaite sauf que j'ai quelques lignes que je ne comprend pas.
SELECT * FROM
(SELECT id, name,, latitude, longitude, ('8000' * acos(cos(radians('44.832755')) * cos(radians(latitude)) *
cos(radians(longitude) - radians('-0.528606')) +
sin(radians('44.832755')) * sin(radians(latitude))))
AS distance
FROM establishments) AS distance
WHERE distance < '5'
LIMIT 20;
Cette requête SQL me renvois un tableau avec les latitude/longitude et une nouvelle colonne distance qui est sous cette forme : 6.12747919947683, j'ai detecté que cette distance varie quand je modifie le 8000. A quoi correspond ce 8000?
L'ideal c'est que je puisse afficher seulement les bars 5km autour de ma position actuelle (44.832755, -0.528606).
ça ressemble au calcul de l'orthodromie
la formule renvoie l'angle entre 2 points vu du centre de la terre
cet angle est en radian, si on veut le convertir en kilomètre il faudrait appliquer un coef (40000km / 2pi) soit 6366
8000 c'est une unité anglo-saxonne ???
Merci de la réponse, je comprend mieux le principe.
Le 8000 correspond à une valeur à la volé ^^
Ce que je fais c'est dans ma base de donnée j'ai une adresse (23 rue de la pomme: exemple) et j'entre en dur une latitude/longitude qui correspond à par exemple 120 avenue thiers, sur google maps les 2 rue sont à 3,8km. Hors la distance calculé par SQL est de 4.3102245949027
Est-ce un problème de précision ou la requête qui est fausse ?
Ou existe t'il un autre moyen de requeter uniquement les bars à 5Km autour de ma position ?
Il faudrait regarder avec Google Earth qui propose une règle de mesure
c'est sûr que SQL donne la distance à vol d'oiseau
maps lui, doit calculer le trajet le plus court
Tu peux difficilement interroger google maps pour obtenir l'itinéraire pour chaque bar de France
le filtrage SQL est ce qu'il y a de mieux même si en général on travaille avec un carré
on filtre latitude entre min et max puis longitude entre min et max
Sinon Postgis propose des fonctions spatiales faites pour ça, MySQL aussi
Ce que je viens de voir c'est l'API V3 de google maps qui calcule la distance entre 2 positions qu'on lui donne.
Postgis j'ai vite fait établis cette solution, mais j'imagine que c'est le même problème ? Vol d'oiseau?
Qui Postgis c'est "vol d'oiseau" sinon il faudrait qu'ils aient une cartographie de toutes les routes, chemins, pistes cyclables ...
j'ai testé l'API V3 il y a qques années, le fait d'être piéton ou cycliste ne changeait rien au calcul !!!
Pour les bars vaut mieux y aller à pieds, non ? ;)
Ype c'est sur ! Du coup j'utilise la fonctione "vol d'oiseau" haha ! Merci de l'aide ! Toute façon après quelques tests il n'y as pas grande différence mais c'est juste moins précis :/
un clurl sur cette url :
https://www.google.fr/maps/search/bar+a+proximite/@48.7996131,2.6171056,13z
n'oublis pas de changé lattitude et longitude ;)
une recherche sur $(".section-result-title-container") et c'est bon ;)
@plus
Pierre
Je ne peux pas utiliser cette technique, @Pierrot01, car j'ai seulement les bars qui sont dans ma base de données
Salut,
Je pense que la base de données google est bien plus riche que la tienne ;)
@plus
Pierre
@Pierrot01, Bien évidement, mais le but de l'appli c'est que derrière y'a un service Saas et seulement les bars qui ont souscris au service y seront implantées
Salut,
Et alors, fais une comparaison entre les éléments de la base de données google et la tienne.
j'vois vraiment rien d'insurmontable ;)
@plus
Pierre