Géocodage inverse

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

La requête comprend un couple de coordonnées en entrée, le service retourne une ou plusieurs réponse(s) possible(s) (en fonction du nombre maximum de réponses souhaitées), en incluant l’adresse, le code postal, la ville, le pays ainsi que la distance entre le résultat et le point de départ (coordonnées indiquées en entrée).

Ce service de géocodage inverse interroge le graphe préalablement installé dans le répertoire dédié.

Disponibilité

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

Changement de version

Les versions précédente du web service sont conservées dans Geoconcept Web pour assurer la compatibilité avec les développements antérieurs. Il est recommandé d’utiliser la version la plus récente.

Changements avec la v3

  • Ajout du paramètre "coordinates" dans la réponse

Changements avec la v2

  • Le paramètre "postalCode" est renommé "postCode"
  • Le paramètre "distanceToLocation" est renommé "distanceMetersToLocation"
  • Ajout du paramètre "srs" dans la réponse

V2

Paramètres / propriétés

En entrée

paramètre description optionnel défaut

srs

projection (code EPSG comme epsg:4326 ou wgs84)

oui

locations

Coordonnées du point de départ pour le géocodage inverse
en SOAP, il est nécessaire de remplir les coordonnées dans chacune des balises dédiées <x></x> et <y></y>
en REST, Les points sont séparés par le caractère « ; ». Les points sont caractèrisés par un couple de coordonnées XY séparés par une « , ».

non

graphName

indiquer le nom du graphe à utiliser pour faire fonctionner le WebService

oui

maxDistance

distance maximale de recherche pour trouver les rues avoisinantes au point de départ du géocodage inverse
si le paramètre est passé, il est conseillé de mettre une valeur significativement supérieure à 1 (en mètres).

non

1000

maxCandidates

nombre maximum de résultats d’adresses dans la réponse
si le paramètre est passé, la valeur minimum à indiquer est 1.

oui

1

maxDistanceBetweenCandidates

Distance maximale (en mètres) entre chaque candidat.
si le paramètre est passé, il est conseillé de mettre une valeur significativement supérieure à 1 (en mètres).

non

100

En sortie

Rappel des coordonnées du départ de la recherche (reverseGeocodingV2Response)

propriété type min/max description

location

string

0/1

coordonnées XY du point de départ pour le géocodage inverse

srs

string

0/1

projection (code EPSG comme epsg:4326 ou wgs84)

address / addresses

0/illimité

liste des adresses (candidats) retournées

Candidats retournés (Address)

propriété type min/max description

addressLine

string

0/1

rue trouvée

postCode

string

0/1

code postal trouvé

city

string

0/1

ville en relation avec le candidat retourné

country

string

0/1

pays en lien avec le candidat retourné

distanceMetersToLocation

double

1/1

Distance (en mètres) entre le candidat retourné et le point de départ

coordinates

string

1/1

Coordonnées de l’adresse

SOAP

WSDL

http://<server>/<webapp>/api/ws/reverseGeocodingService?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:reverseGeocodingV3>
         <!--Optional:-->
         <request>
            <!--Optional:-->
            <srs>epsg:4326</srs>
            <!--Zero or more repetitions:-->
            <locations>
               <x>-1.565769</x>
               <y>47.226236</y>
            </locations>
            <!--Optional:-->
            <graphName></graphName>
            <!--Optional:-->
            <maxDistance>1000</maxDistance>
            <!--Optional:-->
            <maxCandidates>2</maxCandidates>
            <!--Optional:-->
            <maxDistanceBetweenCandidates>100</maxDistanceBetweenCandidates>
         </request>
      </sch:reverseGeocodingV2>
   </soapenv:Body>
</soapenv:Envelope>

Réponse

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:reverseGeocodingV3Response xmlns:ns2="http://geoconcept.com/gc/schemas">
        <reverseGeocodingResultsV3>
           <status>OK</status>
           <reverseGeocodingResult>
              <location>-1.565769;47.226236</location>
              <srs>epsg:4326</srs>
              <addresses>
                 <address>
                    <addressLine>26 RUE DU MAINE</addressLine>
                    <postCode>44000</postCode>
                    <city>NANTES</city>
                    <country>France</country>
                    <distanceMetersToLocation>1.2300580212448586</distanceMetersToLocation>
                    <coordinates>-1.565757,47.226229</coordinates>
                 </address>
                 <address>
                    <addressLine>2 RUE JOYAU</addressLine>
                    <postCode>44000</postCode>
                    <city>NANTES</city>
                    <country>France</country>
                    <distanceMetersToLocation>27.310568595900534</distanceMetersToLocation>
                    <coordinates>-1.566068,47.226099</coordinates>
                 </address>
              </addresses>
           </reverseGeocodingResult>
        </reverseGeocodingResultsV3>
      </ns2:reverseGeocodingV2Response>
   </soap:Body>
</soap:Envelope>
REST

Requête

Requête JSON 

http://<server>/<webapp>/api/lbs/reverseGeocoding/v3.json?locations=-1.565769,47.226236&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100

Requête JSON-P 

http://<server>/<webapp>/api/lbs/reverseGeocoding/v3.json?locations=-1.565769,47.226236&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100&fonction=myFonction

Requête XML 

http://<server>/<webapp>/api/lbs/reverseGeocoding/v3.xml?locations=-1.565769,47.226236&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100

Réponse

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

Format JSON 

{
   "message": null,
   "status": "OK",
   "reverseGeocodingResults": [
      {
         "location": "-1.565769;47.226236",
         "srs": null,
         "addresses": [
            {
               "addressLine": "26 RUE DU MAINE",
               "postCode": "44000",
               "city": "NANTES",
               "country": "France",
               "distanceMetersToLocation": 1.2300581,
               "coordinates": "-1.565757,47.226229"
            },
            {
               "addressLine": "2 RUE JOYAU",
               "postCode": "44000",
               "city": "NANTES",
               "country": "France",
               "distanceMetersToLocation": 27.310568,
               "coordinates": "-1.566068,47.226099"
            }
         ]
      }
   ]
}

Format JSON-P 

myCallback(
    {
       "message": null,
       "status": "OK",
       "reverseGeocodingResults": [
          {
             "location": "-1.565769;47.226236",
             "srs": null,
             "addresses": [
                {
                   "addressLine": "26 RUE DU MAINE",
                   "postCode": "44000",
                   "city": "NANTES",
                   "country": "France",
                   "distanceMetersToLocation": 1.2300581,
                   "coordinates": "-1.565757,47.226229"
                },
                {
                   "addressLine": "2 RUE JOYAU",
                   "postCode": "44000",
                   "city": "NANTES",
                   "country": "France",
                   "distanceMetersToLocation": 27.310568,
                   "coordinates": "-1.566068,47.226099"
                }
             ]
          }
       ]
    }
)

Format XML 

<reverseGeocodingResultsV3>
   <status>OK</status>
   <reverseGeocodingResult>
      <location>-1.565769;47.226236</location>
      <addresses>
         <address>
            <addressLine>26 RUE DU MAINE</addressLine>
            <postCode>44000</postCode>
            <city>NANTES</city>
            <country>France</country>
            <distanceMetersToLocation>1.2300580212448586</distanceMetersToLocation>
            <coordinates>-1.565757,47.226229</coordinates>
         </address>
         <address>
            <addressLine>2 RUE JOYAU</addressLine>
            <postCode>44000</postCode>
            <city>NANTES</city>
            <country>France</country>
            <distanceMetersToLocation>27.310568595900534</distanceMetersToLocation>
            <coordinates>-1.566068,47.226099</coordinates>
         </address>
      </addresses>
   </reverseGeocodingResult>
</reverseGeocodingResultsV3>

Retours possibles

Exemple d’un géocodage inverse correct (reverseGeocodingResult/status est OK) 

<reverseGeocodingResultsV3>
   <status>OK</status>
   <reverseGeocodingResult>
      <location>-1.565769;47.226236</location>
      <addresses>
         <address>
            <addressLine>26 RUE DU MAINE</addressLine>
            <postCode>44000</postCode>
            <city>NANTES</city>
            <country>France</country>
            <distanceMetersToLocation>1.2300580212448586</distanceMetersToLocation>
            <coordinates>-1.565757,47.226229</coordinates>
         </address>
         <address>
            <addressLine>2 RUE JOYAU</addressLine>
            <postCode>44000</postCode>
            <city>NANTES</city>
            <country>France</country>
            <distanceMetersToLocation>27.310568595900534</distanceMetersToLocation>
            <coordinates>-1.566068,47.226099</coordinates>
         </address>
      </addresses>
   </reverseGeocodingResult>
</reverseGeocodingResultsV3>

Cas d’un géocodage inverse où le maxDistance ne respecte pas une valeur > à 1 (on préconise une valeur minimum de 100). (reverseGeocodingResult/status est OK) 

<?xml version="1.0" encoding="UTF-8"?>
<serviceResult>
   <message>ServiceException: Error in reverse geocoding computation Error in smartrouting Failed to execute ReverseGeocode com.geoconcept.smartrouting.SmartRoutingNativeException: failed to connect { -1.565769, 47.226236, 0.000000 } failed to connect { -1.565769, 47.226236, 0.000000 }</message>
   <status>ERROR</status>
</serviceResult>

Cas d’une requête où l’un des paramètres (<locations>,…) n’est pas renseigné. (reverseGeocodingResult/status est ERROR) 

<reverseGeocodingResultsV3>
    <message>locations must be not null</message>
    <status>ERROR</status>
</reverseGeocodingResultsV3>

Cas d’une requête qui ne s’accroche pas au graphe (reverseGeocodingResult/status est ERROR) 

<serviceResult>
    <message>ServiceException: Error in reverse geocoding computation Error in smartrouting Failed to execute ReverseGeocode com.geoconcept.smartrouting.SmartRoutingNativeException: failed to connect { -1.565769, 147.226236, 0.000000 } failed to connect { -1.565769, 147.226236, 0.000000 }
    </message>
    <status>ERROR</status>
</serviceResult>

V2

Paramètres / propriétés

En entrée

paramètre description optionnel défaut

srs

projection (code EPSG comme epsg:4326 ou wgs84)

oui

locations

Coordonnées du point de départ pour le géocodage inverse
en SOAP, il est nécessaire de remplir les coordonnées dans chacune des balises dédiées <x></x> et <y></y>
en REST, Les points sont séparés par le caractère « ; ». Les points sont caractèrisés par un couple de coordonnées XY séparés par une « , ».

non

graphName

indiquer le nom du graphe à utiliser pour faire fonctionner le WebService

oui

maxDistance

distance maximale de recherche pour trouver les rues avoisinantes au point de départ du géocodage inverse
si le paramètre est passé, il est conseillé de mettre une valeur significativement supérieure à 1 (en mètres).

non

1000

maxCandidates

nombre maximum de résultats d’adresses dans la réponse
si le paramètre est passé, la valeur minimum à indiquer est 1.

oui

1

maxDistanceBetweenCandidates

Distance maximale (en mètres) entre chaque candidat.
si le paramètre est passé, il est conseillé de mettre une valeur significativement supérieure à 1 (en mètres).

non

100

En sortie

Rappel des coordonnées du départ de la recherche (reverseGeocodingV2Response)

propriété type min/max description

location

string

0/1

coordonnées XY du point de départ pour le géocodage inverse

srs

string

0/1

projection (code EPSG comme epsg:4326 ou wgs84)

address / addresses

0/illimité

liste des adresses (candidats) retournées

Candidats retournés (Address)

propriété type min/max description

addressLine

string

0/1

rue trouvée

postCode

string

0/1

code postal trouvé

city

string

0/1

ville en relation avec le candidat retourné

country

string

0/1

pays en lien avec le candidat retourné

distanceMetersToLocation

double

1/1

Distance (en mètres) entre le candidat retourné et le point de départ

SOAP

WSDL

http://<server>/<webapp>/api/ws/reverseGeocodingService?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:reverseGeocodingV2>
         <!--Optional:-->
         <request>
            <!--Optional:-->
            <srs>epsg:4326</srs>
            <!--Zero or more repetitions:-->
            <locations>
               <x>-1.565769</x>
               <y>47.226236</y>
            </locations>
            <!--Optional:-->
            <graphName></graphName>
            <!--Optional:-->
            <maxDistance>1000</maxDistance>
            <!--Optional:-->
            <maxCandidates>2</maxCandidates>
            <!--Optional:-->
            <maxDistanceBetweenCandidates>100</maxDistanceBetweenCandidates>
         </request>
      </sch:reverseGeocodingV2>
   </soapenv:Body>
</soapenv:Envelope>

Réponse

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:reverseGeocodingV2Response xmlns:ns2="http://geoconcept.com/gc/schemas">
         <ReverseGeocodingResults>
            <status>OK</status>
            <reverseGeocodingResult>
               <location>-1,565769;47,226236</location>
               <srs>epsg:4326</srs>
               <addresses>
                  <address>
                     <addressLine>24 RUE DU MAINE</addressLine>
                     <postCode>44000</postCode>
                     <city>NANTES</city>
                     <country>France</country>
                     <distanceMetersToLocation>1.2509365114145279</distanceMetersToLocation>
                  </address>
                  <address>
                     <addressLine>2 RUE JOYAU</addressLine>
                     <postCode>44000</postCode>
                     <city>NANTES</city>
                     <country>France</country>
                     <distanceMetersToLocation>27.312077690953934</distanceMetersToLocation>
                  </address>
               </addresses>
            </reverseGeocodingResult>
         </ReverseGeocodingResults>
      </ns2:reverseGeocodingV2Response>
   </soap:Body>
</soap:Envelope>
REST

Requête

Requête JSON 

http://<server>/<webapp>/api/lbs/reverseGeocoding/v2.json?locations=-1.565769,47.226236&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100

Requête JSON-P 

http://<server>/<webapp>/api/lbs/reverseGeocoding/v2.json?locations=-1.565769,47.226236&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100&fonction=myFonction

Requête XML 

http://<server>/<webapp>/api/lbs/reverseGeocoding/v2.xml?locations=-1.565769,47.226236&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100

Réponse

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

Format JSON 

{
  "message": null,
  "status": "OK",
  "reverseGeocodingResults": [
    {
      "location": "-1.565769;47.226236",
      "addresses": [
        {
          "addressLine": "26 RUE DU MAINE",
          "postalCode": "44000",
          "city": "NANTES",
          "country": "France",
          "distanceToLocation": 1.2370980024960025
        },
        {
          "addressLine": "2 RUE JOYAU",
          "postalCode": "44000",
          "city": "NANTES",
          "country": "France",
          "distanceToLocation": 27.302664051548852
        }
      ]
    }
  ]
}

Format JSON-P 

myCallback(
    {
      "message": null,
      "status": "OK",
      "reverseGeocodingResults": [
        {
          "location": "-1.565769;47.226236",
          "addresses": [
            {
              "addressLine": "26 RUE DU MAINE",
              "postalCode": "44000",
              "city": "NANTES",
              "country": "France",
              "distanceToLocation": 1.2370980024960025
            },
            {
              "addressLine": "2 RUE JOYAU",
              "postalCode": "44000",
              "city": "NANTES",
              "country": "France",
              "distanceToLocation": 27.302664051548852
            }
          ]
        }
      ]
    }
)

Format XML 

<reverseGeocodingResultsV2>
   <status>OK</status>
   <reverseGeocodingResult>
      <location>-1.565769;47.226236</location>
      <srs>epsg:4326</srs>
      <addresses>
         <address>
            <addressLine>26 RUE DU MAINE</addressLine>
            <postCode>44000</postCode>
            <city>NANTES</city>
            <country>France</country>
            <distanceMetersToLocation>1.2370980024960025</distanceMetersToLocation>
         </address>
         <address>
            <addressLine>2 RUE JOYAU</addressLine>
            <postCode>44000</postCode>
            <city>NANTES</city>
            <country>France</country>
            <distanceMetersToLocation>27.302664051548852</distanceMetersToLocation>
         </address>
      </addresses>
   </reverseGeocodingResult>
</reverseGeocodingResultsV2>

Retours possibles

Exemple d’un géocodage inverse correct (reverseGeocodingResult/status est OK) 

<reverseGeocodingResultsV2>
   <status>OK</status>
   <reverseGeocodingResult>
      <location>-1.565769;47.226236</location>
      <srs>epsg:4326</srs>
      <addresses>
         <address>
            <addressLine>26 RUE DU MAINE</addressLine>
            <postCode>44000</postCode>
            <city>NANTES</city>
            <country>France</country>
            <distanceMetersToLocation>1.2370980024960025</distanceMetersToLocation>
         </address>
         <address>
            <addressLine>2 RUE JOYAU</addressLine>
            <postCode>44000</postCode>
            <city>NANTES</city>
            <country>France</country>
            <distanceMetersToLocation>27.302664051548852</distanceMetersToLocation>
         </address>
      </addresses>
   </reverseGeocodingResult>
</reverseGeocodingResultsV2>

Cas d’un géocodage inverse où le maxDistance ne respecte pas une valeur > à 1 (on préconise une valeur minimum de 100). (reverseGeocodingResult/status est OK) 

<?xml version="1.0" encoding="UTF-8"?>
<serviceResult>
   <message>ServiceException: Error in reverse geocoding computation Error in smartrouting Failed to execute ReverseGeocode com.geoconcept.smartrouting.SmartRoutingNativeException: failed to connect { -1.565769, 47.226236, 0.000000 } failed to connect { -1.565769, 47.226236, 0.000000 }</message>
   <status>ERROR</status>
</serviceResult>

Cas d’une requête où l’un des paramètres (<locations>,…) n’est pas renseigné. (reverseGeocodingResult/status est ERROR) 

<reverseGeocodingResultsV2>
    <message>locations must be not null</message>
    <status>ERROR</status>
</reverseGeocodingResultsV2>

Cas d’une requête qui ne s’accroche pas au graphe à partir de la version 2.0.9 de SmartRouting Server (reverseGeocodingResult/status est ERROR) 

<serviceResult>
    <message>ServiceException: Error in reverse geocoding computation Error in smartrouting Failed to execute ReverseGeocode com.geoconcept.smartrouting.SmartRoutingNativeException: failed to connect { -1.565769, 147.226236, 0.000000 } failed to connect { -1.565769, 147.226236, 0.000000 }
    </message>
    <status>ERROR</status>
</serviceResult>

V1

Paramètres / propriétés

En entrée

paramètre description optionnel défaut

srs

projection (code EPSG comme epsg:4326 ou wgs84)

oui

locations

Coordonnées du point de départ pour le géocodage inverse
en SOAP, il est nécessaire de remplir les coordonnées dans chacune des balises dédiées <x></x> et <y></y>
en REST, Les points sont séparés par le caractère « ; ». Les points sont caractèrisés par un couple de coordonnées XY séparés par une « , ».

non

graphName

indiquer le nom du graphe à utiliser pour faire fonctionner le WebService

oui

maxDistance

distance maximale de recherche pour trouver les rues avoisinantes au point de départ du géocodage inverse
si le paramètre est passé, il est conseillé de mettre une valeur significativement supérieure à 1 (en mètres).

non

maxCandidates

nombre maximum de résultats d’adresses dans la réponse
si le paramètre est passé, la valeur minimum à indiquer est 1.

oui

maxDistanceBetweenCandidates

Distance maximale (en mètres) entre chaque candidat.
si le paramètre est passé, il est conseillé de mettre une valeur significativement supérieure à 1 (en mètres).

non

En sortie

Rappel des coordonnées du départ de la recherche (location)

propriété type min/max description

location

string

0/1

coordonnées XY du point de départ pour le géocodage inverse

address / addresses

0/illimité

liste des adresses (candidats) retournées

Candidats retournés (Address)

propriété type min/max description

addressLine

string

0/1

rue trouvée

postalCode

string

0/1

code postal trouvé

city

string

0/1

ville en relation avec le candidat retourné

country

string

0/1

pays en lien avec le candidat retourné

distanceToLocation

integer

1/1

Distance (en mètres) entre le candidat retourné et le point de départ

SOAP

WSDL

http://<server>/<webapp>/api/ws/reverseGeocodingService?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:reverseGeocoding>
         <!--Optional:-->
         <request>
            <!--Optional:-->
            <srs></srs>
            <!--Zero or more repetitions:-->
            <locations>
               <x>2.324382</x>
               <y>48.803305</y>
            </locations>
            <!--Optional:-->
            <graphName></graphName>
            <!--Optional:-->
            <maxDistance>1000</maxDistance>
            <!--Optional:-->
            <maxCandidates>10</maxCandidates>
            <!--Optional:-->
            <maxDistanceBetweenCandidates>100</maxDistanceBetweenCandidates>
         </request>
      </sch:reverseGeocoding>
   </soapenv:Body>
</soapenv:Envelope>

Réponse

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:reverseGeocodingResponse xmlns:ns2="http://geoconcept.com/gc/schemas">
         <ReverseGeocodingResults>
            <status>OK</status>
            <reverseGeocodingResult>
               <location>2.324382;48.803305</location>
               <addresses>
                  <address>
                     <addressLine>AVENUE ARISTIDE BRIAND</addressLine>
                     <postalCode>92220</postalCode>
                     <city>BAGNEUX</city>
                     <country>FRANCE</country>
                     <distanceToLocation>18.661267300047538</distanceToLocation>
                  </address>
                  <address>
                     <addressLine>RUE DU MIDI</addressLine>
                     <postalCode>94110</postalCode>
                     <city>ARCUEIL</city>
                     <country>FRANCE</country>
                     <distanceToLocation>29.691380904228758</distanceToLocation>
                  </address>
               </addresses>
            </reverseGeocodingResult>
         </ReverseGeocodingResults>
      </ns2:reverseGeocodingResponse>
   </soap:Body>
</soap:Envelope>
REST

Requête

Requête JSON 

http://<server>/<webapp>/api/lbs/reverseGeocoding.json?locations=2.324382,48.803305&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100

Requête JSON-P 

http://<server>/<webapp>/api/lbs/reverseGeocoding.json?locations=2.324382,48.803305&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100&fonction=myFonction

Requête XML 

http://<server>/<webapp>/api/lbs/reverseGeocoding.xml?locations=2.324382,48.803305&maxDistance=1000&maxCandidates=2&maxDistanceBetweenCandidates=100

Réponse

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

Format JSON 

{
   "message": null,
   "status": "OK",
   "reverseGeocodingResults": [   {
      "location": "2.324382;48.803305",
      "addresses":       [
                  {
            "addressLine": "AVENUE ARISTIDE BRIAND",
            "postalCode": "92220",
            "city": "BAGNEUX",
            "country": "FRANCE",
            "distanceToLocation": 18.661267300047538
         },
                  {
            "addressLine": "RUE DU MIDI",
            "postalCode": "94110",
            "city": "ARCUEIL",
            "country": "FRANCE",
            "distanceToLocation": 29.691380904228758
         }
      ]
   }]
}

Format JSON-P 

myCallback({
        "message":null,"status":"OK",
        "reverseGeocodingResults":[
                {
                        "location":"2.324382;48.803305",
                                "addresses":[
                                        {
                                                "addressLine":"AVENUE ARISTIDE BRIAND",
                                                "postalCode":"92220",
                                                "city":"BAGNEUX",
                                                "country":"FRANCE",
                                                "distanceToLocation":18.661267300047538
                                        },
                                        {
                                                "addressLine":"RUE DU MIDI",
                                                "postalCode":"94110",
                                                "city":"ARCUEIL",
                                                "country":"FRANCE",
                                                "distanceToLocation":29.691380904228758
                                        }
]}]}

Format XML 

<reverseGeocodingResults>
   <status>OK</status>
   <reverseGeocodingResult>
      <location>2.324382;48.803305</location>
      <addresses>
         <address>
            <addressLine>AVENUE ARISTIDE BRIAND</addressLine>
            <postalCode>92220</postalCode>
            <city>BAGNEUX</city>
            <country>FRANCE</country>
            <distanceToLocation>18.661267300047538</distanceToLocation>
         </address>
         <address>
            <addressLine>RUE DU MIDI</addressLine>
            <postalCode>94110</postalCode>
            <city>ARCUEIL</city>
            <country>FRANCE</country>
            <distanceToLocation>29.691380904228758</distanceToLocation>
         </address>
      </addresses>
   </reverseGeocodingResult>
</reverseGeocodingResults>

Retours possibles

Exemple d’un géocodage inverse correct (reverseGeocodingResult/status est OK) 

<reverseGeocodingResults>
   <status>OK</status>
   <reverseGeocodingResult>
      <location>2.324382;48.803305</location>
      <addresses>
         <address>
            <addressLine>AVENUE ARISTIDE BRIAND</addressLine>
            <postalCode>92220</postalCode>
            <city>BAGNEUX</city>
            <country>FRANCE</country>
            <distanceToLocation>18.661267300047538</distanceToLocation>
         </address>
         <address>
            <addressLine>RUE DU MIDI</addressLine>
            <postalCode>94110</postalCode>
            <city>ARCUEIL</city>
            <country>FRANCE</country>
            <distanceToLocation>29.691380904228758</distanceToLocation>
         </address>
      </addresses>
   </reverseGeocodingResult>
</reverseGeocodingResults>

Cas d’un géocodage inverse où le maxDistanceBetweenCandidates ne respecte pas une valeur > à 1 (on préconise une valeur minimum de 100). (reverseGeocodingResult/status est OK) 

<reverseGeocodingResults>
   <status>OK</status>
   <reverseGeocodingResult>
      <location>2.324382;48.803305</location>
      <addresses>
         <address>
            <addressLine>AVENUE ARISTIDE BRIAND</addressLine>
            <postalCode>92220</postalCode>
            <city>BAGNEUX</city>
            <country>FRANCE</country>
            <distanceToLocation>18.661267300047538</distanceToLocation>
         </address>
      </addresses>
   </reverseGeocodingResult>
</reverseGeocodingResults>

Cas d’un géocodage inverse où le maxDistance ne respecte pas une valeur > à 1 (on préconise une valeur minimum de 100). (reverseGeocodingResult/status est OK) 

<reverseGeocodingResults>
   <status>OK</status>
   <reverseGeocodingResult>
      <location>2.324382;48.803305</location>
      <addresses/>
   </reverseGeocodingResult>
</reverseGeocodingResults>

Cas d’une requête où le paramètre <locations> n’est pas indiqué. (reverseGeocodingResult/status est ERROR) 

<reverseGeocodingResults>
   <message>locations must be not null</message>
   <status>ERROR</status>
</reverseGeocodingResults>

Cas d’une requête qui ne s’accroche pas au graphe à partir de la version 2.0.9 de SmartRouting Server (serviceResult/status est ERROR) 

<serviceResult>
    <message>ServiceException: Error in reverse geocoding computation
    Error in smartrouting
    Failed to execute ReverseGeocode
com.geoconcept.smartrouting.SmartRoutingNativeException: failed to connect { 2.165931, 49.218690, 0.000000 }
failed to connect { 2.165931, 49.218690, 0.000000 }
    </message>
    <status>ERROR</status>
</serviceResult>

FAQ

1. Comment est interprété la distance maximale ?
2. Quel est le rôle du paramètre maxCandidates ?
3. Quelle est l’importance du paramètre maxDistanceBetweenCandidates ?
4. Peut-on utiliser des alias à défaut des noms de fichiers .siti pour appeler une datasource ?

1.

Comment est interprété la distance maximale ?

La balise <maxDistance> est obligatoire et nécessite d’avoir une valeur supérieure à 1. Attention tout de même, si la distance maximale n’est pas suffisamment importante, le risque de n’avoir aucun candidat retourné sera grand.

2.

Quel est le rôle du paramètre maxCandidates ?

Il permet de définir le nombre de réponses que l’on souhaite obtenir, lorsque l’on est dans un cas où le nombre de candidats potentiels est important. Si aucune valeur n’est indiquée, c’est la valeur iti.maxTargets renseignée dans l’Administration de Geoconcept Web qui prend le relai.

3.

Quelle est l’importance du paramètre maxDistanceBetweenCandidates ?

Si ce paramètre est mal renseigné, le webservice peut ne pas renvoyer de réponse positive. Il est vivement conseillé de mettre une valeur supérieur à 1. Si aucune valeur n’est mentionnée, c’est la valeur iti.candidatesDeltaDistance renseignée dans l’Administration de Geoconcept Web qui prédomine. Attention, si la distance entre les candidats n’est pas assez grande, le risque de n’avoir aucun candidat retourné est grand.

4.

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

Oui. Un paramétrage spécifique est à réaliser pour permettre l’exploitation d’alias permettant d’utiliser plusieurs sources de graphes. Les étapes à respecter sont les suivantes :

  • Stopper le service Tomcat,
  • Déposer les graphes (.siti et en option les fichiers .siti.MG et .siti.GA) dans le répertoire approprié. Exemple : Ici, deux graphes sont déposées dans le répertoire suivant : [Home]\Geoconcept\SmartRouting\server\SRJEE\smartrouting\graphs, dans le cadre d’un paramétrage par défaut.
  • Editer le fichier « Service.xml » associé au module SmartRouting JEE. Ce dernier se trouve ici : [Home]\Geoconcept\SmartRouting\server\SRJEE\smartrouting\conf.
  • Dans l’éditeur de texte de votre choix, copier/coller autant de fois que vous avez de graphes, le bloc de texte encadré par les balises <datasource> présenté ci-dessous (dans notre exemple, il y a 2 sources différentes, à copier/coller 2 fois par conséquent),
  • Copier ce bloc <datasource> sous la balise <default-datasource> du bloc initial,
  • La balise <file /> doit indiquer le nom de l’une des deux graphes. La balise <name /> permet de donner un alias à cette source, exemple ici : « HEREQ414 ».

Edition du premier bloc associé au premier graphe 

        <datasource>
        <file>navteq_maps_for_geoconcept_Q414_france_v1.siti</file>
        <name>HEREQ414</name>

        <load-graph-settings>
            <full-load>false</full-load>
            <primary-language>en</primary-language>
        </load-graph-settings>

        <calculate-route-options>
            <vehicle-type/>
            <!-- a vehicle type name present in the vehicle types catalog -->
            <vehicle-type-id/>
            <!-- a vehicle type identifier present in the vehicle types catalog -->
            <route-search-criteria>time</route-search-criteria>
            <!-- distance, time, or an integer matching cost table index (graph dependant) -->
            <max-graph-snap-distance>500</max-graph-snap-distance>
            <!-- in meters -->
            <graph-snap-speed>1.11111111</graph-snap-speed>
            <!-- in m/s -->
            <route-descr-items/>
            <!-- composition (separated by comma) -->
            <reference-level>4</reference-level>
            <reject-flags/>
            <!-- composition (separated by comma) -->
            <speed-profile/>
            <input-coordinate-system/>
            <output-coordinate-system/>
            <use-meta-graph>true</use-meta-graph>
            <use-graph-accelerator>true</use-graph-accelerator>
            <fields/>
            <!-- composition (separated by comma) -->
            <tour-optimization>auto</tour-optimization>
            <language/>
            <!-- default output language -->
        </calculate-route-options>

        <calculate-route-settings>
            <calculate-ecotax>true</calculate-ecotax>
            <!-- calculate ecotax when available  -->
        </calculate-route-settings>

        <!-- if a section named 'search-around-options' (same definition as calculate-route-options) is present it defines particular default options for search around -->
        <!-- if a section named 'calculate-route-matrix-options' (same definition as calculate-route-options) is present it defines particular default options for calculate route matrix -->
        <!-- if a section named 'calculate-tour-options' (same definition as calculate-route-options) is present it defines particular default options for calculate tour -->

        <!-- if a section named 'calculate-route-matrix-settings' (same definition as calculate-route-matrix-settings) is present it defines particular settings for calculate route matrix -->
        <!-- if a section named 'search-around-settings' (same definition as calculate-route-settings) is present it defines particular settings for search around -->

        <reverse-geocode-options>

            <max-distance>1000</max-distance>
            <!-- in meters -->
            <max-distance-between-candidates>2</max-distance-between-candidates>
            <!-- in meters -->
            <max-candidates>10</max-candidates>

            <input-coordinate-system/>
            <output-coordinate-system/>

            <include-street-number>true</include-street-number>
            <accept-emtpy-segments>true</accept-emtpy-segments>

            <language/>
            <places/>

        </reverse-geocode-options>

        <!-- reverse geocoding configuration usually depends on each particular graph -->
        <reverse-geocode-settings>
            <address-line-field>${built-in-field:name}</address-line-field>
            <city-name-field>City name</city-name-field>

            <postal-code-field>Postcode</postal-code-field>

            <country-field>Country</country-field>

            <right-suffix> right</right-suffix>
            <left-suffix> left</left-suffix>

            <number-begin-left-field>Begin left number</number-begin-left-field>
            <number-end-left-field>End left number</number-end-left-field>
            <number-begin-right-field>Begin right number</number-begin-right-field>
            <number-end-right-field>End right number</number-end-right-field>

        </reverse-geocode-settings>

        <calculate-tour-settings>
            <tour-optimization-auto-threshold>10</tour-optimization-auto-threshold>
        </calculate-tour-settings>

        <calculate-concentric-reachable-areas-options>
            <vehicle-type/>
            <!-- a vehicle type name present in the vehicle types catalog -->
            <vehicle-type-id/>
            <!-- a vehicle type identifier present in the vehicle types catalog -->
            <route-search-criteria>time</route-search-criteria>
            <!-- distance, time, or an integer matching cost table index (graph dependant) -->
            <max-graph-snap-distance>500</max-graph-snap-distance>
            <!-- in meters -->
            <graph-snap-speed>1.11111111</graph-snap-speed>
            <!-- in m/s -->
            <route-descr-items/>
            <!-- composition (separated by comma) -->
            <reference-level>4</reference-level>
            <reject-flags/>
            <!-- composition (separated by comma) -->
            <speed-profile/>
            <input-coordinate-system/>
            <output-coordinate-system/>
            <use-meta-graph>true</use-meta-graph>
            <use-graph-accelerator>true</use-graph-accelerator>

            <default-reachable-area-specification>
                <row-col>2000</row-col>
                <tile-resolution>50</tile-resolution>
                <max-holes>0</max-holes>
                <min-hole-size>0</min-hole-size>
                <extended-smoothing>false</extended-smoothing>
                <accept-non-connectable-links>true</accept-non-connectable-links>
            </default-reachable-area-specification>

        </calculate-concentric-reachable-areas-options>

        <calculate-concentric-reachable-areas-settings>
        </calculate-concentric-reachable-areas-settings>
    </datasource>

  • laisser les autres paramètres par défaut, sauf si vous décidez de faire un paramétrage spécifique à votre installation.
  • Répéter les étapes de la copie du bloc <datasource> et l'édition des balises <file/> et <name/> pour paramétrer la seconde source de données.

Edition du second bloc associé à l’autre table de référence qui sera exploitée 

        <datasource>
        <file>BD_ADRESSE_France_v4.siti</file>
        <name>IGN</name>

        <load-graph-settings>
            <full-load>false</full-load>
            <primary-language>en</primary-language>
        </load-graph-settings>

        <calculate-route-options>
            <vehicle-type/>
            <!-- a vehicle type name present in the vehicle types catalog -->
            <vehicle-type-id/>
            <!-- a vehicle type identifier present in the vehicle types catalog -->
            <route-search-criteria>time</route-search-criteria>
            <!-- distance, time, or an integer matching cost table index (graph dependant) -->
            <max-graph-snap-distance>500</max-graph-snap-distance>
            <!-- in meters -->
            <graph-snap-speed>1.11111111</graph-snap-speed>
            <!-- in m/s -->
            <route-descr-items/>
            <!-- composition (separated by comma) -->
            <reference-level>4</reference-level>
            <reject-flags/>
            <!-- composition (separated by comma) -->
            <speed-profile/>
            <input-coordinate-system/>
            <output-coordinate-system/>
            <use-meta-graph>true</use-meta-graph>
            <use-graph-accelerator>true</use-graph-accelerator>
            <fields/>
            <!-- composition (separated by comma) -->
            <tour-optimization>auto</tour-optimization>
            <language/>
            <!-- default output language -->
        </calculate-route-options>

        <calculate-route-settings>
            <calculate-ecotax>true</calculate-ecotax>
            <!-- calculate ecotax when available  -->
        </calculate-route-settings>

        <!-- if a section named 'search-around-options' (same definition as calculate-route-options) is present it defines particular default options for search around -->
        <!-- if a section named 'calculate-route-matrix-options' (same definition as calculate-route-options) is present it defines particular default options for calculate route matrix -->
        <!-- if a section named 'calculate-tour-options' (same definition as calculate-route-options) is present it defines particular default options for calculate tour -->

        <!-- if a section named 'calculate-route-matrix-settings' (same definition as calculate-route-matrix-settings) is present it defines particular settings for calculate route matrix -->
        <!-- if a section named 'search-around-settings' (same definition as calculate-route-settings) is present it defines particular settings for search around -->

        <reverse-geocode-options>

            <max-distance>1000</max-distance>
            <!-- in meters -->
            <max-distance-between-candidates>2</max-distance-between-candidates>
            <!-- in meters -->
            <max-candidates>10</max-candidates>

            <input-coordinate-system/>
            <output-coordinate-system/>

            <include-street-number>true</include-street-number>
            <accept-emtpy-segments>true</accept-emtpy-segments>

            <language/>
            <places/>

        </reverse-geocode-options>

        <!-- reverse geocoding configuration usually depends on each particular graph -->
        <reverse-geocode-settings>
            <address-line-field>${built-in-field:name}</address-line-field>
            <city-name-field>City name</city-name-field>

            <postal-code-field>Postcode</postal-code-field>

            <country-field>Country</country-field>

            <right-suffix> right</right-suffix>
            <left-suffix> left</left-suffix>

            <number-begin-left-field>Begin left number</number-begin-left-field>
            <number-end-left-field>End left number</number-end-left-field>
            <number-begin-right-field>Begin right number</number-begin-right-field>
            <number-end-right-field>End right number</number-end-right-field>

        </reverse-geocode-settings>

        <calculate-tour-settings>
            <tour-optimization-auto-threshold>10</tour-optimization-auto-threshold>
        </calculate-tour-settings>

        <calculate-concentric-reachable-areas-options>
            <vehicle-type/>
            <!-- a vehicle type name present in the vehicle types catalog -->
            <vehicle-type-id/>
            <!-- a vehicle type identifier present in the vehicle types catalog -->
            <route-search-criteria>time</route-search-criteria>
            <!-- distance, time, or an integer matching cost table index (graph dependant) -->
            <max-graph-snap-distance>500</max-graph-snap-distance>
            <!-- in meters -->
            <graph-snap-speed>1.11111111</graph-snap-speed>
            <!-- in m/s -->
            <route-descr-items/>
            <!-- composition (separated by comma) -->
            <reference-level>4</reference-level>
            <reject-flags/>
            <!-- composition (separated by comma) -->
            <speed-profile/>
            <input-coordinate-system/>
            <output-coordinate-system/>
            <use-meta-graph>true</use-meta-graph>
            <use-graph-accelerator>true</use-graph-accelerator>

            <default-reachable-area-specification>
                <row-col>2000</row-col>
                <tile-resolution>50</tile-resolution>
                <max-holes>0</max-holes>
                <min-hole-size>0</min-hole-size>
                <extended-smoothing>false</extended-smoothing>
                <accept-non-connectable-links>true</accept-non-connectable-links>
            </default-reachable-area-specification>

        </calculate-concentric-reachable-areas-options>

        <calculate-concentric-reachable-areas-settings>
        </calculate-concentric-reachable-areas-settings>
    </datasource>

  • Sauvegarder le fichier « Service.xml » et relancer le service Tomcat,
  • Désormais, lorsque l’on fait appel au WebService, l’utilisateur devra appeler une des deux ressources dans sa requête en indiquant dans le paramètre <GraphName> l’alias qui a été défini auparavant via la balise <name>. si aucun alias n’est passé, la source définie dans le paramètre iti.graphname sera utilisée par défaut.