# πŸ“– Geocoding API – Parameters Overview The Geocoding API accepts several parameters that control how the address lookup is performed and how results are returned. They fall into two categories: **mandatory** (at least one must be present) and **optional**. ## βœ… Mandatory - **`address`** Defines the postal address to geocode. It can contain fields such as `country`, `city`, `street`, `postalCode`, etc. πŸ‘‰ At least `country` or `countryCode`, or alternatively a `boundingBox`, must be provided. - **`boundingBox`** Defines a rectangular area (in WGS84 coordinates) that restricts the search. Useful when the same address exists in multiple regions. ## βš™οΈ Optional - **`assetSearchType`** Defines the type of object to search for. Possible values: `CITY_CENTER`, `OBJECT`, `POI`, `ROAD`. - **`geoserver`** Name of the geoserver to use. Example: `here`, `osm`. - **`language`** Language code (ISO 639-1, 2 letters) for the address lookup. Special value: `"IC"` β†’ case-insensitive search by country code (ISO-3166 Alpha-2 or Alpha-3). - **`maximumResults`** Maximum number of results returned by the server. Type: `int`. - **`searchType`** Controls how the input string is matched. Possible values: - `CONTAINS` β†’ pattern must be contained in the results. - `FUZZY` β†’ fuzzy matching (typos tolerated). - `KEY_SEARCH` β†’ search by unique identifiers. - `STRICT` β†’ exact match only. - `STRICT_BEGINNING` β†’ result must start with the pattern. - `WORD_BEGINNING` β†’ one word must begin with the pattern. ## πŸ“¦ Example (overview) ``` { "geoserver": "osm", "address": { "country": "France", "city": "Paris", "street": "villa des pyrΓ©nΓ©es" }, "boundingBox": { "minLat": 48.80, "minLon": 2.25, "maxLat": 48.90, "maxLon": 2.45 }, "assetSearchType": "POI", "searchType": "FUZZY", "maximumResults": 3, "language": "fr" } ``` ➑️ This request searches for β€œVilla des PyrΓ©nΓ©es, Paris” within the specified bounding box, returning up to 3 results in French, using fuzzy matching. ## πŸ“ BoundingBox βœ… **Use case** Limit the geocoding search to a **specific area** (e.g. a city or trip corridor), to avoid irrelevant results from other regions. πŸ’‘ **What it does** The service only returns addresses **inside the defined rectangle** (WGS84 coordinates). πŸ”§ **How to enable** Add the `boundingBox` field in the request body with 4 coordinates: `maxLat`, `maxLon`, `minLat`, `minLon`. πŸ“¦ **Example** ``` { "geoserver": "osm", "address": { "city": "Paris", "street": "rue de la paix" }, "boundingBox": { "maxLat": 48.95, "maxLon": 2.50, "minLat": 48.80, "minLon": 2.25 }, "language": "fr", "maximumResult": 3 } ``` πŸ“€ **Response** ``` { "extent": { "minLon": 2.33029, "minLat": 48.86834, "maxLon": 2.33227, "maxLat": 48.87025 }, "elements": [ { "boundingBox": { "minLon": 2.33029, "minLat": 48.86834, "maxLon": 2.33227, "maxLat": 48.87025 }, "coordinate": { "lon": 2.33045, "lat": 48.8685 }, "distanceFromRequest": 0, "postalAddress": { "countryCode": "FRA", "country": "France", "state": "Île-de-France", "county": "Paris", "city": "Paris", "district": "Paris 2e Arrondissement", "postalCode": "75002", "street": "Rue de la Paix" }, "postalAddressClassType": "ROAD_TERTIARY", "postalAddressClassId": 4304, "postalAddressExactStreeNumber": false, "angle": -147, "administrativeSpeedLimit": 0, "relevanceScore": 1, "countryRelevanceScore": 1, "cityRelevanceScore": 0.75, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 1, "streetNumberRelevanceScore": 0, "segmentId": 0 } ], "maximunResult": 1 } ``` ## 🏠 Address βœ… **Use case** Provide a **postal address** (country, city, street, etc.) that you want to convert into geographical coordinates. πŸ’‘ **What it does** The service parses the given address fields and returns one or more **matching locations** with longitude/latitude coordinates. πŸ”§ **How to enable** Include the `address` object in the request body. You can specify any combination of fields: `country`, `countryCode`, `city`, `district`, `postalCode`, `street`, `streetNumber`, etc. πŸ“¦ **Example** ``` { "geoserver": "osm", "address": { "country": "France", "city": "Paris", "street": "Rue de Rivoli", "streetNumber": "99" }, "language": "fr", "maximumResult": 1 } ``` **Response** ``` { "extent": { "minLon": 2.32341, "minLat": 48.85852, "maxLon": 2.3482, "maxLat": 48.86637 }, "elements": [ { "boundingBox": { "minLon": 2.32341, "minLat": 48.85852, "maxLon": 2.3482, "maxLat": 48.86637 }, "coordinate": { "lon": 2.33491, "lat": 48.86284 }, "exactCoordinate": { "lon": 2.33482, "lat": 48.86273 }, "distanceFromRequest": 0, "postalAddress": { "countryCode": "FRA", "country": "France", "state": "Île-de-France", "county": "Paris", "city": "Paris", "district": "Paris 1er Arrondissement", "postalCode": "75001", "street": "Rue de Rivoli", "streetNumber": "99" }, "postalAddressClassType": "ROAD_TERTIARY", "postalAddressClassId": 4304, "postalAddressExactStreeNumber": true, "angle": 117, "administrativeSpeedLimit": 0, "relevanceScore": 1, "countryRelevanceScore": 1, "cityRelevanceScore": 0.75, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 1, "streetNumberRelevanceScore": 1, "segmentId": 0 } ], "maximunResult": 1 } ``` ## 🌐 Language βœ… **Use case** Control the **language** used for address lookup and returned results (street names, city names, etc.). πŸ’‘ **What it does** If the requested language is available, the response will return the address in that language. If not, the **default language** of the geoserver will be used. Special value `"IC"` allows case-insensitive search by ISO country codes. πŸ”§ **How to enable** Add the `language` field in the request body with an **ISO 639-1** 2-letter code (e.g. `fr`, `en`, `de`). πŸ“¦ **Example** ``` { "geoserver": "osm", "address": { "country": "Germany", "city": "Munich", "street": "Marienplatz" }, "language": "de", "maximumResult": 1 } ``` **Response** ``` { "extent": { "minLon": -73.26347, "minLat": 59.77727, "maxLon": -11.31233, "maxLat": 83.62743 }, "elements": [ { "boundingBox": { "minLon": -73.26347, "minLat": 59.77727, "maxLon": -11.31233, "maxLat": 83.62743 }, "coordinate": { "lon": -42.2879, "lat": 71.70235 }, "distanceFromRequest": 0, "postalAddress": { "countryCode": "GRL", "country": "Greenland" }, "postalAddressClassType": "COUNTRY", "postalAddressClassId": 1111, "postalAddressExactStreeNumber": false, "angle": 0, "administrativeSpeedLimit": 0, "relevanceScore": 0.6, "countryRelevanceScore": 0.6, "cityRelevanceScore": 1, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 1, "streetNumberRelevanceScore": 0, "segmentId": 0 } ], "maximunResult": 1 } ``` ## πŸ” searchType βœ… **Use case** Control the **matching strategy** used when searching for addresses. Useful to handle typos, partial inputs, or strict searches. πŸ’‘ **What it does** Determines how the service compares the input text with stored addresses: - `CONTAINS` β†’ match if the input is contained in the address. - `FUZZY` β†’ allows typos or misspellings (fuzzy search). - `KEY_SEARCH` β†’ search by key identifiers (IDs). - `STRICT` β†’ exact match only. - `STRICT_BEGINNING` β†’ match must start with the input string. - `WORD_BEGINNING` β†’ match if one word begins with the input (separators: space, `-`, `/`). πŸ”§ **How to enable** Add the `searchType` field in the request body with one of the supported values. πŸ“¦ **Example** ``` { "geoserver": "osm", "address": { "country": "France", "city": "Paris", "street": "villa des pyrenes" }, "searchType": "FUZZY", "maximumResult": 2, "language": "fr" } ``` **Response** ``` { "extent": { "minLon": 2.40518, "minLat": 48.8533, "maxLon": 2.40587, "maxLat": 48.85351 }, "elements": [ { "boundingBox": { "minLon": 2.40518, "minLat": 48.8533, "maxLon": 2.40587, "maxLat": 48.85351 }, "coordinate": { "lon": 2.40552, "lat": 48.85342 }, "distanceFromRequest": 0, "postalAddress": { "countryCode": "FRA", "country": "France", "state": "Île-de-France", "county": "Paris", "city": "Paris", "district": "Paris 20e Arrondissement", "postalCode": "75020", "street": "Villa des PyrΓ©nΓ©es" }, "postalAddressClassType": "ROAD_FOURTH", "postalAddressClassId": 4048, "postalAddressExactStreeNumber": false, "angle": 62, "administrativeSpeedLimit": 0, "relevanceScore": 0.96, "countryRelevanceScore": 1, "cityRelevanceScore": 0.75, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 0.96, "streetNumberRelevanceScore": 0, "segmentId": 0 }, { "coordinate": { "lon": 2.33936, "lat": 48.85113 }, "exactCoordinate": { "lon": 2.33939, "lat": 48.85114 }, "distanceFromRequest": 2.46, "postalAddress": { "countryCode": "FRA", "country": "France", "state": "Île-de-France", "county": "Paris", "city": "Paris", "district": "Paris 6e Arrondissement", "postalCode": "75006", "roadNumber": "", "street": "Villa des Princes, Rue Monsieur le Prince", "streetNumber": "19", "oppositeStreetNumber": "10" }, "postalAddressClassType": "HOTEL_MOTEL", "postalAddressClassId": 7314, "postalAddressExactStreeNumber": false, "angle": -27, "administrativeSpeedLimit": 30, "relevanceScore": 0.87, "countryRelevanceScore": 1, "cityRelevanceScore": 0.75, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 0.87, "streetNumberRelevanceScore": 0, "geoElementTypes": [ "ROAD", "FOURTH_ROAD", "DISTRICT", "CITY", "COUNTY", "STATE", "COUNTRY" ], "segmentId": 0 } ], "maximunResult": 2 } ``` ## πŸ”’ maximumResults βœ… **Use case** Limit the **number of results** returned by the geocoding request. πŸ’‘ **What it does** The service will return **at most N addresses** matching the search. This helps avoid long responses and keeps only the most relevant results. πŸ”§ **How to enable** Add the `maximumResults` field in the request body with an integer value. πŸ“¦ **Example** ``` { "geoserver": "osm", "address": { "country": "France", "city": "Paris", "street": "Rue de Rivoli" }, "maximumResults": 3, "language": "fr" } ``` **Response** ``` { "extent": { "minLon": 2.32341, "minLat": 48.85504, "maxLon": 2.36171, "maxLat": 48.86637 }, "elements": [ { "boundingBox": { "minLon": 2.32341, "minLat": 48.85852, "maxLon": 2.3482, "maxLat": 48.86637 }, "coordinate": { "lon": 2.3482, "lat": 48.85852 }, "distanceFromRequest": 0, "postalAddress": { "countryCode": "FRA", "country": "France", "state": "Île-de-France", "county": "Paris", "city": "Paris", "district": "Paris 1er Arrondissement", "postalCode": "75001", "street": "Rue de Rivoli" }, "postalAddressClassType": "ROAD_TERTIARY", "postalAddressClassId": 4304, "postalAddressExactStreeNumber": false, "angle": 117, "administrativeSpeedLimit": 0, "relevanceScore": 1, "countryRelevanceScore": 1, "cityRelevanceScore": 0.75, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 1, "streetNumberRelevanceScore": 0, "segmentId": 0 }, { "boundingBox": { "minLon": 2.3482, "minLat": 48.85504, "maxLon": 2.36171, "maxLat": 48.85852 }, "coordinate": { "lon": 2.35931, "lat": 48.85562 }, "distanceFromRequest": 0, "postalAddress": { "countryCode": "FRA", "country": "France", "state": "Île-de-France", "county": "Paris", "city": "Paris", "district": "Paris 4e Arrondissement", "postalCode": "75004", "street": "Rue de Rivoli" }, "postalAddressClassType": "ROAD_FOURTH", "postalAddressClassId": 4048, "postalAddressExactStreeNumber": false, "angle": 110, "administrativeSpeedLimit": 0, "relevanceScore": 1, "countryRelevanceScore": 1, "cityRelevanceScore": 0.75, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 1, "streetNumberRelevanceScore": 0, "segmentId": 0 } ], "maximunResult": 2 } ``` ## 🏷️ assetSearchType βœ… **Use case** Refine the geocoding search to target a **specific type of asset** (e.g. city center, road, POI). πŸ’‘ **What it does** The service adjusts the results depending on the selected asset type: - `CITY_CENTER` β†’ returns the central point of a city. - `OBJECT` β†’ returns generic objects (buildings, addresses). - `POI` β†’ returns points of interest (restaurants, landmarks, etc.). - `ROAD` β†’ returns road segments or streets. πŸ”§ **How to enable** Add the `assetSearchType` field in the request body with one of the available values. πŸ“¦ **Example** ``` { "geoserver": "osm", "address": { "country": "France", "city": "Nice" }, "assetSearchType": "CITY_CENTER", "maximumResults": 1, "language": "fr" } ``` **Response** ``` { "extent": { "minLon": 7.18193, "minLat": 43.64566, "maxLon": 7.32309, "maxLat": 43.76084 }, "elements": [ { "boundingBox": { "minLon": 7.18193, "minLat": 43.64566, "maxLon": 7.32309, "maxLat": 43.76084 }, "coordinate": { "lon": 7.27768, "lat": 43.70032 }, "distanceFromRequest": 0, "postalAddress": { "countryCode": "FRA", "country": "France", "state": "Provence-Alpes-CΓ΄te d'Azur", "county": "Alpes-Maritimes", "city": "Nice" }, "postalAddressClassType": "ORDRE_8_AREA", "postalAddressClassId": 1119, "postalAddressExactStreeNumber": false, "angle": 0, "administrativeSpeedLimit": 0, "relevanceScore": 1, "countryRelevanceScore": 1, "cityRelevanceScore": 1, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 1, "streetNumberRelevanceScore": 0, "segmentId": 0 } ], "maximunResult": 1 } ``` ## 🌍 geoserver βœ… **Use case** Select the **geographical database** (geoserver) to be used for the geocoding request. πŸ’‘ **What it does** The service queries the chosen geoserver (e.g. `here`, `osm`) to return coordinates for the provided address. Different geoservers may give **different results** depending on their coverage and data quality. πŸ”§ **How to enable** Add the `geoserver` field in the request body with the desired geoserver name as a string. πŸ“¦ **Example** ``` { "geoserver": "osm", "address": { "country": "Italy", "city": "Rome", "street": "Via del Corso" }, "geoserver": "osm", "maximumResults": 1, "language": "en" } ``` **Response** ``` { "extent": { "minLon": 12.47651, "minLat": 41.89668, "maxLon": 12.48222, "maxLat": 41.91031 }, "elements": [ { "boundingBox": { "minLon": 12.47651, "minLat": 41.89668, "maxLon": 12.48222, "maxLat": 41.91031 }, "coordinate": { "lon": 12.47675, "lat": 41.90975 }, "distanceFromRequest": 0, "postalAddress": { "countryCode": "ITA", "country": "Italy", "state": "Lazio", "county": "Roma", "city": "Rome", "district": "Municipio Roma I", "street": "Via del Corso" }, "postalAddressClassType": "ROAD_FOURTH_PEDESTRIAN", "postalAddressClassId": 4000, "postalAddressExactStreeNumber": false, "angle": 0, "administrativeSpeedLimit": 0, "relevanceScore": 1, "countryRelevanceScore": 1, "cityRelevanceScore": 0.4, "postalCodeRelevanceScore": 1, "streetRelevanceScore": 1, "streetNumberRelevanceScore": 0, "segmentId": 0 } ], "maximunResult": 1 } ```