X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/97a9a262bb700cb89f940c8daa465c0681657d93..cafd8e2b1ed6ce823fb0bf66673d98450372457c:/docs/api/Search.md diff --git a/docs/api/Search.md b/docs/api/Search.md index c18655dc..a45ec36f 100644 --- a/docs/api/Search.md +++ b/docs/api/Search.md @@ -1,287 +1,444 @@ # Search queries -The search API allows you to look up a location from a textual description. -Nominatim supports structured as well as free-form search queries. +The search API allows you to look up a location from a textual description +or address. Nominatim supports structured and free-form search queries. The search query may also contain [special phrases](https://wiki.openstreetmap.org/wiki/Nominatim/Special_Phrases) which are translated into specific OpenStreetMap (OSM) tags (e.g. Pub => `amenity=pub`). -Note that this only limits the items to be found, it's not suited to return complete -lists of OSM objects of a specific type. For those use [Overpass API](https://overpass-api.de/). +This can be used to narrow down the kind of objects to be returned. -## Parameters - -The search API has the following two formats: +!!! note + Special phrases are not suitable to query all objects of a certain type in an + area. Nominatim will always just return a collection of the best matches. To + download OSM data by object type, use the [Overpass API](https://overpass-api.de/). -``` - https://nominatim.openstreetmap.org/search/? -``` +## Endpoint -This format only accepts a free-form query string where the -parts of the query are separated by slashes. +The search API has the following format: ``` https://nominatim.openstreetmap.org/search? ``` -In this form, the query may be given through two different sets of parameters: +!!! danger "Deprecation warning" + The API can also be used with the URL + `https://nominatim.openstreetmap.org/search.php`. This is now deprecated + and will be removed in future versions. + +The query term can be given in two different forms: free-form or structured. + +### Free-form query + +| Parameter | Value | +|-----------| ----- | +| q | Free-form query string to search for | + +In this form, the query can be unstructured. +Free-form queries are processed first left-to-right and then right-to-left if that fails. So you may search for +[pilkington avenue, birmingham](https://nominatim.openstreetmap.org/search?q=pilkington+avenue,birmingham) as well as for +[birmingham, pilkington avenue](https://nominatim.openstreetmap.org/search?q=birmingham,+pilkington+avenue). +Commas are optional, but improve performance by reducing the complexity of the search. -* `q=` +The free-form may also contain special phrases to describe the type of +place to be returned or a coordinate to search close to a position. - Free-form query string to search for. - Free-form queries are processed first left-to-right and then right-to-left if that fails. So you may search for - [pilkington avenue, birmingham](//nominatim.openstreetmap.org/search?q=pilkington+avenue,birmingham) as well as for - [birmingham, pilkington avenue](//nominatim.openstreetmap.org/search?q=birmingham,+pilkington+avenue). - Commas are optional, but improve performance by reducing the complexity of the search. +### Structured query +| Parameter | Value | +|----------- | ----- | +| amenity | name and/or type of POI | +| street | housenumber and streetname | +| city | city | +| county | county | +| state | state | +| country | country | +| postalcode | postal code | -* `street= ` -* `city=` -* `county=` -* `state=` -* `country=` -* `postalcode=` +The structured form of the search query allows to lookup up an address +that is already split into its components. Each parameter represents a field +of the address. All parameters are optional. You should only use the ones +that are relevant for the address you want to geocode. - Alternative query string format split into several parameters for structured requests. - Structured requests are faster but are less robust against alternative - OSM tagging schemas. **Do not combine with** `q=` **parameter**. +!!! Attention + Cannot be combined with the `q=` parameter. Newer versions of + the API will return an error if you do so. Older versions simply return + unexpected results. -All three query forms accept the additional parameters listed below. +## Parameters + +The following parameters can be used to further restrict the search and +change the output. They are usable for both forms of the search query. ### Output format -* `format=[html|xml|json|jsonv2|geojson|geocodejson]` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| format | one of: `xml`, `json`, `jsonv2`, `geojson`, `geocodejson` | `jsonv2` | + +See [Place Output Formats](Output.md) for details on each format. + +!!! note + The Nominatim service at + [https://nominatim.openstreetmap.org](https://nominatim.openstreetmap.org) + has a different default behaviour for historical reasons. When the + `format` parameter is omitted, the request will be forwarded to the Web UI. -See [Place Output Formats](Output.md) for details on each format. (Default: html) -* `json_callback=` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| json_callback | function name | _unset_ | + +When given, then JSON output will be wrapped in a callback function with +the given name. See [JSONP](https://en.wikipedia.org/wiki/JSONP) for more +information. -Wrap JSON output in a callback function ([JSONP](https://en.wikipedia.org/wiki/JSONP)) i.e. `()`. Only has an effect for JSON output formats. -### Output details +| Parameter | Value | Default | +|-----------| ----- | ------- | +| limit | number | 10 | -* `addressdetails=[0|1]` +Limit the maximum number of returned results. Cannot be more than 40. +Nominatim may decide to return less results than given, if additional +results do not sufficiently match the query. -Include a breakdown of the address into elements. (Default: 0) +### Output details -* `extratags=[0|1]` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| addressdetails | 0 or 1 | 0 | -Include additional information in the result if available, -e.g. wikipedia link, opening hours. (Default: 0) +When set to 1, include a breakdown of the address into elements. +The exact content of the address breakdown depends on the output format. +!!! tip + If you are interested in a stable classification of address categories + (suburb, city, state, etc), have a look at the `geocodejson` format. + All other formats return classifications according to OSM tagging. + There is a much larger set of categories and they are not always consistent, + which makes them very hard to work with. -* `namedetails=[0|1]` -Include a list of alternative names in the results. These may include -language variants, references, operator and brand. (Default: 0) +| Parameter | Value | Default | +|-----------| ----- | ------- | +| extratags | 0 or 1 | 0 | +When set to 1, the response include any additional information in the result +that is available in the database, e.g. wikipedia link, opening hours. -### Language of results -* `accept-language=` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| namedetails | 0 or 1 | 0 | -Preferred language order for showing search results, overrides the value -specified in the ["Accept-Language" HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language). -Either use a standard RFC2616 accept-language string or a simple -comma-separated list of language codes. +When set to 1, include a full list of names for the result. These may include +language variants, older names, references and brand. -### Result limitation -* `countrycodes=[,][,]...` +### Language of results -Limit search results to one or more countries. `` must be the -[ISO 3166-1alpha2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code, -e.g. `gb` for the United Kingdom, `de` for Germany. +| Parameter | Value | Default | +|-----------| ----- | ------- | +| accept-language | browser language string | content of "Accept-Language" HTTP header | -Each place in Nominatim is assigned to one country code based -on `admin_level=2` tags, in rare cases to none (for example in -international waters outside any country). +Preferred language order for showing search results. This may either be +a simple comma-separated list of language codes or have the same format +as the ["Accept-Language" HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language). -* `exclude_place_ids=` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| countrycodes | comma-separated list of country codes | _unset_ | -Limit the number of returned results. (Default: 10, Maximum: 50) +Filer that limits the search results to one or more countries. +The country code must be the +[ISO 3166-1alpha2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code +of the country, e.g. `gb` for the United Kingdom, `de` for Germany. +Each place in Nominatim is assigned to one country code based +on OSM country boundaries. In rare cases a place may not be in any country +at all, for example, when it is in international waters. These places are +also excluded when the filter is set. + +!!! Note + This parameter should not be confused with the 'country' parameter of + the structured query. The 'country' parameter contains a search term + and will be handled with some fuzziness. The `countrycodes` parameter + is a hard filter and as such should be prefered. Having both parameters + in the same query will work. If the parameters contradict each other, + the search will come up empty. + +| Parameter | Value | Default | +|-----------| ----- | ------- | +| layers | comma-separated list of: `address`, `poi`, `railway`, `natural`, `manmade` | _unset_ (no restriction) | + +The layers filter allows to select places by themes. + +The `address` layer contains all places that make up an address: +address points with house numbers, streets, inhabited places (suburbs, villages, +cities, states tec.) and administrative boundaries. + +The `poi` layer selects all point of interest. This includes classic POIs like +restaurants, shops, hotels but also less obvious features like recycling bins, +guideposts or benches. + +The `railway` layer includes railway infrastructure like tracks. +Note that in Nominatim's standard configuration, only very few railway +features are imported into the database. + +The `natural` layer collects feautures like rivers, lakes and mountains while +the `manmade` layer functions as a catch-all for features not covered by the +other layers. + +| Parameter | Value | Default | +|-----------| ----- | ------- | +| featureType | one of: `country`, `state`, `city`, `settlement` | _unset_ | + +The featureType allows to have a more fine-grained selection for places +from the address layer. Results can be restricted to places that make up +the 'state', 'country' or 'city' part of an address. A featureType of +settlement selects any human inhabited feature from 'state' down to +'neighbourhood'. + +When featureType ist set, then results are automatically restricted +to the address layer (see above). + +!!! tip + Instead of using the featureType filters `country`, `state` or `city`, + you can also use a structured query without the finer-grained parameters + amenity or street. + +| Parameter | Value | Default | +|-----------| ----- | ------- | +| exclude_place_ids | comma-separeted list of place ids | + +If you do not want certain OSM objects to appear in the search +result, give a comma separated list of the `place_id`s you want to skip. +This can be used to retrieve additional search results. For example, if a +previous query only returned a few results, then including those here would +cause the search to return other, less accurate, matches (if possible). -* `viewbox=,,,` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| viewbox | `,,,` | _unset_ | -The preferred area to find search results. Any two corner points of the box -are accepted in any order as long as they span a real box. `x` is longitude, -`y` is latitude. +Boost parameter which focuses the search on the given area. +Any two corner points of the box are accepted as long as they make a proper +box. `x` is longitude, `y` is latitude. +| Parameter | Value | Default | +|-----------| ----- | ------- | +| bounded | 0 or 1 | 0 | -* `bounded=[0|1]` +When set to 1, then it turns the 'viewbox' parameter (see above) into +a filter paramter, excluding any results outside the viewbox. -When a viewbox is given, restrict the result to items contained with that -viewbox (see above). When `viewbox` and `bounded=1` are given, an amenity -only search is allowed. In this case, give the special keyword for the -amenity in square brackets, e.g. `[pub]`. (Default: 0) +When `bounded=1` is given and the viewbox is small enough, then an amenity-only +search is allowed. Give the special keyword for the amenity in square +brackets, e.g. `[pub]` and a selection of objects of this type is returned. +There is no guarantee that the result returns all objects in the area. ### Polygon output -* `polygon_geojson=1` -* `polygon_kml=1` -* `polygon_svg=1` -* `polygon_text=1` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| polygon_geojson | 0 or 1 | 0 | +| polygon_kml | 0 or 1 | 0 | +| polygon_svg | 0 or 1 | 0 | +| polygon_text | 0 or 1 | 0 | -Output geometry of results as a GeoJSON, KML, SVG or WKT. Only one of these -options can be used at a time. (Default: 0) +Add the full geometry of the place to the result output. Output formats +in GeoJSON, KML, SVG or WKT are supported. Only one of these +options can be used at a time. -* `polygon_threshold=0.0` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| polygon_threshold | floating-point number | 0.0 | -Simplify the output geometry before returning. The parameter is the +When one of the polygon_* outputs is chosen, return a simplified version +of the output geometry. The parameter describes the tolerance in degrees with which the geometry may differ from the original -geometry. Topology is preserved in the result. (Default: 0.0) +geometry. Topology is preserved in the geometry. ### Other -* `email=` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| email | valid email address | _unset_ | If you are making large numbers of request please include an appropriate email -address to identify your requests. See Nominatim's [Usage Policy](https://operations.osmfoundation.org/policies/nominatim/) for more details. +address to identify your requests. See Nominatim's +[Usage Policy](https://operations.osmfoundation.org/policies/nominatim/) for more details. -* `dedupe=[0|1]` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| dedupe | 0 or 1 | 1 | Sometimes you have several objects in OSM identifying the same place or -object in reality. The simplest case is a street being split in many +object in reality. The simplest case is a street being split into many different OSM ways due to different characteristics. Nominatim will -attempt to detect such duplicates and only return one match unless -this parameter is set to 0. (Default: 1) +attempt to detect such duplicates and only return one match. Setting +this parameter to 0 disables this deduplication mechanism and +ensures that all results are returned. - - -* `debug=[0|1]` +| Parameter | Value | Default | +|-----------| ----- | ------- | +| debug | 0 or 1 | 0 | Output assorted developer debug information. Data on internals of Nominatim's -"Search Loop" logic, and SQL queries. The output is (rough) HTML format. -This overrides the specified machine readable format. (Default: 0) - +"search loop" logic, and SQL queries. The output is HTML format. +This overrides the specified machine readable format. ## Examples -##### XML with kml polygon +##### XML with KML polygon -* [https://nominatim.openstreetmap.org/search?q=135+pilkington+avenue,+birmingham&format=xml&polygon_geojson=1&addressdetails=1](https://nominatim.openstreetmap.org/search?q=135+pilkington+avenue,+birmingham&format=xml&polygon_geojson=1&addressdetails=1) +* [https://nominatim.openstreetmap.org/search?q=135+pilkington+avenue,+birmingham&format=xml&polygon_kml=1&addressdetails=1](https://nominatim.openstreetmap.org/search?q=135+pilkington+avenue,+birmingham&format=xml&polygon_kml=1&addressdetails=1) ```xml - - - - - - - -1.816513,52.548756599999997 -1.816434,52.548747300000002 -1.816429,52.5487629 -1.8163717,52.548756099999999 -1.8163464,52.548834599999999 -1.8164599,52.548848100000001 -1.8164685,52.5488213 -1.8164913,52.548824000000003 -1.816513,52.548756599999997 - - - - - 135 - Pilkington Avenue - Wylde Green - Sutton Coldfield - City of Birmingham - West Midlands (county) - B72 - United Kingdom - gb - - + + + + + + + + -1.816513,52.5487566 -1.816434,52.5487473 -1.816429,52.5487629 -1.8163717,52.5487561 -1.8163464,52.5488346 -1.8164599,52.5488481 -1.8164685,52.5488213 -1.8164913,52.548824 -1.816513,52.5487566 + + + + + 135 + Pilkington Avenue + Maney + Sutton Coldfield + Wylde Green + Birmingham + GB-BIR + West Midlands Combined Authority + England + GB-ENG + B72 1LH + United Kingdom + gb + + ``` ##### JSON with SVG polygon -[https://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1](https://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1) +[https://nominatim.openstreetmap.org/search?q=Unter%20den%20Linden%201%20Berlin&format=json&addressdetails=1&limit=1&polygon_svg=1](https://nominatim.openstreetmap.org/search?q=Unter%20den%20Linden%201%20Berlin&format=json&addressdetails=1&limit=1&polygon_svg=1) ```json - { - "address": { - "city": "Berlin", - "city_district": "Mitte", - "construction": "Unter den Linden", - "continent": "European Union", - "country": "Deutschland", - "country_code": "de", - "house_number": "1", - "neighbourhood": "Scheunenviertel", - "postcode": "10117", - "public_building": "Kommandantenhaus", - "state": "Berlin", - "suburb": "Mitte" - }, - "boundingbox": [ - "52.5170783996582", - "52.5173187255859", - "13.3975105285645", - "13.3981599807739" - ], - "class": "amenity", - "display_name": "Kommandantenhaus, 1, Unter den Linden, Scheunenviertel, Mitte, Berlin, 10117, Deutschland, European Union", - "importance": 0.73606775332943, - "lat": "52.51719785", - "licence": "Data \u00a9 OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright", - "lon": "13.3978352028938", - "osm_id": "15976890", - "osm_type": "way", - "place_id": "30848715", - "svg": "M 13.397511 -52.517283599999999 L 13.397829400000001 -52.517299800000004 13.398131599999999 -52.517315099999998 13.398159400000001 -52.517112099999999 13.3975388 -52.517080700000001 Z", - "type": "public_building" - } +[ + { + "address": { + "ISO3166-2-lvl4": "DE-BE", + "borough": "Mitte", + "city": "Berlin", + "country": "Deutschland", + "country_code": "de", + "historic": "Kommandantenhaus", + "house_number": "1", + "neighbourhood": "Friedrichswerder", + "postcode": "10117", + "road": "Unter den Linden", + "suburb": "Mitte" + }, + "boundingbox": [ + "52.5170798", + "52.5173311", + "13.3975116", + "13.3981577" + ], + "class": "historic", + "display_name": "Kommandantenhaus, 1, Unter den Linden, Friedrichswerder, Mitte, Berlin, 10117, Deutschland", + "importance": 0.8135042058306902, + "lat": "52.51720765", + "licence": "Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright", + "lon": "13.397834399325466", + "osm_id": 15976890, + "osm_type": "way", + "place_id": 108681845, + "svg": "M 13.3975116 -52.5172905 L 13.397549 -52.5170798 13.397715 -52.5170906 13.3977122 -52.5171064 13.3977392 -52.5171086 13.3977417 -52.5170924 13.3979655 -52.5171069 13.3979623 -52.5171233 13.3979893 -52.5171248 13.3979922 -52.5171093 13.3981577 -52.5171203 13.398121 -52.5173311 13.3978115 -52.5173103 Z", + "type": "house" + } +] ``` ##### JSON with address details -[https://nominatim.openstreetmap.org/?addressdetails=1&q=bakery+in+berlin+wedding&format=json&limit=1](https://nominatim.openstreetmap.org/?addressdetails=1&q=bakery+in+berlin+wedding&format=json&limit=1) +[https://nominatim.openstreetmap.org/search?addressdetails=1&q=bakery+in+berlin+wedding&format=jsonv2&limit=1](https://nominatim.openstreetmap.org/search?addressdetails=1&q=bakery+in+berlin+wedding&format=jsonv2&limit=1) ```json - { - "address": { - "bakery": "B\u00e4cker Kamps", - "city_district": "Mitte", - "continent": "European Union", - "country": "Deutschland", - "country_code": "de", - "footway": "Bahnsteig U6", - "neighbourhood": "Sprengelkiez", - "postcode": "13353", - "state": "Berlin", - "suburb": "Wedding" - }, - "boundingbox": [ - "52.5460929870605", - "52.5460968017578", - "13.3591794967651", - "13.3591804504395" - ], - "class": "shop", - "display_name": "B\u00e4cker Kamps, Bahnsteig U6, Sprengelkiez, Wedding, Mitte, Berlin, 13353, Deutschland, European Union", - "icon": "https://nominatim.openstreetmap.org/images/mapicons/shopping_bakery.p.20.png", - "importance": 0.201, - "lat": "52.5460941", - "licence": "Data \u00a9 OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright", - "lon": "13.35918", - "osm_id": "317179427", - "osm_type": "node", - "place_id": "1453068", - "type": "bakery" - } +[ + { + "address": { + "ISO3166-2-lvl4": "DE-BE", + "borough": "Mitte", + "city": "Berlin", + "country": "Deutschland", + "country_code": "de", + "neighbourhood": "Sprengelkiez", + "postcode": "13347", + "road": "Lindower Straße", + "shop": "Ditsch", + "suburb": "Wedding" + }, + "addresstype": "shop", + "boundingbox": [ + "52.5427201", + "52.5427654", + "13.3668619", + "13.3669442" + ], + "category": "shop", + "display_name": "Ditsch, Lindower Straße, Sprengelkiez, Wedding, Mitte, Berlin, 13347, Deutschland", + "importance": 9.99999999995449e-06, + "lat": "52.54274275", + "licence": "Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright", + "lon": "13.36690305710228", + "name": "Ditsch", + "osm_id": 437595031, + "osm_type": "way", + "place_id": 204751033, + "place_rank": 30, + "type": "bakery" + } +] ``` ##### GeoJSON