Browsing this Thread:
1 Anonymous Users
Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Nouveau
Joined:
2009/10/21 16:27 Group:
Utilisateurs Enregistrés Posts:
26
Level : 3; EXP : 83
HP : 0 / 70 MP : 8 / 183 ![]() |
Bonjour,
avez vous des exemple de codes PHP pour faire un tri d'annonces classé de ma base d'annonces classées de mon site en renvoyant le nombre de Kilomètre x d'une distance maximum déterminer par le chercheur qui fait ca recherche par Code Postal. la recherche par code postal doit calculer en distance KM en utilisant le service de géolocalisation de google ou de yahoo pour toute les viles du canada. exemple si le chercheur cherche un annonce dans le code postal G2E 3D4, avec un critère sur 20 km en arondissement, Alors l'engin de recherche sur mon site lui renvoie toute les annonces dans une liste en ordre de distance en kilomètre du plus proche au plus loin. Merci d'avance pour vos idées de code.
Posted on: 2/28 18:08
|
|
Transfer
|
||
Re: Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Nouveau
Joined:
3/11 15:45 Group:
Utilisateurs Enregistrés Posts:
3
Level : 1; EXP : 10
HP : 0 / 2 MP : 1 / 3 ![]() |
Google Map API
Avec cette littérature, tu va pouvoir t'en sortir.. Mais tu as du boulot sur la planche, crois-moi.. Donne-nous des nouvelles sur tes progrès. Ca me semble un projet intéressant..
Posted on: 3/11 16:49
|
|
Transfer
|
||
Re: Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Régulier
![]()
Joined:
2006/11/27 22:02 From Planet Terre
Group:
Utilisateurs Enregistrés Posts:
56
Level : 6; EXP : 34
HP : 0 / 133 MP : 18 / 1475 ![]() |
Tu as besoins d'utiliser un "service". Celui que tu recherche est Geocoding. Tu aurras moins de lecture a faire.
http://code.google.com/apis/maps/docu ... t/services.html#Geocoding Je te recomende d'utiliser version 3 de Google Maps API. Tu n'aurras pas besoins d'utiliser de "KEY". J'espère que sa répond a ce que tu recherche.
Posted on: 6/11 19:49
|
|
Transfer
|
||
Re: Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Nouveau
Joined:
2009/10/21 16:27 Group:
Utilisateurs Enregistrés Posts:
26
Level : 3; EXP : 83
HP : 0 / 70 MP : 8 / 183 ![]() |
Bonjour,
j'ai réussi à trouvé du code sur le site eyesis .ca pour faire le calcule de la distance entre deux code postal. l'utilisateur qui fais une recherche dans mon site web entre son code postal et le script trouve la lon et lat, ensuite le script trouve la lon et lat de tous les code postal qui son dans ma colone de ma table d'annonces classé. Il me renvoie le nombre de Kilémètre entre les deux. Cela fonctionne parfaitement. cela fonctionne avec Geodocing de google et il as falu que je créé une KEY sur google. je suis alors capable de faire affiché le nombre de KM sur les annonces trouvé par le chercheur d'annonces. Mais je ne suis pas capable de faire un TRI croissant ou décroissant avec ma variable $distance qui est le nombre de KM. Bref je veux que les annonces soit trié par ordre de distance de la plus courte à la plus éloigné. la variable $distance proviens du calcule geocoding calculé sur le site et non à partir de ma bd mysql. j'ai essayé toute sorte de truck et je n'y arrive pas. pouvez-vous m'aidé un peu ? Voici ce que j'ai essayé: $bydistance = "order by $distance asc";
Posted on: 8/28 23:34
|
|
Transfer
|
||
Re: Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Webmestre
![]()
Joined:
2004/1/31 14:41 From Montréal
Group:
Webmestres Utilisateurs Enregistrés Organisation Posts:
317
Level : 16; EXP : 64
HP : 0 / 391 MP : 105 / 7550 ![]() |
MySQL ne peut pas trier à partir de données dans ton script PHP. Ça ne fonctionne tout simplement pas comme ça. Pour que MySQL fasse le tri, il doit avoir les informations dans ses tables. Ton alternative si tu veux garder ton code PHP qui calcule la distance, c'est de charger toutes les données en PHP et faire le tri là . C'est loin d'être optimal comme solution si tu as beaucoup de données.
Sinon, tu peux faire le calcul directement dans MySQL. L'extension GIS devrait pouvoir indexer ce type d'information correctement. http://dev.mysql.com/tech-resources/a ... s/4.1/gis-with-mysql.html PostgreSQL fait probablement un meilleur travail coté GIS, mais je ne suis pas un expert. Sinon, il y a des moteurs de recherche qui sont mieux équipés que des bases de donnée pour faire ce type de requêtes, comme Sphinx par exemple.
Posted on: 8/29 16:16
|
|
|
_________________
Louis-Philippe Huberdeau lphuberdeau at lphuberdeau dot com |
||
Transfer
|
||
Re: Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Régulier
![]()
Joined:
2006/7/22 9:03 From Granby, Qc
Group:
Utilisateurs Enregistrés Posts:
41
Level : 5; EXP : 19
HP : 0 / 104 MP : 13 / 1266 ![]() |
Le problème auquel tu es confronté est un problème de géomatique. Je vais tenter de t'expliquer le plus simplement possible ce que tu dois faire.
Je te recommande d'utiliser PosgreSQL et le module POSTGIS qui fournira les fonctions dont tu auras besoin pour arriver à tes fins. Je ne connais pas assez MySQL pour savoir si tu peux obtenir le même résultat avec cette base de données. Il faut d'abord obtenir la coordonnée à partir duquel ton utilisateur se situe afin de calculer la distance entre chaque "coordonnée" de ton annonce. Comme les autres intervenants l'ont mentionné avant moi, tu obtiens cette coordonnées par géocoding avec un service web de Google. Tu n'as pas besoin d'une clé GoogleMaps pour accéder à l'API, du moment que ton site web est accessible à tous (sauf pour le développement). Tu obtiens cette coordonnée en envoyant l'adresse dans le format GoogleMaps avec l'URL suivante:
http://maps.google.com/maps/geo?&q=adresse + en + format + Google&output=csv&sensor=false
Pour réaliser cela, tu n'as pas besoin de Javascript. Les fonctions PHP file_get_contents(url_encode($url)) font très bien le travail. Tu obtiendras en retour un fichier CSV dont les 2 derniers champs seront ta latitude et ta longitude en NAD 83. Je ne m'éterniserais pas à t'expliquer ce qu'est NAD 83. Disons simplement qu'il s'agit d'un système de coordonnées mondiale qui est actuellement utilisé au Canada et aux É-U. Maintenant, il faut connaître la latitude/longitude de tes annonces. Pour cela, tu dois créer un champs GEOMETRY dans ta table pour mémoriser cette information. Pour cela, tu tapes dans l'utilitaire SQL de la base de données la requête suivante "SELECT addGeometryColumn('nomdelatableoùlechampseraajouté','nomdelacolonnegéométrique=geom',4269,'POINT',2)" Remarque que PostgreSQL utilise l'apostrophe au lieu de l'accent pour enchâsser le texte! Ensuite tu enregistre pour chaque annonce la "coordonnée" de celui qui poste l'annonce. Tu procède de la même manière que ci-dessus pour récupérer la latitude et longitude en NAD 83. Je te suggère toutefois de faire une liste des municipalités que tu acceptes et de trouver d'avance la coordonnée de chacune pour éviter que l'annonce ne puisse s'enregistrer si le service web de Google est en panne! Pour enregistre la coordonnée, tu utilises la requête SQL suivante: "INSERT INTO nomdelatable(nomdelacolonnegéométrique=geom) VALUES st_geomfromtext('POINT (x y)',4269)" où x = longitude en degrés décimaux et y = latitude en degrés décimaux. À titre d'exemple, un lieu au Québec donne ex. -72.5 45.5 Il faut mettre un espace entre le x et le y. Ne pas oublier de mettre la longitude négative car nous sommes à gauche (à l'Ouest) du méridien de Greenwich. À titre d'information, 4269 indique à la base de données que nous lui donnons une coordonnée dans le système NAD 83 (longitude/latitude). Nous reviendrons plus tard là -dessus. Maintenant il reste à extraire les annonces pour les afficher en ordre croissant de distance par rapport à l'usager. Voici la requête SQL qu'il faut envoyer à la base de données: "SELECT id_annonce, champs1_annonce, date_annonce, etc..., distance(st_transform(st_geomfromtext('POINT(x_usager y_usager)',4269),32188), st_transform(geom,32188))/1000 FROM annonce ORDER BY distance(st_geomfromtext('POINT(x_usager y_usager)',4269), geom)" où x_usager et y_usager sont remplacés par la longitude/latitude de l'utilisateur qui consulte les annonces. La dernière colonne est un champs calculé qui transforme les latitudes/longitudes en kilomètres afin d'afficher la "distance" entre ton annonce et ton utilisateur. Il faut appliquer un changement de référent en utilisant la fonction géométrique "transform" qui permet de passer des degrés décimaux (datum #4269) aux mètres (datum #32188) et ensuite on divise par 1000 pour obtenir des kilomètres (cette transformation n'est pas nécessaire dans le ORDER BY). Voilà . Si tu as des question, n'hésite pas à poster. Tu peux aussi consulter la documentation de PostGIS au http://www.postgis.org/documentation Bonne chance Sylvain Racine géomaticien et programmeur sracine AT igreffe DOT net
Posted on: 8/31 11:50
|
|
Transfer
|
||
Re: Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Régulier
![]()
Joined:
2006/7/22 9:03 From Granby, Qc
Group:
Utilisateurs Enregistrés Posts:
41
Level : 5; EXP : 19
HP : 0 / 104 MP : 13 / 1266 ![]() |
Excuse-moi. Dans la rédaction de ma réponse, j'ai perdu de vue que tu voulais faire une recherche par code postal! Le service web de GoogleMaps permets aussi la recherche par code postal... Tu remplaces l'adresse par un code postal dans l'URL.
Bonne programmation Sylvain Racine géomaticien et programmeur sracine AT igreffe DOT net
Posted on: 8/31 13:15
|
|
Transfer
|
||
Re: Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Régulier
![]()
Joined:
2006/7/22 9:03 From Granby, Qc
Group:
Utilisateurs Enregistrés Posts:
41
Level : 5; EXP : 19
HP : 0 / 104 MP : 13 / 1266 ![]() |
Tu peux toujours construire toi-même les formules pour réaliser le calcul de la distance entre 2 points ou pour la transformation de coordonnées latitute/longitude en coordonnées X,Y. Dans ce cas, MySQL avec 2 champs pour le X et le Y fait très bien l'affaire. Mais pourquoi réinventer la roue quand tout cela existe dans PostGIS?
La formule pour calculer la distance entre 2 points P1(x1,y1) et P2(x2,y2) est distance = sqr((x2-x1)^2+(y2-y1)^2) Quant à la formule pour convertir des latitudes/longitudes en coordonnées X,Y, je me rappelle juste que ça occupait pas loin de 100 lignes dans un chiffrier EXCEL pour 1 seule coordonnée. À toi de la trouver si tu veux t'y mettre. Je te suggère dans ce cas de créer une fonction latlong2xy() dans ta base de données pour encapsuler tes calculs. Tu peux jeter un coup d'oeil au portail de la géomatique française. http://georezo.net/ Bonne route Sylvain Racine géomaticien et programmeur sracine AT igreffe DOT net
Posted on: 8/31 13:45
|
|
Transfer
|
||
Re: Recherche par Code Postal avec Geolocalisation |
||
|---|---|---|
|
Régulier
![]()
Joined:
2006/7/22 9:03 From Granby, Qc
Group:
Utilisateurs Enregistrés Posts:
41
Level : 5; EXP : 19
HP : 0 / 104 MP : 13 / 1266 ![]() |
Pour ceux qui sont intéressés, voici un lien qui donne un script en Javascript pour convertir les latitudes/longitudes en coordonnées planes UTM (c'est une projection cartographique utilisée pour tout le Canada).
http://userscripts.org/scripts/review/5985 Il faut utiliser la fonction LatLngToUTMRef(). Les coordonnées qui en résultent peut être utilisées pour calculer la distance avec la formule que j'ai donnée précédemment. Bonne programmation Sylvain Racine géomaticien et programmeur sracine AT igreffe DOT net
Posted on: 8/31 15:41
|
|
Transfer
|
||
You can view topic.
You cannot start a new topic.
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.






Transfer


10th Sep

