Recherche de proximité avec les modules view et geo

Apr 21 2010

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

Anonymous's picture

#1 charli

Merci!!!!!!!!!


Anonymous's picture

#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

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account, used to display your avatar.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • You can use Markdown syntax to format and style the text. Also see Markdown Extra for tables, footnotes, and more.
By submitting this form, you accept the Mollom privacy policy.