Recherche de proximité avec les modules view et geo
Ce billet explique comment faire une view avec un filtre qui permet de faire de la recherche de proximité. Je vous conseille de lire mon premier billet qui vous explique comment géolocaliser une adresse et stocker sa position géographique.
Créer une view
Ajoutez une view de node via admin/build/views. Le nom n'as pas d'importance. Changez peut être Row style en node dans un premier temps. N'oubliez pas d'enregistrer votre view régulièrement...
Ajouter un filtre
L'on va ajouter un filtre sur le champ CCK de type geo créer précédemment.

Ensuite il faut configurer ce filtre. La distance étant sur une sphère (la terre) il faut choisir distance Spherical.
Il faut ensuite choisir l'operator et une valeur par défaut comme distance.
L'on peut choisir plusieurs widget pour la target. Pour ma part j'ai choisi un textfield qui utilisera Google pour trouver la position.
Exposer le filtre pour que vos utilisateurs puissent changer le point central (target).
La distance peut être exposé également via Show value as.

Résultat
Une fois que vous avez créé un affichage "page" vous devriez avoir ce résultat:

Trier les résultats par distance
Jusqu'ici la recherche par proximité fonctionne, mais affiche sans ordre tous les résultats qui sont dans le rayon. Habituellement, on veut les proches en premier.
Ajouter un critère de trie sur le champ geo

La configuration est cette fois très facile à comprendre.

Problème connu
Tout fonctionne out-of-the-box. Cependant, vous pourriez avoir un message d'erreur ressemblant à ça:
* user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%g), Y(%g)' at line 1 query: SELECT X(%g), Y(%g) in /Users/simon/Sites/drupal-geo/sites/all/modules/geo/includes/handlers/geo_sql_mysql.inc on line 352.
* warning: array_values() [function.array-values]: The argument should be an array in /Users/simon/Sites/drupal-geo/sites/all/modules/geo/includes/handlers/geo_sql_mysql.inc on line 352. * user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%g)), Y(Centroid(%g))' at line 1 query: SELECT X(Centroid(%g)), Y(Centroid(%g)) in /Users/simon/Sites/drupal-geo/sites/all/modules/geo/includes/handlers/geo_sql_mysql.inc on line 357.
* warning: array_values() [function.array-values]: The argument should be an array in /Users/simon/Sites/drupal-geo/sites/all/modules/geo/includes/handlers/geo_sql_mysql.inc on line 357.
Le problème est connu et certainement bientôt corrigé. Il est provoqué si vous n'avez pas de valeur par défaut dans la recherche. Le trie ayant un bug si il n'a pas de point cible.
Comments
#1 charli
Merci!!!!!!!!!
#2 firgon
Bonjour,
Merci pour ces deux tutos.
Est-il possible d'afficher les résultats sur une map ?
Ou bien je suis trop exigeant ?
Cordialement.
Firgon
Post new comment