Search Along

Cette page n’est plus maintenue depuis la version 2022 de Geoconcept Web. Pour accéder à la documentation à jour de ce web service, veuillez suivre ce lien.

Principe

Le web service de Search Along permet d’identifier les meilleurs candidats pour ajouter une étape à proximité d’un trajet pré-existant.

L’algorithme explore les solutions pour retourner parmi les candidats celui qui à le meilleur score en fonction des critères demandées

Disponibilité

Ce web service est disponible en permanence avec Geoconcept Web et un graphe.

Paramètres / propriétés

En entrée

paramètre description optionnel défaut

routes array of routes/route (inputRoute)

Tableau des trajets en entrée. Trajets pré-existant dans lesquels les candidats doivent être insérés.

oui *

routeNodes array of routeNodes/routeNode (inputRouteNode)

Tableau des trajets en entrée basés sur les noeuds du graphe (calcul plus rapide). Attention : un noeud physique n’a pas le même ID dans un autre graphe.

oui *

resources

Tableau des candidats

oui

method

Itinéraire le plus court (distance) ou le plus rapide (time)

oui

time

exclusions

Liste des règles de restrictions à utiliser, séparés par le caractère ; (Exemple : Toll, Tunnel, Bridge)

oui

snapMethod

Méthode d’accrochage au graphe
- standard : au tronçon connectable le plus proche
- extended : via les tronçons restreints (piétons…)
- nearest : uniquement au tronçon le plus proche
- unrestricted : sans règles de restriction
- nodes : Accrochage direct aux noeuds fournis par le paramètre locationNode ou, s’il n’est pas renseigné, au noeud les plus proche du paramètre location

oui

standard

avoidArea

Zone de transit interdit au format WKT (POLYGON ou MULTIPOLYGON) dans la projection (paramètre srs) demandée
Exemple en wgs84 : POLYGON ((-1.556892 47.21689, -1.556892 47.216904, [...] -1.556892 47.21689)) - MULTIPOLYGON (((-1.556892 47.21689, -1.556892 47.216904, [...] -1.556892 47.21689)), ((-1.558639 47.218144, -1.558639 47.218193, [...] -1.558639 47.218144)))
Attention les géométries WKT doivent être fermées.

oui

startDateTime

Date et heure de départ (format ISO8601 : heure locale) Exemple : 2014-01-21T09:00:00.000+01:00 (ou 2014-01-21T09:00:00.000%2B01:00) pour un départ le 21 janvier 2014, à 9h à Paris. Attention le caractère + peut être mal interprété par les navigateurs, dans ce cas, il faut le remplacer par %2B.

oui

graphName (déprécié)

Nom du graphe à utiliser
Ce paramètre est omis si le paramètre configName est utilisé.

oui

srs

projection (code EPSG comme epsg:4326 ou wgs84)

oui

profileId (déprécié)

Identifiant du véhicule (enregistré dans les profils de véhicule)
Ce paramètre est omis si le paramètre configName est utilisé.

oui

profileName (déprécié)

Profil du véhicule (enregistré dans les profils de véhicule)
Ce paramètre est omis si le paramètre configName est utilisé.

oui

configName

Nom de la configuration à utiliser (défini dans Geoconcept Web - Administration / Outils / Définitions des graphes)
Il remplace l’usage de graphName, profileId et profileName

oui

computeOptions

Liste des options pour le calcul, séparées par le caractère ;
- trafficPatterns : utilise les statistiques routières (il est nécessaire de renseigner le paramètre startDateTime et d’utiliser un graphe intégrant les informations de traffic patterns)
- speedPattern (M18) : utilise d’une speed pattern tel que définis dans le fichier SmartRoutingVehicles.xml qui se trouve dans le dossier `‘<GEOCONCEPT_WEB_HOME>’'\smartrouting\jee\smartrouting\conf\ . Usage : "speedPattern:slow-speed"
- length (M18) : longueur maximale autorisée en centimètre (il est nécessaire d’utiliser un graphe intégrant les attributs poids lourds). Usage : "length:950"
- width (M18) : largeur maximale autorisée en centimètre (il est nécessaire d’utiliser un graphe intégrant les attributs poids lourds). Usage : "width:255"
- height (M18) : hauteur maximale autorisée en centimètre (il est nécessaire d’utiliser un graphe intégrant les attributs poids lourds). Usage : "height:360"
- weight (M18) : poids maximum autorisé en kilogramme (il est nécessaire d’utiliser un graphe intégrant les attributs poids lourds). Usage : "weight:18000"
- axles (M18) : nombre maximum d’axe autorisé (il est nécessaire d’utiliser un graphe intégrant les attributs poids lourds). Usage : "axles:2"
- weightPerAxle (M18) : poids maximum autorisé par axe en kilogramme (il est nécessaire d’utiliser un graphe intégrant les attributs poids lourds). Usage : "weightPerAxle:9000"
- snapSpeed : vitesse d’accrochage au graphe en kilomètre par heure. Usage : "snapSpeed:10"

oui

maxDetourDurationSeconds

Filtre : détour maximum autorisé (en secondes)

oui

maxDetourDistanceMeters

Filtre : détour maximum autorisé (en mètres)

oui

maxDetourOriginDurationSeconds

Filtre : durée maximale autorisée entre le point de départ du trajet et le candidat (en secondes)

oui

maxDetourOriginDistanceMeters

Filtre : détour maximum autorisé entre le candidat et le point d’arrivée du trajet (en mètres)

oui

maxDetourDestinationDurationSeconds

Filtre : durée maximale autorisée entre le candidat et le point de d’arrivée du trajet (en secondes)

oui

maxDetourDestinationDistanceMeters

Filtre : détour maximum autorisé depuis le point d’arrivée (en mètres)

oui

timeOut

Time out pour le calcul (en millisecondes)

oui

(*) Au moins l’un des deux paramètres routes, et routeNodes doit être renseigné.

(M18) Disponible à partir de la version M18 des graphes fournis par GEOCONCEPT SAS.

Trajets en entrée (inputRoute)

paramètre description optionnel défaut

id

Identifiant du trajet

Non

departurePoint (geographicPoint)

Coordonnées du point de départ du trajet

Non

arrivalPoint (geographicPoint)

Coordonnées du point d’arrivée du trajet

Non

Coordonnées (geographicPoint)

paramètre description optionnel défaut

x

Première coordonnée ou longitude

Non

y

Deuxième coordonnée ou latitude

Non

Trajets en entrée basé sur les noeuds du graphe (inputRouteNode)

paramètre description optionnel défaut

id

Identifiant du trajet

Non

departureNode (geographicPoint)

Noeud de départ du trajet

Non

arrivalNode (geographicPoint)

Noeud d’arrivée du trajet

Non

Candidats (searchAlongResource)

paramètre description optionnel défaut

id

Identifiant du candidat

Non

x

Première coordonnée ou longitude

Non

y

Deuxième coordonnée ou latitude

Non

node

Noeud du candidat

Oui

priority1

Priorité 1

Oui

0

priority2

Priorité 2

Oui

0

En sortie

paramètre type min/max description

routes

array of routes/route (searchAlongRouteResult)

0/illimité

Liste des trajets calculés.

Liste des trajets calculés (searchAlongRouteResult)

paramètre type min/max description

id

string

0/1

Identifiant du trajet

directDistanceMeters

double

1/1

Distance totale sans détour (en mètres)

directDurationSeconds

double

1/1

Durée totale sans détour (en secondes)

resources

(searchAlongResourceResult)

0/illimité

Liste de candidats

Candidats (searchAlongResourceResult)

paramètre type min/max description

id

string

0/1

Identifiant du candidat

totalDistanceMeters

double

1/1

Distance totale avec détour (en mètres)

totalDurationSeconds

double

1/1

Durée totale avec détour (en secondes)

detourDistanceMeters

double

1/1

Distance du détour (en mètres)

detourDurationSeconds

double

1/1

Durée du détour (en secondes)

detourOriginDistanceMeters

double

1/1

Distance du détour depuis le point de départ du trajet jusqu’au candidat (en mètres)

detourOriginDurationSeconds

double

1/1

Durée du détour depuis le point de départ du trajet jusqu’au candidat (en secondes)

detourDestinationDistanceMeters

double

1/1

Distance du détour depuis le candidat jusqu’au point d’arrivée (en mètres)

detourDestinationDurationSeconds

double

1/1

Durée du détour depuis le candidat jusqu’au point d’arrivée (en secondes)

SOAP

WSDL

http://<server>/<webapp>/api/ws/searchAlongService?wsdl

Requête

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://geoconcept.com/gc/schemas">
   <soapenv:Header />
   <soapenv:Body>
      <sch:searchAlongV1>
         <!--Optional:-->
         <request>
            <routes>
               <route>
                  <id>dep</id>
                  <departurePoint>
                     <x>-1.553927</x>
                     <y>47.21858</y>
                  </departurePoint>
                  <arrivalPoint>
                     <x>-1.593927</x>
                     <y>47.18858</y>
                  </arrivalPoint>
               </route>
            </routes>
            <resources>
               <resource>
                  <id>res1</id>
                  <node />
                  <priority1>1</priority1>
                  <priority2>2</priority2>
                  <x>-1.511092</x>
                  <y>47.208355</y>
               </resource>
               <resource>
                  <id>res2</id>
                  <node />
                  <priority1>1</priority1>
                  <priority2>1</priority2>
                  <x>-1.549524</x>
                  <y>47.195484</y>
               </resource>
            </resources>
            <srs>epsg:4326</srs>
            <maxDetourDestinationDistanceMeters>-1</maxDetourDestinationDistanceMeters>
            <maxDetourDestinationDurationSeconds>-1</maxDetourDestinationDurationSeconds>
            <maxDetourDistanceMeters>-1</maxDetourDistanceMeters>
            <maxDetourDurationSeconds>-1</maxDetourDurationSeconds>
            <maxDetourOriginDistanceMeters>-1</maxDetourOriginDistanceMeters>
            <maxDetourOriginDurationSeconds>-1</maxDetourOriginDurationSeconds>
            <method>time</method>
                        <timeOut></timeOut>
         </request>
      </sch:searchAlongV1>
   </soapenv:Body>
</soapenv:Envelope>

Réponse

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:searchAlongV1Response xmlns:ns2="http://geoconcept.com/gc/schemas">
         <SearchAlongResult>
            <status>OK</status>
            <routes>
               <route>
                  <id>dep</id>
                  <directDistanceMeters>6850.71</directDistanceMeters>
                  <directDurationSeconds>973.14</directDurationSeconds>
                  <resources>
                     <id>res2</id>
                     <totalDistanceMeters>7808.36</totalDistanceMeters>
                     <totalDurationSeconds>1197.28</totalDurationSeconds>
                     <detourDistanceMeters>957.65</detourDistanceMeters>
                     <detourDurationSeconds>224.14</detourDurationSeconds>
                     <detourOriginDistanceMeters>3684.98</detourOriginDistanceMeters>
                     <detourOriginDurationSeconds>752.34</detourOriginDurationSeconds>
                     <detourDestinationDistanceMeters>4123.38</detourDestinationDistanceMeters>
                     <detourDestinationDurationSeconds>444.94</detourDestinationDurationSeconds>
                  </resources>
                  <resources>
                     <id>res1</id>
                     <totalDistanceMeters>13714.6</totalDistanceMeters>
                     <totalDurationSeconds>2261.52</totalDurationSeconds>
                     <detourDistanceMeters>6863.89</detourDistanceMeters>
                     <detourDurationSeconds>1288.38</detourDurationSeconds>
                     <detourOriginDistanceMeters>5731.27</detourOriginDistanceMeters>
                     <detourOriginDurationSeconds>1156.94</detourOriginDurationSeconds>
                     <detourDestinationDistanceMeters>7983.33</detourDestinationDistanceMeters>
                     <detourDestinationDurationSeconds>1104.58</detourDestinationDurationSeconds>
                  </resources>
               </route>
            </routes>
            <computationTime>118.72</computationTime>
         </SearchAlongResult>
      </ns2:searchAlongV1Response>
   </soap:Body>
</soap:Envelope>

REST (POST JSON)

Requête

Requête 

http://<server>/<webapp>/api/lbs/searchAlong.json

Data (JSON) 

{
   "routes":[
      {
         "id":"dep",
         "departurePoint":{
            "x":-1.553927,
            "y":47.218580
         },
         "arrivalPoint":{
            "x":-1.593927,
            "y":47.188580
         }
      }
   ],
   "resources":[
      {
         "id":"res1",
         "node":"",
         "priority1":1,
         "priority2":2,
         "x":-1.511092,
         "y":47.208354
      }
   ],
   "resources":[
      {
         "id":"res2",
         "node":"",
         "priority1":1,
         "priority2":1,
         "x":-1.549524,
         "y":47.195483
      }
   ],
   "method":"time",
   "srs":"epsg:4326",
   "maxDetourDurationSeconds":-1,
   "maxDetourDistanceMeters":-1,
   "maxDetourOriginDurationSeconds":-1,
   "maxDetourOriginDistanceMeters":-1,
   "maxDetourDestinationDurationSeconds":-1,
   "maxDetourDestinationDistanceMeters":-1
}

Réponse

La réponse est toujours encodée en UTF-8.

Format JSON 

{
    "message": null,
    "status": "OK",
    "routes": [
        {
            "id": "dep",
            "directDistanceMeters": 6850.71,
            "directDurationSeconds": 973.14,
            "resources": [
                {
                    "id": "res2",
                    "totalDistanceMeters": 7808.36,
                    "totalDurationSeconds": 1197.28,
                    "detourDistanceMeters": 957.65,
                    "detourDurationSeconds": 224.14,
                    "detourOriginDistanceMeters": 3684.98,
                    "detourOriginDurationSeconds": 752.34,
                    "detourDestinationDistanceMeters": 4123.38,
                    "detourDestinationDurationSeconds": 444.94
                }
            ]
        }
    ]
}

REST (POST XML)

Requête

Requête 

http://<server>/<webapp>/api/lbs/searchAlong.xml

Data (XML) 

<?xml version="1.0" encoding="UTF-8"?>
<searchAlongRequest>
   <routes>
      <route>
         <id>dep</id>
         <departurePoint>
            <x>-1.553927</x>
            <y>47.21858</y>
         </departurePoint>
         <arrivalPoint>
            <x>-1.593927</x>
            <y>47.18858</y>
         </arrivalPoint>
      </route>
   </routes>
   <resources>
      <resource>
         <id>res1</id>
         <node />
         <priority1>1</priority1>
         <priority2>2</priority2>
         <x>-1.511092</x>
         <y>47.208355</y>
      </resource>
      <resource>
         <id>res2</id>
         <node />
         <priority1>1</priority1>
         <priority2>1</priority2>
         <x>-1.549524</x>
         <y>47.195484</y>
      </resource>
   </resources>
   <srs>epsg:4326</srs>
   <maxDetourDestinationDistanceMeters>-1</maxDetourDestinationDistanceMeters>
   <maxDetourDestinationDurationSeconds>-1</maxDetourDestinationDurationSeconds>
   <maxDetourDistanceMeters>-1</maxDetourDistanceMeters>
   <maxDetourDurationSeconds>-1</maxDetourDurationSeconds>
   <maxDetourOriginDistanceMeters>-1</maxDetourOriginDistanceMeters>
   <maxDetourOriginDurationSeconds>-1</maxDetourOriginDurationSeconds>
   <method>time</method>
</searchAlongRequest>

Réponse

La réponse est toujours encodée en UTF-8.

Format XML 

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<searchAlongResult>
    <status>OK</status>
    <routes>
        <route>
            <id>dep</id>
            <directDistanceMeters>6850.71</directDistanceMeters>
            <directDurationSeconds>973.14</directDurationSeconds>
            <resources>
                <id>res2</id>
                <totalDistanceMeters>7808.36</totalDistanceMeters>
                <totalDurationSeconds>1197.28</totalDurationSeconds>
                <detourDistanceMeters>957.65</detourDistanceMeters>
                <detourDurationSeconds>224.14</detourDurationSeconds>
                <detourOriginDistanceMeters>3684.98</detourOriginDistanceMeters>
                <detourOriginDurationSeconds>752.34</detourOriginDurationSeconds>
                <detourDestinationDistanceMeters>4123.38</detourDestinationDistanceMeters>
                <detourDestinationDurationSeconds>444.94</detourDestinationDurationSeconds>
            </resources>
            <resources>
                <id>res1</id>
                <totalDistanceMeters>13714.6</totalDistanceMeters>
                <totalDurationSeconds>2261.52</totalDurationSeconds>
                <detourDistanceMeters>6863.89</detourDistanceMeters>
                <detourDurationSeconds>1288.38</detourDurationSeconds>
                <detourOriginDistanceMeters>5731.27</detourOriginDistanceMeters>
                <detourOriginDurationSeconds>1156.94</detourOriginDurationSeconds>
                <detourDestinationDistanceMeters>7983.33</detourDestinationDistanceMeters>
                <detourDestinationDurationSeconds>1104.58</detourDestinationDurationSeconds>
            </resources>
        </route>
    </routes>
</searchAlongResult>

Retours possibles

Cas d’une recherche de proximité trouvée (searchAlongResult/status est OK) 

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<searchAlongResult>
    <status>OK</status>
    <routes>
        <route>
            <id>dep</id>
            <directDistanceMeters>6850.71</directDistanceMeters>
            <directDurationSeconds>973.14</directDurationSeconds>
            <resources>
                <id>res2</id>
                <totalDistanceMeters>7808.36</totalDistanceMeters>
                <totalDurationSeconds>1197.28</totalDurationSeconds>
                <detourDistanceMeters>957.65</detourDistanceMeters>
                <detourDurationSeconds>224.14</detourDurationSeconds>
                <detourOriginDistanceMeters>3684.98</detourOriginDistanceMeters>
                <detourOriginDurationSeconds>752.34</detourOriginDurationSeconds>
                <detourDestinationDistanceMeters>4123.38</detourDestinationDistanceMeters>
                <detourDestinationDurationSeconds>444.94</detourDestinationDurationSeconds>
            </resources>
            <resources>
                <id>res1</id>
                <totalDistanceMeters>13714.6</totalDistanceMeters>
                <totalDurationSeconds>2261.52</totalDurationSeconds>
                <detourDistanceMeters>6863.89</detourDistanceMeters>
                <detourDurationSeconds>1288.38</detourDurationSeconds>
                <detourOriginDistanceMeters>5731.27</detourOriginDistanceMeters>
                <detourOriginDurationSeconds>1156.94</detourOriginDurationSeconds>
                <detourDestinationDistanceMeters>7983.33</detourDestinationDistanceMeters>
                <detourDestinationDurationSeconds>1104.58</detourDestinationDurationSeconds>
            </resources>
        </route>
    </routes>
</searchAlongResult>

Cas d’un SRS incorrect 

{"message":"NullPointerException: null","status":"ERROR"}

Cas d’une absence de ressource (searchAroundResponse/status est OK) 

{"message":"Input resources list must not be null and empty!","status":"ERROR","routes":[]}

FAQ

1. Est-il possible de prioriser le temps de parcours ou la distance ?
2. Peut-on utiliser des alias à défaut des noms de fichiers .siti pour appeler une datasource ?
3. Comment utiliser les statistiques routières ?
4. Comment s’organise le classement des adresses retournées, par rapport à la distance, au temps, aux priorités ?
5. Quel format doit avoir la priorité et est-il possible de définir un ordre de classement ? (croissant/décroissant)
6. Si une seule adresse de la liste a une priorité à 0, la priorité est elle prise en compte pour une des adresses de la liste ?
7. Comment faire un calcul d’itinéraire sans péage?
8. Qu’est-ce que les Speed Patterns ? Comment les utiliser ?

1.

Est-il possible de prioriser le temps de parcours ou la distance ?

Oui, en changeant la méthode method distance ou time

2.

Peut-on utiliser des alias à défaut des noms de fichiers .siti pour appeler une datasource ?

Oui, cf. détails dans la FAQ du Web Service du géocodage inverse.

3.

Comment utiliser les statistiques routières ?

Vérifier que le graphe contient bien ces statistiques et utiliser les deux paramètres suivants : computeOptions avec la valeur trafficPatterns et startDateTime pour préciser la date/heure de départ.

4.

Comment s’organise le classement des adresses retournées, par rapport à la distance, au temps, aux priorités ?

Le classement est fait par priorité 1 croissante, puis par priorité 2 croissante, puis par temps ou distance ou distance à vol d’oiseau croissant.

5.

Quel format doit avoir la priorité et est-il possible de définir un ordre de classement ? (croissant/décroissant)

La priorité est un entier, actuellement le résultat est toujours par ordre croissant. Pour obtenir l’ordre inverse, il faut mettre n - priorité dans l’attribut.

6.

Si une seule adresse de la liste a une priorité à 0, la priorité est elle prise en compte pour une des adresses de la liste ?

Actuellement, la priorité 0 n’est pas traitée de manière spéciale. Il faut donc mettre toutes les priorités à 0 si on veut ignorer le critère.

7.

Comment faire un calcul d’itinéraire sans péage?

Si la contrainte Toll a bien été incluse dans le graphe, placer une exclusion dans exclusions

8.

Qu’est-ce que les Speed Patterns ? Comment les utiliser ?

Afin de proposer des temps de trajets au plus près des conditions de circulation, les graphes fournis par GEOCONCEPT SAS intègrent, à partir de la version M18, pour les voitures et pour les camions 5 profils de vitesses (Speed Patterns) pour tenir compte des différents niveaux de congestion dans une journée :

  • standard normal-speed correspond à la vitesse d’une heure moyennement chargée (11h)
  • nuit fast-speed correspond à un trafic très fluide, observé le plus souvent la nuit (3h)
  • chargée slow-speed correspond aux heures de trafic denses (8h)
  • heure de pointe very-slow-speed correspond aux heures de trafic denses dans les grandes agglomérations, plus lent que le précédent (8h)
  • défaut defaut correspond aux vitesses moyennées sur une journée entière

Pour les utiliser il faut passer, lors de l’appel au web service, le paramètre computeOptions avec l’option speedPattern et préciser la valeur de la Speed Pattern demandée sans omettre un profil de véhicule
Exemple :

+

&computeOptions=speedPattern:fast-speed&profileId=1
Comment utiliser les attributs poids lourds ?

Il faut que le graphe intègre les attributs de poids lourds (en standard dans les graphes fournis par GEOCONCEPT SAS à partir de la version M18) et soit calculer un itinéraire en utilisant un profil de véhicule utilisant les restrictions (cf. le catalogue de véhicules, éditable, définit dans le fichier SmartRoutingVehicles.xml, dans le dossier `‘<GEOCONCEPT_WEB_HOME>’'\smartrouting\jee\smartrouting\conf\ ), soit surcharger l’appel au web service en utilisant le paramètre computeOptions avec les options length, width, height, weight, axles et/ou weightPerAxle.
Exemple pour un trajet avec un véhicule de 4,5 mètres de hauteur :

&computeOptions=height:450