Exemple d’intégration des web services : application de gestion de sinistre

Cet exemple permet d’utiliser les différents composants de Geoconcept Web et de les associer entre eux afin de construire une application complète.

Nous prendrons pour exemple une application de gestion de sinistre nécessitant la recherche d’un prestataire proche du sinistre. Dans cette application, les prestataires figurent dans une base de données classique (Oracle, SQL Server, …).

Géocodage des prestataires

Ajouter dans la table des prestataires deux colonnes X, Y (ou longitude, latitude) de type numérique.

Pour un géocodage massif (plusieurs milliers de lignes) rapide, utiliser l’application Universal Geocoder en mode desktop, ou en mode batch.

Pour un géocodage plus modeste, on peut aussi utiliser le web service de géocodage décrit dans la documentation. Ce web service prend en entrée une adresse et retourne la ou les meilleures adresses trouvées, avec leur position X,Y.

Indexer les champs longitude, latitude.

Modifications sur l’application

Ajout d’une fonctionnalité Géocodage du sinistre

Après la saisie de l’adresse du sinistre va un formulaire, on ajoute une étape géocoder, qui appelle le web service de géocodage. Il est également possible d’afficher une carte de l’endroit avec le composant Javascript, en utilisant le composant GCIS. Suite à ce géocodage, on obtient une position du sinistre (X,Y). Grâce aux fonctionnalités Javascript, il est possible de centrer la carte affichée sur la position X Y retournée.

Rechercher des prestataires candidats

Dans un premier temps, il est nécessaire de faire une première sélection des prestataires les plus proches, compris dans les limites d’une Bounding Box à définir.

Faire une première requête approchée dans la table des prestataires, pour rechercher les prestataires dans un carré de x kilomètres autour du sinistre. On calcule alors (formule approchée) :

longitude0 : longitude sinistre
latitude0 : latitude sinistre
l : distance de recherche (en km)
R = 6371 (en km)
delta_latitude = (180 / PI) * l / R
delta_longitude = (180 / PI) * l / R / cos(latitude0)

ce qui permet d’effectuer la requête SQL simple :

SELECT * FROM prestataire
WHERE longitude > longitude0 - delta_longitude
AND longitude < longitude0 + delta_longitude
AND latitude > latitude0 - delta_latitude
AND latitude < latitude0 + delta_latitude

Cet exemple de requête détermine un certain nombre de candidats parmi les plus proches. Si le nombre de candidats est trop grand (plus de 100), on pourra la recommencer en divisant la distance par deux. Si le nombre de candidats est trop faible, on pourra également la recommencer en multipliant la distance par deux, jusqu'à obtenir un nombre suffisant de candidats (au moins 10). Il faut ensuite pouvoir classer ces candidats potentiels en fonction de la méthode choisie, afin de faire ressortir les plus proches.

Calculs de distance, temps, et tri des candidats

On utilise le Web Service « SearchAround » décrit dans la documentation pour classer les candidats en fonction de la méthode choisie.

Il suffit alors de présenter le résultat des prestataires classés à l’utilisateur pour qu’il choisisse le prestataire le plus adéquat (le plus proche en distance ou le plus proche en temps).

Affichage des candidats sur une carte

On utilisera l’API Javascript pour inclure la carte dans l’application web existante et afficher les prestataires sur un fond de plan.

Utilisation de l’API Javascript
gcweb-reference-img/lbs-integration/lbs-gestion-sinistre-1.png

Calcul d’itinéraires

On utilise le web service de calcul d’itinéraire, qui renvoie une feuille de route en format xml entre l’adresse de départ (renseignée par l’utilisateur via un formulaire) et le prestataire choisi par l’utilisateur.

Il est ensuite possible d’utiliser cette feuille afin de tracer un itinéraire entre le point de départ et le point d’arrivée.

Calcul d’itinéraires
gcweb-reference-img/lbs-integration/lbs-gestion-sinistre-2.png