Demo pgRouting

Actions

Récupérer l'id et les coordonnées du sommet le plus proche correspondant à une coordonnée

SELECT id, x(the_geom), y(the_geom)
FROM vertices_tmp
WHERE id = (
  SELECT id(foo.x) as id
  FROM (
    SELECT find_node_by_nearest_link_within_distance('POINT(longitude latitude)',  0.5, 'ways')::link_point as x
  ) AS foo
);

Recherche d'un itinéraire entre deux sommet

SELECT st_union(the_geom) as geometry
FROM ways
WHERE gid in (
  SELECT edge_id
  FROM shortest_path('
    SELECT gid as id,
      source::integer,
      target::integer,
      to_cost as cost,
      reverse_cost
    FROM ways',
    id_sommet_de_depart,
    id_sommet_d_arrivee,
    false,
    false
  )
);

Pseudo algorithme de l'application

Lorsque l'utilisateur clique sur start ou end point:
  - Ajouter la classe "active" à l'élément courant
  - Enlever la classe "active" à l'autre élément
  - Définir que le drawControl fonctionne sur le layer correspondant à l'élément courant

Lorsque l'utilisateur clique sur la carte:
  - Création d'une feature sur le bon layer
  - Envoi d'une requête ajax pour vérifier s'il existe un sommet
    du réseau routier à proximité
    - Oui: Correction de la position de la feature et récupération de l'id
    - Non: Avertir l'utilisateur et supprimer la feature

Lorsque l'utilisateur clique sur le bouton "Search"
  - Pour autant :
    - qu'il existe une feature sur chaque layer
    - que chaque feature possède bien un id référencant un sommet
  - Alors mettre à jour l'URL de la couche et lui demander de se rafraîchir