Géocodage

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 une adresse en entrée, le service retourne une ou plusieurs réponses possibles (s’il y a ambiguïté), en incluant l’adresse reconnue, la position, le score de géocodage, le type de géocodage.

Ce service de géocodage interroge la table de référence paramétrée grâce à l’interface Administration de Geoconcept Web.

Disponibilité

Ce web service est disponible en permanence avec Geoconcept Web et une table de référence.

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 v2

  • Suppression du paramètre "projection", remplacé par "srs"
  • Suppression du paramètre "geocodeScore", remplacé par "score"
  • Suppression des paramètres "projection", "srs" et "maxResponses" dans le bloc "initialAddress"
  • Le paramètre "postalCode" est renommé "postCode"

V2

Paramètres / propriétés

En entrée

paramètre description optionnel défaut

countryCode

pays sur 2 ou 3 lettres (code ISO 3166-1) par exemple "fr" ou "fra",
ce paramètre peut être utilisé pour distinguer plusieurs référentiels sur un même territoire (IGN, HERE, …)

oui

cf. Geoconcept Web / Administration / Paramètres geocoder.datasource

postCode

code postal

oui *

addressLine

adresse comprenant numéro, indice de répétition, type de voie et libellé de voie.

oui *

city

ville

oui *

region

État, Comté, …

oui

srs

projection (code EPSG comme epsg:4326 ou wgs84)

oui

Sans projection, le résultat est en projection native de l’index de géocodage, habituellement wgs84

maxResponses

nombre maximum de résultats d’adresses dans la réponse

oui

cf. Geoconcept Web / Administration / Paramètres geocoder.maxCandidates

streetMinScore

la valeur de ce paramètre varie, comme pour le score, entre 0 et 100.
Le streetMinScore a pour effet de filtrer les candidats possibles de la manière suivante :
Si la note du candidat est égale ou supérieure au score, alors le candidat est retenu comme tel,
Si la note du candidat est inférieure au score et qu’aucun candidat n’a déjà été retenu, alors le géocodage est proposé à la commune,
Si la note du candidat est inférieure au score et qu’un autre candidat a déjà été retenu, alors le candidat ne sera présenté que dans la limite du geocoder.maxCandidates
La valeur de streetMinScore doit toujours être supérieure à filterMinScore, si c’est pas le cas le geocodage force la valeur de filterMinScore pour streetMinScore.
La valeur définit pour streetMinScore supplante celle définit dans le paramètre geocoder.geocoder.streetMinScore.
Les paramètres geocoder.maxCandidates, geocoder.filterMinScore et geocoder.geocoder.streetMinScore sont détaillés dans Geoconcept Web / Administration / Paramètres

oui

(*) Au moins l’un des trois paramètres postCode, addressLine et city doit être renseigné.

En sortie

paramètre type min/max description

geocodedAddress (ou geocodedAddresses en JSON / JSON-P)

geocodedAddress (ou array en JSON / JSON-P)

0/illimité

Adresses géocodées

initialAddress

geocodeInitialAddress

0/1

Adresse initiale

Adresses géocodées (geocodedAddress)

paramètre type min/max description

addressLine

string

0/1

rue trouvée et le cas échéant le numéro

city

string

0/1

ville trouvée

region

string

0/1

État, Comté, … trouvée, varie en fonction des pays, peut également être vide

countryCode

string

1/1

cf. description du paramètre en entrée

postCode

string

0/1

code postal trouvé

secondaryZone

string

0/1

zone qui dépend de l’index de géocodage, habituellement en France il s’agit du code IRIS

score

double

1/1

note du géocodage de 0 à 100, avec 100 pour une correspondance parfaite

geocodeType

int

1/1

type de géocodage : - ville = 1 - rue = 2 - rue amélioré = 3 - numéro de rue = 4 - non géocodé = 0

x

double

1/1

coordonnées X

y

double

1/1

coordonnées Y

place (ou places en JSON / JSON-P)

string (ou array en JSON / JSON-P)

0/illimité

liste des attributs. Valeur des attributs de l’adresse trouvée, en relation avec placeTypes (par exemple ["751010206","930005Y001XCHE"]). Dépend du référentiel utilisé.

placeType (ou placeTypes en JSON / JSON-P)

string (ou array en JSON / JSON-P)

0/illimité

liste des types d’attributs (par exemple ["IRIS","FANTOIR"]) .Dépend de la table de référence utilisée.

streetNumber

string

0/1

numéro de rue

streetWayType

string

0/1

type de rue (avenue, street, etc )

streetWayName

string

0/1

nom de la rue

streetWay

string

0/1

nom complet de la rue

Adresse initiale (initialAddress)

paramètre type min/max description

addressLine

string

0/1

rue trouvée et le cas échéant le numéro

city

string

0/1

ville trouvée

region

string

0/1

État, Comté, … trouvée, varie en fonction des pays, peut également être vide

countryCode

string

1/1

cf. description du paramètre en entrée

postCode

string

0/1

code postal trouvé

SOAP

WSDL

http://<server>/<webapp>/api/ws/geocodeService?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:geocodeV2>
         <!--Optional:-->
         <countryCode>FR</countryCode>
         <!--Optional:-->
         <postCode>44000</postCode>
         <!--Optional:-->
         <addressLine>45 Rue Noire</addressLine>
         <!--Optional:-->
         <city>nantes</city>
         <!--Optional:-->
         <region></region>
         <!--Optional:-->
         <srs>epsg:4326</srs>
         <maxResponses>2</maxResponses>
         <streetMinScore></streetMinScore>
      </sch:geocodeV2>
   </soapenv:Body>
</soapenv:Envelope>

Réponse

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:geocodeV2Response xmlns:ns2="http://geoconcept.com/gc/schemas">
         <GeocodeResult>
            <status>OK</status>
            <geocodedAddress>
               <addressLine>45 RUE NOIRE</addressLine>
               <city>Nantes</city>
               <countryCode>FR</countryCode>
               <postCode>44109</postCode>
               <srs>epsg:4326</srs>
               <secondaryZone/>
               <score>94.95</score>
               <geocodeType>4</geocodeType>
               <x>-1.563901</x>
               <y>47.224987</y>
               <places>
                  <place/>
               </places>
               <placeTypes>
                  <placeType>Attribut</placeType>
               </placeTypes>
               <streetNumber>45</streetNumber>
               <streetWayType>RUE</streetWayType>
               <streetWayName>NOIRE</streetWayName>
               <streetWay>RUE NOIRE</streetWay>
            </geocodedAddress>
            <initialAddress>
               <addressLine>45 Rue Noire</addressLine>
               <city>nantes</city>
               <region/>
               <countryCode>FR</countryCode>
               <postCode>44000</postCode>
            </initialAddress>
         </GeocodeResult>
      </ns2:geocodeV2Response>
   </soap:Body>
</soap:Envelope>
REST

Requête

Requête JSON 

http://<server>/<webapp>/api/lbs/geocode/v2.json?addressLine=45%20Rue%20Noire&postCode=44000&city=nantes&countryCode=fr&srs=epsg:4326

Requête JSON-P 

http://<server>/<webapp>/api/lbs/geocode/v2.json?addressLine=45%20Rue%20Noire&postCode=44000&city=nantes&countryCode=fr&srs=epsg:4326&callback=myCallback

Requête XML 

http://<server>/<webapp>/api/lbs/geocode/v2.xml?addressLine=45%20Rue%20Noire&postCode=44000&city=nantes&countryCode=fr&srs=epsg:4326

Réponse

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

Format JSON 

{
   "message":null,
   "status":"OK",
   "geocodedAddresses":[
      {
         "addressLine":"45 RUE NOIRE",
         "city":"Nantes",
         "countryCode":"FR",
         "postCode":"44109",
         "srs":"epsg:4326",
         "secondaryZone":"",
         "score":94.95,
         "geocodeType":4,
         "x":-1.563901,
         "y":47.224987,
         "places":[
            ""
         ],
         "placeTypes":[
            "Attribut"
         ],
         "streetNumber":"45",
         "streetWayType":"RUE",
         "streetWayName":"NOIRE",
         "streetWay":"RUE NOIRE"
      }
   ],
   "initialAddress":{
      "addressLine":"45 Rue Noire",
      "city":"nantes",
      "countryCode":"fr",
      "postCode":"44000"
   }
}

Format JSON-P 

MyCallBack({
   "message":null,
   "status":"OK",
   "geocodedAddresses":[
      {
         "addressLine":"45 RUE NOIRE",
         "city":"Nantes",
         "countryCode":"FR",
         "postCode":"44109",
         "srs":"epsg:4326",
         "secondaryZone":"",
         "score":94.95,
         "geocodeType":4,
         "x":-1.563901,
         "y":47.224987,
         "places":[
            ""
         ],
         "placeTypes":[
            "Attribut"
         ],
         "streetNumber":"45",
         "streetWayType":"RUE",
         "streetWayName":"NOIRE",
         "streetWay":"RUE NOIRE"
      }
   ],
   "initialAddress":{
      "addressLine":"45 Rue Noire",
      "city":"nantes",
      "countryCode":"fr",
      "postCode":"44000"
   }
});

Format XML 

<?xml version="1.0" encoding="UTF-8"?>
<geocodeResultV2>
   <status>OK</status>
   <geocodedAddress>
      <addressLine>45 RUE NOIRE</addressLine>
      <city>Nantes</city>
      <countryCode>FR</countryCode>
      <postCode>44109</postCode>
      <srs>epsg:4326</srs>
      <secondaryZone />
      <score>94.95</score>
      <geocodeType>4</geocodeType>
      <x>-1.563901</x>
      <y>47.224987</y>
      <places>
         <place />
      </places>
      <placeTypes>
         <placeType>Attribut</placeType>
      </placeTypes>
      <streetNumber>45</streetNumber>
      <streetWayType>RUE</streetWayType>
      <streetWayName>NOIRE</streetWayName>
      <streetWay>RUE NOIRE</streetWay>
   </geocodedAddress>
   <initialAddress>
      <addressLine>45 Rue Noire</addressLine>
      <city>nantes</city>
      <countryCode>fr</countryCode>
      <postCode>44000</postCode>
   </initialAddress>
</geocodeResultV2>

API JavaScript

Inclure la librairie JavaScript.

var geocoder = new GCUI.Control.GeoCode();
geocoder.geocode({url : 'http://<server>/<webapp>/api/lbs/geocode/v2.json', city : 'Nantes', postCode : '44000', addressLine : '45 Rue Noire', countryCode : 'fr', srs : 'wgs84',
callback : function(result) {...} }) ;

La variable result est au format JSON décrit ci-dessus. La fonction callback passée en paramètre est appelée à la fin du géocodage.

Retours possibles

Cas d’une adresse trouvée (geocodeResponse/GeocodeResult/status est OK) 

<ns2:geocodeV2Response xmlns:ns2="http://geoconcept.com/gc/schemas">
    <?xml version="1.0" encoding="UTF-8"?>
    <geocodeResultV2>
       <status>OK</status>
       <geocodedAddress>
          <addressLine>45 RUE NOIRE</addressLine>
          <city>Nantes</city>
          <countryCode>FR</countryCode>
          <postCode>44109</postCode>
          <srs>epsg:4326</srs>
          <secondaryZone />
          <score>94.95</score>
          <geocodeType>4</geocodeType>
          <x>-1.563901</x>
          <y>47.224987</y>
          <places>
             <place />
          </places>
          <placeTypes>
             <placeType>Attribut</placeType>
          </placeTypes>
          <streetNumber>45</streetNumber>
          <streetWayType>RUE</streetWayType>
          <streetWayName>NOIRE</streetWayName>
          <streetWay>RUE NOIRE</streetWay>
       </geocodedAddress>
       <initialAddress>
          <addressLine>45 Rue Noire</addressLine>
          <city>nantes</city>
          <countryCode>fr</countryCode>
          <postCode>44000</postCode>
       </initialAddress>
    </geocodeResultV2>
</ns2:geocodeV2Response>

Cas d’une adresse non trouvée (geocodeResponse/GeocodeResult/status est OK et pas de geocodedAddress) 

<ns2:geocodeV2Response xmlns:ns2="http://geoconcept.com/gc/schemas">
        <GeocodeResult>
                <status>OK</status>
                <initialAddress>
                        <city>#hdkvnjsdvn</city>
                </initialAddress>
        </GeocodeResult>
</ns2:geocodeV2Response>

Cas d’une requête ayant une erreur XML ou ne respectant pas le WSDL ⇒ erreur avec faultstring qui contient la description 

<soap:Fault>
        <faultcode xmlns:ns1="geoconcept.com">ns1:8</faultcode>
        <faultstring>Message part {http://geoconcept.com/gc/schemas}geocodeABCD was not recognized.  (Does it exist in service WSDL?)</faultstring>
</soap:Fault>

Cas d’une requête avec un système de reprojection inexistant ⇒ erreur avec faultstring qui contient la description 

<soap:Fault>
        <faultcode xmlns:ns1="geoconcept.com">ns1:8</faultcode>
        <faultstring>Geocode failed Failed to process geocoding task Unsupported coordinate system 'epsg:432666666'</faultstring>
</soap:Fault>

V1

Paramètres / propriétés

En entrée

paramètre description optionnel défaut

countryCode

pays sur deux lettres (code ISO 3166-1 ou ccTLD) par exemple "fr",
ce paramètre peut être utilisé pour distinguer plusieurs référentiels sur un même territoire (IGN, HERE, …)

oui

cf. Geoconcept Web / Administration / Paramètres geocoder.datasource

postalCode

code postal

oui *

addressLine

adresse comprenant numéro, indice de répétition, type de voie et libellé de voie.

oui *

city

ville

oui *

region

État, Comté, …

oui

projection

déprécié, remplacé par srs

oui

srs

projection (code EPSG comme epsg:4326 ou wgs84)

oui

Sans projection, le résultat est en projection native de l’index de géocodage, habituellement wgs84

maxResponses

nombre maximum de résultats d’adresses dans la réponse

oui

cf. Geoconcept Web / Administration / Paramètres geocoder.maxCandidates

streetMinScore

la valeur de ce paramètre varie, comme pour le score, entre 0 et 100.
Le streetMinScore a pour effet de filtrer les candidats possibles de la manière suivante :
Si la note du candidat est égale ou supérieure au score, alors le candidat est retenu comme tel,
Si la note du candidat est inférieure au score et qu’aucun candidat n’a déjà été retenu, alors le géocodage est proposé à la commune,
Si la note du candidat est inférieure au score et qu’un autre candidat a déjà été retenu, alors le candidat ne sera présenté que dans la limite du geocoder.maxCandidates
La valeur de streetMinScore doit toujours être supérieure à filterMinScore, si c’est pas le cas le geocodage force la valeur de filterMinScore pour streetMinScore.
La valeur définit pour streetMinScore supplante celle définit dans le paramètre geocoder.geocoder.streetMinScore.
Les paramètres geocoder.maxCandidates, geocoder.filterMinScore et geocoder.geocoder.streetMinScore sont détaillés dans Geoconcept Web / Administration / Paramètres

oui

(*) Au moins l’un des trois paramètres postalCode, addressLine et city doit être renseigné.

En sortie

paramètre type min/max description

geocodedAddress (ou geocodedAddresses en JSON / JSON-P)

geocodedAddress (ou array en JSON / JSON-P)

0/illimité

Adresses géocodées

initialAddress

geocodeInitialAddress

0/1

Adresse initiale

Adresses géocodées (geocodedAddress)

paramètre type min/max description

secondaryZone

string

0/1

zone qui dépend de l’index de géocodage, habituellement en France il s’agit du code IRIS

score

double

1/1

note du géocodage de 0 à 100, avec 100 pour une correspondance parfaite

geocodeScore

double

1/1

Déprécié, , remplacé par score : note du géocodage de 0 à 20, avec 20 pour une correspondance parfaite

geocodeType

int

1/1

type de géocodage : - ville = 1 - rue = 2 - rue amélioré = 3 - numéro de rue = 4 - non géocodé = 0

x

double

1/1

coordonnées X

y

double

1/1

coordonnées Y

place (ou places en JSON / JSON-P)

string (ou array en JSON / JSON-P)

0/illimité

liste des attributs. Valeur des attributs de l’adresse trouvée, en relation avec placeTypes (par exemple ["751010206","930005Y001XCHE"]). Dépend du référentiel utilisé.

placeType (ou placeTypes en JSON / JSON-P)

string (ou array en JSON / JSON-P)

0/illimité

liste des types d’attributs (par exemple ["IRIS","FANTOIR"]) .Dépend de la table de référence utilisée.

streetNumber

string

0/1

numéro de rue

streetWayType

string

0/1

type de rue (avenue, street, etc )

streetWayName

string

0/1

nom de la rue

streetWay

string

0/1

nom complet de la rue

Adresse initiale (initialAddress)

paramètre type min/max description

addressLine

string

0/1

rue trouvée et le cas échéant le numéro

city

string

0/1

ville trouvée

region

string

0/1

État, Comté, … trouvée, varie en fonction des pays, peut également être vide

countryCode

string

1/1

cf. description du paramètre en entrée

postalCode

string

0/1

code postal trouvé

projection

string

1/1

Déprécié, remplacé par srs

srs

string

1/1

cf. description du paramètre en entrée

maxResponses

string

0/1

cf. description du paramètre en entrée

SOAP

WSDL

http://<server>/<webapp>/api/ws/geocodeService?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:geocode>
         <!--Optional:-->
         <countryCode></countryCode>
         <!--Optional:-->
         <postalCode>75013</postalCode>
         <!--Optional:-->
         <addressLine>25, rue de toldiac</addressLine>
         <!--Optional:-->
         <city>paris</city>
         <!--Optional:-->
         <region></region>
         <!--Optional:-->
         <projection></projection>
         <!--Optional:-->
         <srs></srs>
         <maxResponses>2</maxResponses>
         <streetMinScore></streetMinScore>
      </sch:geocode>
   </soapenv:Body>
</soapenv:Envelope>

Réponse

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:geocodeResponse xmlns:ns2="http://geoconcept.com/gc/schemas">
         <GeocodeResult>
            <status>OK</status>
            <geocodedAddress>
               <addressLine>25 RUE DE TOLBIAC</addressLine>
               <city>PARIS</city>
               <countryCode>FR</countryCode>
               <postalCode>75013</postalCode>
               <projection>epsg:27572</projection>
               <srs>epsg:27572</srs>
               <secondaryZone>751135014</secondaryZone>
               <geocodeScore>19.8101</geocodeScore>
               <score>99.05</score>
               <geocodeType>4</geocodeType>
               <x>602722.1475334</x>
               <y>2425598.4510822</y>
               <places>
                  <place>751135014</place>
               </places>
               <placeTypes>
                  <placeType>IRIS</placeType>
               </placeTypes>
               <streetNumber>25</streetNumber>
               <streetWayType>RUE</streetWayType>
               <streetWayName>DE TOLBIAC</streetWayName>
               <streetWay>RUE DE TOLBIAC</streetWay>
            </geocodedAddress>
            <geocodedAddress>
               <addressLine>PONT DE TOLBIAC</addressLine>
               <city>PARIS</city>
               <countryCode>FR</countryCode>
               <postalCode>75013</postalCode>
               <projection>epsg:27572</projection>
               <srs>epsg:27572</srs>
               <secondaryZone>751135099</secondaryZone>
               <geocodeScore>19.0505</geocodeScore>
               <score>95.25</score>
               <geocodeType>2</geocodeType>
               <x>603221.0049634</x>
               <y>2426021.5068995</y>
               <places>
                  <place>751135099</place>
               </places>
               <placeTypes>
                  <placeType>IRIS</placeType>
               </placeTypes>
               <streetNumber/>
               <streetWayType>PONT</streetWayType>
               <streetWayName>DE TOLBIAC</streetWayName>
               <streetWay>PONT DE TOLBIAC</streetWay>
            </geocodedAddress>
            <initialAddress>
               <addressLine>25, rue de toldiac</addressLine>
               <city>paris</city>
               <region/>
               <countryCode/>
               <postalCode>75013</postalCode>
               <projection/>
               <srs/>
            </initialAddress>
         </GeocodeResult>
      </ns2:geocodeResponse>
   </soap:Body>
</soap:Envelope>
REST

Requête

Requête JSON 

http://<server>/<webapp>/api/lbs/geocode.json?countryCode=fr&addressLine=25%20rue%20de%20toldiac&postalCode=75013&city=Paris&srs=epsg:4326&maxResponses=2

Requête JSON-P 

http://<server>/<webapp>/api/lbs/geocode.json?countryCode=fr&addressLine=25%20rue%20de%20toldiac&postalCode=75013&city=Paris&srs=epsg:4326&maxResponses=2&callback=myCallback

Requête XML 

http://<server>/<webapp>/api/lbs/geocode.xml?countryCode=fr&addressLine=25%20rue%20de%20toldiac&postalCode=75013&city=Paris&maxResponses=2

Réponse

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

Format JSON 

{
        "message":null,"status":"OK",
        "geocodedAddresses":    [
                {
                        "addressLine":"25 RUE DE TOLBIAC","city":"PARIS","countryCode":"FR","postalCode":"75013",
                        "projection":"epsg:4326","srs":"epsg:4326","maxResponses":null,"secondaryZone":"751135014",
                        "geocodeScore":19.8101,"score":99.05,"geocodeType":4,"x":2.373562,"y":48.828757,
                        "places":["751135014"],"placeTypes":["IRIS"],
                        "streetNumber":"25","streetWayType":"RUE","streetWayName":"DE TOLBIAC","streetWay":"RUE DE TOLBIAC"
                },
                {
                        "addressLine":"PONT DE TOLBIAC","city":"PARIS","countryCode":"FR","postalCode":"75013",
                        "projection":"epsg:4326","srs":"epsg:4326","maxResponses":null,"secondaryZone":"751135099",
                        "geocodeScore":19.0505,"score":95.25,"geocodeType":2,"x":2.380356,"y":48.832557,
                        "places":["751135099"],"placeTypes":["IRIS"],
                        "streetNumber":"","streetWayType":"PONT","streetWayName":"DE TOLBIAC","streetWay":"PONT DE TOLBIAC"
                }
        ],
        "initialAddress":               {
                "addressLine":"25 rue de toldiac","city":"Paris","countryCode":"fr","postalCode":"75013",
                "projection":"epsg:4326","srs":"epsg:4326"
        }
}

Format JSON-P 

myCallback({
        "message":null,"status":"OK",
        "geocodedAddresses":    [
                {
                        "addressLine":"25 RUE DE TOLBIAC","city":"PARIS","countryCode":"FR","postalCode":"75013",
                        "projection":"epsg:4326","srs":"epsg:4326","maxResponses":null,"secondaryZone":"751135014",
                        "geocodeScore":19.8101,"score":99.05,"geocodeType":4,"x":2.373562,"y":48.828757,
                        "places":["751135014"],"placeTypes":["IRIS"],
                        "streetNumber":"25","streetWayType":"RUE","streetWayName":"DE TOLBIAC","streetWay":"RUE DE TOLBIAC"
                },
                {
                        "addressLine":"PONT DE TOLBIAC","city":"PARIS","countryCode":"FR","postalCode":"75013",
                        "projection":"epsg:4326","srs":"epsg:4326","maxResponses":null,"secondaryZone":"751135099",
                        "geocodeScore":19.0505,"score":95.25,"geocodeType":2,"x":2.380356,"y":48.832557,
                        "places":["751135099"],"placeTypes":["IRIS"],
                        "streetNumber":"","streetWayType":"PONT","streetWayName":"DE TOLBIAC","streetWay":"PONT DE TOLBIAC"
                }
        ]
        "initialAddress":       {
                "addressLine":"25 rue de toldiac","city":"Paris","countryCode":"fr","postalCode":"75013",
                "projection":"epsg:4326","srs":"epsg:4326"
        }
});

Format XML 

<geocodeResult>
        <status>OK</status>
        <geocodedAddress>
                <addressLine>25 RUE DE TOLBIAC</addressLine>
                <city>PARIS</city>
                <countryCode>FR</countryCode>
                <postalCode>75013</postalCode>
                <projection>epsg:27572</projection>
                <srs>epsg:27572</srs>
                <secondaryZone>751135014</secondaryZone>
                <geocodeScore>19.8101</geocodeScore>
                <score>99.05</score>
                <geocodeType>4</geocodeType>
                <x>602722.1475334</x>
                <y>2425598.4510822</y>
                <places>
                        <place>751135014</place>
                </places>
                <placeTypes>
                        <placeType>IRIS</placeType>
                </placeTypes>
                <streetNumber>25</streetNumber>
                <streetWayType>RUE</streetWayType>
                <streetWayName>DE TOLBIAC</streetWayName>
                <streetWay>RUE DE TOLBIAC</streetWay>
        </geocodedAddress>
        <geocodedAddress>
                <addressLine>PONT DE TOLBIAC</addressLine>
                <city>PARIS</city>
                <countryCode>FR</countryCode>
                <postalCode>75013</postalCode>
                <projection>epsg:27572</projection>
                <srs>epsg:27572</srs>
                <secondaryZone>751135099</secondaryZone>
                <geocodeScore>19.0505</geocodeScore>
                <score>95.25</score>
                <geocodeType>2</geocodeType>
                <x>603221.0049634</x>
                <y>2426021.5068995</y>
                <places>
                        <place>751135099</place>
                </places>
                <placeTypes>
                        <placeType>IRIS</placeType>
                </placeTypes>
                <streetNumber/>
                <streetWayType>PONT</streetWayType>
                <streetWayName>DE TOLBIAC</streetWayName>
                <streetWay>PONT DE TOLBIAC</streetWay>
        </geocodedAddress>
        <initialAddress>
                <addressLine>25 rue de toldiac</addressLine>
                <city>Paris</city>
                <countryCode>fr</countryCode>
                <postalCode>75013</postalCode>
        </initialAddress>
</geocodeResult>

API JavaScript

Inclure la librairie JavaScript.

var geocoder = new GCUI.Control.GeoCode();
geocoder.geocode({url : 'http://<server>/<webapp>/api/lbs/geocode.json', city : 'Paris', postalCode : '75013', addressLine : '25 rue de Toldiac', countryCode : 'fr', srs : 'wgs84',
callback : function(result) {...} }) ;

La variable result est au format JSON décrit ci-dessus. La fonction callback passée en paramètre est appelée à la fin du géocodage.

Retours possibles

Cas d’une adresse trouvée (geocodeResponse/GeocodeResult/status est OK) 

<ns2:geocodeResponse xmlns:ns2="http://geoconcept.com/gc/schemas">
        <GeocodeResult>
                <status>OK</status>
                <geocodedAddress>
                        <addressLine/>
                        <city>BAGNEUX</city>
                        <countryCode>FR</countryCode>
                        <postalCode>92220</postalCode>
                        <projection>epsg:4326</projection>
                        <srs>epsg:4326</srs>
                        <secondaryZone>920070110</secondaryZone>
                        <geocodeScore>20.0</geocodeScore>
                        <score>100.0</score>
                        <geocodeType>1</geocodeType>
                        <x>2.30811</x>
                        <y>48.79692</y>
                        <place>920070110</place>
                        <placeType>IRIS</placeType>
                        <streetNumber/>
                        <streetWayType/>
                        <streetWayName/>
                        <streetWay/>
                </geocodedAddress>
                <initialAddress>
                        <city>Bagneux</city>
                        <postalCode>92</postalCode>
                        <projection>epsg:4326</projection>
                </initialAddress>
        </GeocodeResult>
</ns2:geocodeResponse>

Cas d’une adresse non trouvée (geocodeResponse/GeocodeResult/status est OK et pas de geocodedAddress) 

<ns2:geocodeResponse xmlns:ns2="http://geoconcept.com/gc/schemas">
        <GeocodeResult>
                <status>OK</status>
                <initialAddress>
                        <city>#hdkvnjsdvn</city>
                </initialAddress>
        </GeocodeResult>
</ns2:geocodeResponse>

Cas d’une requête ayant une erreur XML ou ne respectant pas le WSDL ⇒ erreur avec faultstring qui contient la description 

<soap:Fault>
        <faultcode xmlns:ns1="geoconcept.com">ns1:8</faultcode>
        <faultstring>Message part {http://geoconcept.com/gc/schemas}geocodeABCD was not recognized.  (Does it exist in service WSDL?)</faultstring>
</soap:Fault>

Cas d’une requête avec un système de reprojection inexistant ⇒ erreur avec faultstring qui contient la description 

<soap:Fault>
        <faultcode xmlns:ns1="geoconcept.com">ns1:8</faultcode>
        <faultstring>Geocode failed Failed to process geocoding task Unsupported coordinate system 'epsg:432666666'</faultstring>
</soap:Fault>

FAQ

1. Comment interpréter la note obtenu dans le score ?
2. Combien de caractères sont retournés dans la balise postCode ?
3. Quelles sont les règles sur les coordonnées X-Y (format, plage de coordonnées) ?
4. Ce service est-il capable de trouver une adresse approchante ?
5. Comment sont gérés les Cedex ?
6. Peut-on avoir en entrée tous les éléments de l’adresse dans un seul champ ?
7. Peut-on utiliser simultanément plusieurs référentiels ?

1.

Comment interpréter la note obtenu dans le score ?

Une correspondance stricte (équivalent à une note de 100) équivaut à n’admettre aucune tolérance sur un fichier qui ne doit comporter aucune erreur. En choisissant cette note, on n’accepte que les propositions dont la correspondance est parfaite entre la table de référence et l’adresse recherchée. Plus on est permissif (plus on baisse la note) et plus l’utilisateur accepte des lettres approchantes entre les adresses du fichier à géocoder et la table de référence. Plus on a de chance que le logiciel affecte des coordonnées fausses à certaines adresses du fichier par mauvaise interprétation. Il est recommandé de ne retenir que les candidats ayant une note supérieure ou égale à 90. Cette note est un bon compromis dans la mesure où une ou deux approximations entre les adresses à géocoder et la table de référence sont tolérées. Il est vivement recommandé de ne pas conserver les candidats ayant une note inférieure à 75 : elle correspond a au moins 4 fautes d’orthographe ou de syntaxe dans l’adresse. Différents critères interviennent dans le calcul de cette note :

  • le nombre de lettres équivalentes entre les deux chaînes ;
  • le nombre de mots ;
  • la longueur de chaque mot constituant la chaîne.

Dans le cas des correspondances d’adresses, seuls les noms de voie interviennent dans la recherche de correspondance orthographique. Le type de voie intervient comme facteur supplémentaire de la note uniquement dans le cas où le type de voie recherché et celui proposé sont identiques.

2.

Combien de caractères sont retournés dans la balise postCode ?

Cela dépend des caractéristiques des codes postaux de chaque pays. Par ailleurs, la chaîne retournée pourra être tronquée aux N premiers caractères si l’adresse cherchée n’est pas assez précise.

3.

Quelles sont les règles sur les coordonnées X-Y (format, plage de coordonnées) ?

Ce sont des nombres sous forme décimale, avec le "." pour séparateur de la partie décimale. Dans le cas de coordonnées géographiques en degrés, le retour doit être compris entre -180 et 180 (X=longitude) et -90 et 90 (Y=latitude), avec 6 chiffres après la virgule. Dans le cas de cordonnées projetées, le résultat est en mètres, avec deux chiffres après la virgule.

4.

Ce service est-il capable de trouver une adresse approchante ?

Si la ville n’existe pas, il retournera une liste vide.

5.

Comment sont gérés les Cedex ?

La grammaire, décrite dans la documentation UGC.PDF, applique un filtre afin de ne pas tenir compte du Cedex et des codes qui le suivent lors de la recherche des adresses.

6.

Peut-on avoir en entrée tous les éléments de l’adresse dans un seul champ ?

Oui, l’élément addressLine peut être utilisé pour réaliser un géocodage fulltext via un champ unique comportant la concaténation des champs : numéro de rue, type de voie, nom de la voie, code postal et nom de la ville. Les adresses rentrées via l'élément addressLine sont analysées en deux phases :

  • Le mécanisme de recherche par motif permet d’abord de retrouver la ou les villes présentes dans la chaîne. La recherche par motif retrouve très rapidement un libellé correspondant à un dictionnaire, ici un dictionnaire des villes. Ce libellé peut être mal orthographié, avec les erreurs habituelles dans les saisies sur internet : doublon de lettre, oubli de lettre, remplacement d’une lettre par une autre donnant un son quasi équivalent (C a la place d’un K, etc…), partie du nom pour une ville avec un nom composé. Par ce biais on obtient un ensemble de villes candidates en un temps très court.
  • Ensuite, les couples ville trouvée + chaine initiale sans la partie « ville » venant d’être reconnue sont données au géocodeur pour réaliser le géocodage habituel.

Remarque : quand un nom de ville est également présent dans le nom d’une rue, par exemple « 12 rue d’Aix Antibes » nous aurons potentiellement 2 candidats : rue d’Aix à Antibes et rue d’Antibes à Aix. Le candidat optimal est déterminé par sa position relative dans la chaîne.

7.

Peut-on utiliser simultanément plusieurs référentiels ?

Oui, il existe deux méthodes : La première consiste à s’appuyer sur un paramétrage via la « définition du géocodage » Cf. Administration / Outils / Définition du géocodage. La seconde, plus technique, se déroule en plusieurs étapes :

  • Stopper le service Tomcat,
  • Déposer les fichiers du référentiel de géocodage (8 fichiers portant des extensions .ugc.xxi.) dans le répertoire approprié. Exemple : Ici, deux tables sont déposées dans le répertoire suivant : C:\[Home]\Geoconcept\UGC\JEE\ugc\reftables, dans le cadre d’un paramétrage par défaut.
  • Editer le fichier « Service.xml » associé au module UGC JEE. Ce dernier se trouve ici : C:\[Home]\Geoconcept\UGC\JEE\ugc\conf.
  • Dans l’éditeur de texte de votre choix, copier/coller autant de fois que vous avez de tables de référence le bloc de texte encadré par les balises <default-datasource> (dans notre exemple, il y a 2 sources différentes, à copier/coller 2 fois par conséquent),
  • Pour chacun des blocs copié/collé, renommer la balise <default-datasource> en <datasource>,
  • La balise <file /> doit indiquer le nom de l’une des deux tables de référence. La balse <name /> permet de donner un alias à cette source, exemple ici : « HERE ».

Edition du premier bloc associé à la première table de référence 

  <datasource>
    <file>france_dom_M20.ugc.mdi</file>
    <name>HERE</name>
    <title />
    <abstract />
    <online-resource />
    <zone-meaning />
    <uniqueId-meaning />
    <secondaryZone-meaning />
    <roadId-meaning />
    <country />
    <version />
    <min-processors>0</min-processors>
    <max-processors>1</max-processors>
    <cache-enabled>true</cache-enabled>
    <cache-max-size>65536</cache-max-size>
    <city-scoring-method>levenshtein</city-scoring-method>
    <street-scoring-method>levenshtein</street-scoring-method>
    <min-streets>0</min-streets>
    <default-hierachy-search-depth>-1</default-hierachy-search-depth>
    <city-name-prefix-index-size>0</city-name-prefix-index-size>
    <strategy>
      <on-no-exact-city-match score-all-candidates="true" />
      <on-no-exact-street-match score-all-candidates="true" />
      <city-search-scoring max-error-threshold="85" />
      <street-search-scoring max-error-threshold="85" />
      <search hirerachy-depth="-1" />
      <!-- <force-search-two-keys /> -->
      <!-- <filter-zone filters="&gt;##" /> -->
    </strategy>
    <country />
    <coordinateSystem />
    <bounding-box />
    <max-candidates>10</max-candidates>
    <find-type>street number</find-type>
    <tolerate-find-type>7</tolerate-find-type>
    <max-meter-error>50</max-meter-error>
    <discrepancy>0.0</discrepancy>
    <discrepancy-along-street>0.0</discrepancy-along-street>
    <favor-city-match-element>favor city name</favor-city-match-element>
    <zone-match-digits>auto</zone-match-digits>
    <score-threshold>0.0</score-threshold>
    <score-threshold-to-tolerate-street-geocoding-type>0.0</score-threshold-to-tolerate-street-geocoding-type>
    <score-threshold-to-accept-city>0.88</score-threshold-to-accept-city>
  </datasource>

  • Laisser les autres paramètres par défaut,
  • 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_M20.ugc.mdi</file>
    <name>IGN</name>
    <title />
    <abstract />
    <online-resource />
    <zone-meaning />
    <uniqueId-meaning />
    <secondaryZone-meaning />
    <roadId-meaning />
    <country />
    <version />
    <min-processors>0</min-processors>
    <max-processors>1</max-processors>
    <cache-enabled>true</cache-enabled>
    <cache-max-size>65536</cache-max-size>
    <city-scoring-method>levenshtein</city-scoring-method>
    <street-scoring-method>levenshtein</street-scoring-method>
    <min-streets>0</min-streets>
    <default-hierachy-search-depth>-1</default-hierachy-search-depth>
    <city-name-prefix-index-size>0</city-name-prefix-index-size>
    <strategy>
      <on-no-exact-city-match score-all-candidates="true" />
      <on-no-exact-street-match score-all-candidates="true" />
      <city-search-scoring max-error-threshold="85" />
      <street-search-scoring max-error-threshold="85" />
      <search hirerachy-depth="-1" />
      <!-- <force-search-two-keys /> -->
      <!-- <filter-zone filters="&gt;##" /> -->
    </strategy>
    <country />
    <coordinateSystem />
    <bounding-box />
    <max-candidates>10</max-candidates>
    <find-type>street number</find-type>
    <tolerate-find-type>7</tolerate-find-type>
    <max-meter-error>50</max-meter-error>
    <discrepancy>0.0</discrepancy>
    <discrepancy-along-street>0.0</discrepancy-along-street>
    <favor-city-match-element>favor city name</favor-city-match-element>
    <zone-match-digits>auto</zone-match-digits>
    <score-threshold>0.0</score-threshold>
    <score-threshold-to-tolerate-street-geocoding-type>0.0</score-threshold-to-tolerate-street-geocoding-type>
    <score-threshold-to-accept-city>0.88</score-threshold-to-accept-city>
  </datasource>

  • Sauvegarder le fichier « Service.xml » et relancer le service Tomcat,
  • Se connecter au portail Geoconcept Web et aller dans le menu Administration ▸ Paramètres,
  • Ajouter une nouvelle clef de paramétrage via le bouton Ajouter, indiquer les informations suivantes : Nom = geocoder.countryDatasource et Valeur = %country% , puis valider en cliquant sur OK.
  • Désormais, lorsque l’on fait appel au WebService de Géocodage, l’utilisateur devra appeler une des deux ressources dans sa requête en indiquant dans le paramètre <countryCode> 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 geocoder.datasource sera utilisée par défaut.