Compare commits

...

75 Commits

Author SHA1 Message Date
Sarah Hoffmann
9a13b62fb9 prepare release 5.2.0 2025-10-29 10:01:30 +01:00
Sarah Hoffmann
3ecda751c4 Merge pull request #3861 from lonvia/force-extra-tags
Force inclusion of extra tags when Nominatim internally depends on them
2025-10-29 08:51:40 +01:00
Sarah Hoffmann
5d4c29b84b force inclusion of extratags used directly by Nominatim 2025-10-28 17:20:17 +01:00
Sarah Hoffmann
f1fbc04f33 harmonize use of callback with set_entrance_filter
All other functions except a simple function, so do this here as well.
2025-10-28 14:33:45 +01:00
Sarah Hoffmann
353c985b9f Merge pull request #3859 from lonvia/fix-entrance-addresses
Move entrances to a separate table
2025-10-24 13:38:21 +02:00
Sarah Hoffmann
2dda9079f0 add BDD tests for importing into the new place_entrance table 2025-10-24 10:52:25 +02:00
Sarah Hoffmann
4c91a0bc8d fix syntax in presets 2025-10-24 09:43:06 +02:00
Sarah Hoffmann
31c8ec6db0 add documentation for entrance table configuration 2025-10-23 20:53:59 +02:00
Sarah Hoffmann
e2330ff4c1 add migration for separate entrance table 2025-10-23 17:25:20 +02:00
Sarah Hoffmann
589825d37e adapt tests for extra place_entrance table 2025-10-23 17:25:20 +02:00
Sarah Hoffmann
a93113bc44 use extra place_entrance table 2025-10-23 17:25:20 +02:00
Sarah Hoffmann
b042eca382 move entrances into extra table 2025-10-23 17:25:20 +02:00
Sarah Hoffmann
d202a8f7d8 Merge pull request #3857 from lonvia/leisure-garden
Be more conservative when including leisure=garden/commons
2025-10-22 14:03:19 +02:00
Sarah Hoffmann
af6386bd68 move some leisure features into manmade layer 2025-10-22 11:27:25 +02:00
Sarah Hoffmann
862bfdf6fb correct default values for layer on reverse 2025-10-22 11:27:25 +02:00
Sarah Hoffmann
28029edc8b exclude unamed gardens and commons
These are mostly private gardens and small streches of green
not of interest for a general search.

ddd
2025-10-22 11:26:58 +02:00
Sarah Hoffmann
d6e9196177 Merge pull request #3855 from hasandiwan/master
force layer to be address
2025-10-22 11:24:40 +02:00
Hasan Diwan
e0a750e089 force layer to be address 2025-10-22 07:55:10 +00:00
Sarah Hoffmann
93b2a0f194 update CI to test against PostgreSQL 18 2025-10-20 18:50:30 +02:00
Sarah Hoffmann
aa3fce6852 correct default setting for addressdetails parameter in lookup
Fixes #3850.
2025-10-11 09:20:10 +02:00
Sarah Hoffmann
535ffc1e3f Merge pull request #3840 from lonvia/normalize-penalties
Improve termination condition for forward search
2025-09-12 21:59:39 +02:00
Sarah Hoffmann
77ed4635f2 Merge pull request #3836 from Johannes-Andersen/chore/i18NorwegianCountries
chore: update no,nb,nn country-names translation
2025-09-12 21:01:03 +02:00
Sarah Hoffmann
7715a9d500 fix new mypy issue 2025-09-12 19:32:49 +02:00
Johannes Andersen
58d570ca8a chore: update no,nb,nn country-names translation 2025-09-12 18:20:56 +02:00
Sarah Hoffmann
5a8aa6cce4 adapt tests to new penalties 2025-09-12 17:45:22 +02:00
Sarah Hoffmann
72592da0cc reduce penalty for artificial housenumbers 2025-09-12 17:44:54 +02:00
Sarah Hoffmann
193d6c4173 in-word penalty for final address token 2025-09-12 12:05:29 +02:00
Sarah Hoffmann
4fd881bcb2 housenumber and postcode cross penalties for partials 2025-09-12 11:50:01 +02:00
Sarah Hoffmann
54620f9566 base penalty for housenumber searches on similar address searches 2025-09-12 10:52:42 +02:00
Sarah Hoffmann
42b687f545 stop searching earlier after the first results was found 2025-09-12 10:01:13 +02:00
Sarah Hoffmann
43ffceff27 remove base penalty for postcodes
This is a relict from having base penalties for all terms.
2025-09-12 09:45:57 +02:00
Sarah Hoffmann
2fb03cd103 Merge pull request #3835 from lonvia/remove-japanese-variants
Remove japanese variants
2025-09-11 17:45:30 +02:00
Sarah Hoffmann
8d3d24a1e4 Merge pull request #3834 from lonvia/neighbourhoods
Improve handling of neighbourhoods in addresses
2025-09-11 15:25:01 +02:00
Sarah Hoffmann
8efdab1d6f remove japanese variants
Variants are only meant for word morphing which does not exist
for Kanji.
2025-09-11 15:20:57 +02:00
Sarah Hoffmann
1d1d80e1e3 adapt BDD tests for new address ranks 2025-09-11 11:56:39 +02:00
Sarah Hoffmann
670cf98f93 fix query time logging for structured queries 2025-09-11 10:54:02 +02:00
Sarah Hoffmann
433c40cd68 downgrade neighbourhoods and landuses
Neighbourhoods shoud be below a quarter hierarchically speaking, so
downgrade them a bit. Consider named landuses the area form of a
meighbourhood and put it at the same level.
2025-09-11 10:20:33 +02:00
Sarah Hoffmann
a049569020 downgrade Japanese boundaries one level
Definition is shifted by one compared to other countries,
see https://wiki.openstreetmap.org/wiki/Tag:boundary%3Dadministrative
2025-09-11 10:01:24 +02:00
Sarah Hoffmann
bf49f6a46f Merge pull request #3833 from lonvia/rework-logging
Introduce generic query statistics and make log output configurable
2025-09-11 08:46:44 +02:00
Sarah Hoffmann
45a44f1411 export QueryStatistics type 2025-09-10 21:40:39 +02:00
Sarah Hoffmann
5a2bfd7a19 add documentation for library API 2025-09-10 21:38:09 +02:00
Sarah Hoffmann
fd12d2e9f3 add additional stats for search queries 2025-09-10 20:49:46 +02:00
Sarah Hoffmann
3d0867ff16 make log output configurable 2025-09-10 20:11:46 +02:00
Sarah Hoffmann
177b16b89b use new QueryStatistics in API server 2025-09-10 11:52:06 +02:00
Sarah Hoffmann
0b7bde2500 introduce parameter for saving query statistics 2025-09-10 10:24:20 +02:00
Sarah Hoffmann
7ac3591433 Merge pull request #3830 from lonvia/split-transliteration
Improve word match penalty for scripts without word boundaries
2025-09-09 10:28:21 +02:00
Sarah Hoffmann
07c2907064 split normalized word when transliteration is split up 2025-09-08 22:58:01 +02:00
Sarah Hoffmann
355cbcc7b8 Merge pull request #3828 from lonvia/code-cleanup
Code cleanup
2025-09-06 16:59:52 +02:00
Sarah Hoffmann
8339c2b928 no longer accept None in result maker functions 2025-09-06 11:09:40 +02:00
Sarah Hoffmann
341c09ee95 remove unused functions 2025-09-06 11:09:40 +02:00
Sarah Hoffmann
b0b909be93 Merge pull request #3827 from lonvia/rework-query-timeouts
Apply request timeouts while waiting for a connection
2025-09-06 11:08:55 +02:00
Sarah Hoffmann
bf604e36ee add test for timeout class 2025-09-05 23:31:09 +02:00
Sarah Hoffmann
3a50f749dd apply request timeout also while waiting for a connection from pool 2025-09-05 23:31:09 +02:00
Sarah Hoffmann
563255202d read request_timeout configuration only once 2025-09-05 09:18:50 +02:00
Sarah Hoffmann
94d22bbdac Merge pull request #3825 from emlove/entrance-docs
Some docs for the entrances output
2025-09-03 21:18:15 +02:00
Emily Love Watson
32d26f12c4 Add example entrances output 2025-09-03 09:55:43 -05:00
Sarah Hoffmann
0f324c8cb2 Merge pull request #3826 from lonvia/decrease-default-pool-size
reduce default DB pool size
2025-09-03 08:53:54 +02:00
Emily Love Watson
1e3b56d215 Some docs for the entrances output 2025-09-02 21:56:56 -05:00
Sarah Hoffmann
e855552e01 reduce default DB pool size 2025-09-02 22:10:30 +02:00
Sarah Hoffmann
79a1907c49 Merge pull request #3807 from emlove/return-entrance-location
Index and return entrance coordinates for places
2025-08-30 20:08:33 +02:00
Emily Love Watson
91e345f77f Store entrance fields as columns on table 2025-08-29 10:26:29 -05:00
Emily Love Watson
d0ad65f696 Select all entrances for results in one query 2025-08-29 10:26:29 -05:00
Emily Love Watson
e916d27b7c Update entrances when entrance nodes are updated 2025-08-29 10:26:29 -05:00
Emily Love Watson
823ad5d279 Update entrances schema 2025-08-29 10:26:29 -05:00
Emily Love Watson
048d571e46 Index and return entrance coordinates for indexed locations 2025-08-29 10:25:44 -05:00
Sarah Hoffmann
f5e4b74c38 Merge pull request #3823 from lonvia/fix-postcode-difference
Fix difference computation on postcode updates
2025-08-29 17:06:08 +02:00
Sarah Hoffmann
c2a311e69c fix poscode update computation: use distance 2025-08-29 15:10:27 +02:00
Sarah Hoffmann
5968f7d646 Merge pull request #3816 from anqixxx/locale-doc-update
Update to library locale documentation in light of refactor
2025-08-28 22:06:41 +02:00
anqixxx
4cdd2526b6 Updated and restructured library documentation to include Locale changes
Updated Getting Started Docs

Added documentation for Result Handling

removed api documentation
2025-08-27 09:18:16 -07:00
Sarah Hoffmann
4ff7696ed3 Merge pull request #3820 from mtmail/berlin-ost-hauptbahnhof
Sanetizer no longer strips name parts in brackets when more parts follow
2025-08-23 17:17:39 +02:00
marc tobias
247afe1f56 sanetizer no longer strips name parts in brackets when more parts follow 2025-08-23 01:06:35 +02:00
Sarah Hoffmann
6f74141fa4 Merge pull request #3819 from lonvia/ignore-survey
Ignore survey:* tags
2025-08-22 22:10:02 +02:00
Sarah Hoffmann
75ccf97de3 ignore survey:* tags 2025-08-22 10:59:58 +02:00
Sarah Hoffmann
196de9e974 Merge pull request #3796 from anqixxx/locale-refactor
Localize() + Results refactor
2025-08-13 14:08:42 +02:00
anqixxx
6b627df4fb Locales and localization refactor with Locales as a localizer object.
Removed auto-localization from search/search_address APIs (now explicit), simplified AddressLines to subclass List[AddressLine], made display_name a computed property in Results instead of field and removed result-localization circular dependencies
2025-08-12 08:05:37 -04:00
306 changed files with 1855 additions and 679 deletions

View File

@@ -47,7 +47,7 @@ jobs:
python: '3.9'
- flavour: ubuntu-24
ubuntu: 24
postgresql: 17
postgresql: 18
lua: '5.3'
dependencies: apt
python: 'builtin'
@@ -326,7 +326,7 @@ jobs:
- uses: ./Nominatim/.github/actions/setup-postgresql
with:
postgresql-version: 17
postgresql-version: 18
- name: Install Python dependencies
run: |

View File

@@ -1,3 +1,39 @@
5.2.0
* increase minimum required Python to 3.9
* index and output entrances of buildings and areas (thanks @emlove)
* name tags used for creating display names are now configurable
(thanks @astridx)
* new pattern-replacement query preprocessor (thanks @TuringVerified)
* special phrases can now be filtered by presence of tags (thanks @anqixxx)
* lua import style now always includes tags required by Nominatim
* improved query time reporting and logging
* improve word matching for languages with no word boundaries
* POIs with addresses inherited from surrounding building are no
longer returned in the address layer
* avoid creating a directory for the tokenizer when not needed
* replace behave with pytest-bdd for BDD testing
* refactoring and performance improvements to query parsing
* various smaller updates to styles
* remove English as default language for South Korea
* remove Japanese word variants
* updated country names for Norwegians (thanks @Johannes-Andersen)
* remove support for deprecated osm2pgsql gazetteer style
* fix updating of importances (also needs to update search_name table)
* fix query for deletable endpoint to use index again
* fix reindexing of contained places when a boundary is deleted and reinstated
* fix difference computation error when updating postcodes
* bracket handling sanitizer no longer strips bracket terms in the middle of
name
* reduce precision of stored coordinates to 7-digits everywhere
* avoid ST_Relate as it seems buggy on some systems
* remove setting for logging queries in DB, no longer functional
* postcode updates no longer require a project directory (needed for tests)
* refactor locale handling code (thanks @anqixxx)
* code updates for newer Python (thanks @emmanuel-ferdman)
* better test coverage (thanks @asharmalik19)
* various fixes and improvements to documentation
(thanks @anqixxx, @dave-meyer, @hasandiwan)
5.1.0
* replace datrie with simple internal trie implementation
* add pattern-based postcode parser for queries,

View File

@@ -9,11 +9,11 @@ versions.
| Version | End of support for security updates |
| ------- | ----------------------------------- |
| 5.2.x | 2027-10-29 |
| 5.1.x | 2027-04-01 |
| 5.0.x | 2027-02-06 |
| 4.5.x | 2026-09-12 |
| 4.4.x | 2026-03-07 |
| 4.3.x | 2025-09-07 |
## Reporting a Vulnerability
@@ -32,8 +32,7 @@ description of the nature and severity of the issue. **
Patches for identified security issues are applied to all affected versions and
new minor versions are released. At the same time we release a statement at
the [Nominatim blog](https://nominatim.org/blog/) describing the nature of the
incident. Announcements will also be published at the
[geocoding mailinglist](https://lists.openstreetmap.org/listinfo/geocoding).
incident.
## List of Previous Incidents

View File

@@ -17,6 +17,18 @@ breaking changes. **Please read them before running the migration.**
and migrate to 4.3 first. Then you can migrate to the current
version. It is strongly recommended to do a reimport instead.
## 5.1.0 -> 5.2.0
### Lua import style: required extratags removed
Tags that are required by Nominatim as extratags are now always included
independent of what is defined in the style. The line
flex.add_for_extratags('required')
is no longer required in custom styles and will throw an error. Simply
remove the line from your style.
## 4.5.0 -> 5.0.0
### PHP frontend removed

View File

@@ -105,6 +105,13 @@ grouped by type.
Include geometry of result.
| Parameter | Value | Default |
|-----------| ----- | ------- |
| entrances | 0 or 1 | 0 |
When set to 1, include the tagged entrances in the result.
### Language of results
| Parameter | Value | Default |

View File

@@ -49,7 +49,7 @@ Only has an effect for JSON output formats.
| Parameter | Value | Default |
|-----------| ----- | ------- |
| addressdetails | 0 or 1 | 0 |
| addressdetails | 0 or 1 | 1 |
When set to 1, include a breakdown of the address into elements.
The exact content of the address breakdown depends on the output format.
@@ -77,6 +77,12 @@ that is available in the database, e.g. wikipedia link, opening hours.
When set to 1, include a full list of names for the result. These may include
language variants, older names, references and brand.
| Parameter | Value | Default |
|-----------| ----- | ------- |
| entrances | 0 or 1 | 0 |
When set to 1, include the tagged entrances in the result.
### Language of results

View File

@@ -60,6 +60,8 @@ The possible fields are:
* `namedetails` - dictionary with full list of available names including ref etc.
* `geojson`, `svg`, `geotext`, `geokml` - full geometry
(only with the appropriate `polygon_*` parameter)
* `entrances` - array of objects representing tagged entrances for the object, or
null if none are found (only with `entrances=1`)
## JSONv2
@@ -87,6 +89,8 @@ The properties object has the following fields:
* `extratags` - dictionary with additional useful tags like `website` or `maxspeed`
(only with `extratags=1`)
* `namedetails` - dictionary with full list of available names including ref etc.
* `entrances` - array of objects representing tagged entrances for the object, or
null if none are found (only with `entrances=1`)
Use `polygon_geojson` to output the full geometry of the object instead
of the centroid.
@@ -110,6 +114,8 @@ The following feature attributes are implemented:
* `admin` - list of localised names of administrative boundaries (only with `addressdetails=1`)
* `extra` - dictionary with additional useful tags like `website` or `maxspeed`
(only with `extratags=1`)
* `entrances` - array of objects representing tagged entrances for the object, or
null if none are found (only with `entrances=1`)
Use `polygon_geojson` to output the full geometry of the object instead
@@ -162,8 +168,8 @@ The place information can be found in the `result` element. The attributes of th
The full address of the result can be found in the content of the
`result` element as a comma-separated list.
Additional information requested with `addressdetails=1`, `extratags=1` and
`namedetails=1` can be found in extra elements.
Additional information requested with `addressdetails=1`, `extratags=1`,
`namedetails=1`, and `entrances=1` can be found in extra elements.
### Search and Lookup
@@ -224,9 +230,9 @@ be more than one. The attributes of that element contain:
When `addressdetails=1` is requested, the localised address parts appear
as subelements with the type of the address part.
Additional information requested with `extratags=1` and `namedetails=1` can
be found in extra elements as sub-element of `extratags` and `namedetails`
respectively.
Additional information requested with `extratags=1`, `namedetails=1`, and
`entrances=1` can be found in extra elements as sub-element of `extratags`,
`namedetails`, and `entrances` respectively.
## Notes on field values
@@ -303,3 +309,78 @@ with a designation label. Per default the following labels may appear:
They roughly correspond to the classification of the OpenStreetMap data
according to either the `place` tag or the main key of the object.
### entrances
Entrance details in the xml and json formats return the latitude and longitude
of the entrance, the osm node ID, the [type of
entrance](https://wiki.openstreetmap.org/wiki/Key:entrance), and any extra tags
associated with the entrance node.
* osm_id
* type
* lat
* lon
* extratags
They roughly correspond to the classification of the OpenStreetMap data
according to either the `place` tag or the main key of the object.
#### Example
##### JSON
[https://nominatim.openstreetmap.org/details?osmtype=W&osmid=32619803&entrances=1&format=json](https://nominatim.openstreetmap.org/details?osmtype=W&osmid=32619803&entrances=1&format=json)
```json
{
"place_id": 124325848,
"parent_place_id": 123936289,
"osm_type": "W",
"osm_id": 32619803,
"category": "shop",
"type": "supermarket",
"admin_level": 15,
"localname": "PENNY",
...
"entrances": [
{
"osm_id": 1733488238,
"type": "yes",
"lat": "51.0466704",
"lon": "12.8077106",
"extratags": {
"foot": "yes"
}
},
{
"osm_id": 1733488256,
"type": "main",
"lat": "51.0467197",
"lon": "12.8078448",
"extratags": {
"foot": "yes"
}
},
{
"osm_id": 1733498087,
"type": "exit",
"lat": "51.0467081",
"lon": "12.8078131",
"extratags": {
"foot": "yes"
}
},
{
"osm_id": 7914950851,
"type": "service",
"lat": "51.0468487",
"lon": "12.8075876",
"extratags": {
"access": "delivery"
}
}
]
}
```

View File

@@ -98,6 +98,12 @@ that is available in the database, e.g. wikipedia link, opening hours.
When set to 1, include a full list of names for the result. These may include
language variants, older names, references and brand.
| Parameter | Value | Default |
|-----------| ----- | ------- |
| entrances | 0 or 1 | 0 |
When set to 1, include the tagged entrances in the result.
### Language of results
@@ -146,7 +152,7 @@ In terms of address details the zoom levels are as follows:
| Parameter | Value | Default |
|-----------| ----- | ------- |
| layer | comma-separated list of: `address`, `poi`, `railway`, `natural`, `manmade` | _unset_ (no restriction) |
| layer | comma-separated list of: `address`, `poi`, `railway`, `natural`, `manmade` | `address,poi` |
The layer filter allows to select places by themes.
@@ -212,7 +218,7 @@ This overrides the specified machine readable format.
## Examples
* [https://nominatim.openstreetmap.org/reverse?format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1](https://nominatim.openstreetmap.org/reverse?format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1)
* [https://nominatim.openstreetmap.org/reverse?format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1&layer=address](https://nominatim.openstreetmap.org/reverse?format=xml&lat=52.5487429714954&lon=-1.81602098644987&zoom=18&addressdetails=1&layer=address)
```xml
<reversegeocode timestamp="Fri, 06 Nov 09 16:33:54 +0000" querystring="...">
@@ -235,7 +241,7 @@ This overrides the specified machine readable format.
##### Example with `format=jsonv2`
* [https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-34.44076&lon=-58.70521](https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-34.44076&lon=-58.70521)
* [https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-34.44076&lon=-58.70521&layer=address](https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-34.44076&lon=-58.70521&layer=address)
```json
{
@@ -267,7 +273,7 @@ This overrides the specified machine readable format.
##### Example with `format=geojson`
* [https://nominatim.openstreetmap.org/reverse?format=geojson&lat=44.50155&lon=11.33989](https://nominatim.openstreetmap.org/reverse?format=geojson&lat=44.50155&lon=11.33989)
* [https://nominatim.openstreetmap.org/reverse?format=geojson&lat=44.50155&lon=11.33989&layer=address](https://nominatim.openstreetmap.org/reverse?format=geojson&lat=44.50155&lon=11.33989&layer=address)
```json
{
@@ -319,7 +325,7 @@ This overrides the specified machine readable format.
##### Example with `format=geocodejson`
[https://nominatim.openstreetmap.org/reverse?format=geocodejson&lat=60.2299&lon=11.1663](https://nominatim.openstreetmap.org/reverse?format=geocodejson&lat=60.2299&lon=11.1663)
[https://nominatim.openstreetmap.org/reverse?format=geocodejson&lat=60.2299&lon=11.1663&layer=address](https://nominatim.openstreetmap.org/reverse?format=geocodejson&lat=60.2299&lon=11.1663&layer=address)
```json
{

View File

@@ -136,6 +136,12 @@ that is available in the database, e.g. wikipedia link, opening hours.
When set to 1, include a full list of names for the result. These may include
language variants, older names, references and brand.
| Parameter | Value | Default |
|-----------| ----- | ------- |
| entrances | 0 or 1 | 0 |
When set to 1, include the tagged entrances in the result.
### Language of results

View File

@@ -68,15 +68,16 @@ When Nominatim processes an OSM object, it looks for four kinds of tags:
The _main tags_ classify what kind of place the OSM object represents. One
OSM object can have more than one main tag. In such case one database entry
is created for each main tag. _Name tags_ represent searchable names of the
place. _Address tags_ are used to compute the address hierarchy of the place.
place. _Address tags_ are used to compute the address information of the place.
Address tags are used for searching and for creating a display name of the place.
_Extra tags_ are any tags that are not directly related to search but
contain interesting additional information.
contain interesting additional information. These are just saved in the database
and may be returned with the result [on request](../api/Search.md#output-details).
!!! danger
Some tags in the extratags category are used by Nominatim to better
classify the place. You want to make sure these are always present
in custom styles.
classify the place. These tags will always be added, independent of
any settings in the style.
Configuring the style means deciding which key and/or key/value is used
in which category.
@@ -266,11 +267,7 @@ in turn take precedence over prefix matches.
##### Presets
| Name | Description |
| :----- | :---------- |
| required | Tags that Nominatim will use for various computations when present in extratags. Always include these. |
In addition, all [presets from ignored tags](#presets_1) are accepted.
Accepts all [presets from ignored tags](#presets_1).
### General pre-filtering
@@ -426,6 +423,56 @@ is added for extratags.
already delete the tiger tags with `set_prefilters()` because that
would remove tiger:county before the address tags are processed.
## Filling additional tables
Most of the OSM objects are saved in the main `place` table for further
processing. In addition to that, there are some smaller tables that save
specialised information. The content of these tables can be customized as
well.
### Entrance table
The table `place_entrance` saves information about OSM nodes that represent
an entrance. This data is later mingled with buildings and other areas and
can be returned [on request](../api/Search.md#output-details). The table
saves the type of entrance as well as a set of custom extra tags.
The function `set_entrance_filter()` can be used to customize the table's
content.
When called without any parameter, then filling the entrance table will be
disabled. When called with a preset name, the appropriate preset will be
applied.
To create a custom configuration, call the function
with a table with the following fields:
* __main_tags__ is a list of tags that mark an entrance node. The value of the
first tag found in the list will be used as the entrance type.
* __extra_include__ is an optional list of tags to be added to the extratags
for this entrance. When left out, all tags except for the ones defined
in 'main_tags' will be included. To disable saving of extra tags, set
this to the empty list.
* __extra_exclude__ defines an optional list of tags to drop before including
the remaining tags as extratags. Note that the tags defined in 'main_tags'
will always be excluded, independently of this setting.
To have even more fine-grained control over the output, you can also hand
in a callback for processing entrance information. The callback function
receives a single parameter, the
[osm2pgsql object](https://osm2pgsql.org/doc/manual.html#processing-callbacks).
This object itself must not be modified. The callback should return either
`nil` when the object is not an entrance. Or it returns a table with a
mandatory `entrance` field containing a string with the type of entrance
and an optional `extratags` field with a simple key-value table of extra
information.
##### Presets
| Name | Description |
| :----- | :---------- |
| default | Standard configuration used with `full` and `extratags` styles. |
## Customizing osm2pgsql callbacks
osm2pgsql expects the flex style to implement three callbacks, one process

View File

@@ -648,21 +648,53 @@ See also [NOMINATIM_DEFAULT_LANGUAGE](#nominatim_default_language).
| **Description:** | Log requests into a file |
| **Format:** | path |
| **Default:** | _empty_ (logging disabled) |
| **After Changes:** | run `nominatim refresh --website` |
Enable logging of requests into a file with this setting by setting the log
file where to log to. A relative file name is assumed to be relative to
the project directory.
the project directory. The format of the log output can be set
with NOMINATIM_LOG_FORMAT.
#### NOMINATIM_LOG_FORMAT
The entries in the log file have the following format:
| Summary | |
| -------------- | --------------------------------------------------- |
| **Description:** | Log requests into a file |
| **Format:** | [Python String Format](https://docs.python.org/3/library/string.html#formatstrings) string |
| **Default:** | `[{start}] {total_time:.4f} {results_total} {endpoint} "{query_string}"` |
<request time> <execution time in s> <number of results> <type> "<query string>"
Describes the content of a log line for a single request. The format
must be readable by Python's format function. Nominatim provides a number
of metrics than can be logged. The default set of metrics is the following:
/// html | div.simple-table
| name | type | Description |
| --------------- | ------ | ------------|
| start | time | Point in time when the request arrived. |
| end | time | Point in time when the request was done. |
| query_start | time | Point in time when processing started. |
| total_time | float | Total time in seconds to handle the request. |
| wait_time | float | Time in seconds the request waited for a database connection to be available. |
| query_time | float | Total time in seconds to process the request once a connection was available. |
| results_total | int | Number of results found. |
| endpoint | string | API endpoint used. |
| query_string | string | Raw query string received. |
///
Variables of type 'time' contain a UTC timestamp string in ISO format.
Nominatim also exposes additional metrics to help with development. These
are subject to change between versions:
/// html | div.simple-table
| name | type | Description |
| ------------------------- | ------ | ------------|
| search_rounds | int | Total number of searches executed for the request. |
| search_min_penalty | float | Minimal possible penalty for the request. |
| search_first_result_round | int | Number of first search to yield any result. |
| search_min_result_penalty | float | Minimal penalty by a result found. |
| search_best_penalty_round | int | Search round that yielded the best penalty result. |
///
Request time is the time when the request was started. The execution time is
given in seconds and includes the entire time the query was queued and executed
in the frontend.
type contains the name of the endpoint used.
#### NOMINATIM_DEBUG_SQL

View File

@@ -39,3 +39,9 @@ th {
filter: grayscale(100%);
font-size: 80%;
}
.simple-table table:not([class]) th,
.simple-table table:not([class]) td {
padding: 2px 4px;
background: white;
}

View File

@@ -268,13 +268,17 @@ name out of it:
'Brugges'
```
The `address_row` field has a helper function to apply the function to all
its members and save the result in the `local_name` field. It also returns
all the localized names as a convenient simple list. This list can be used
to create a human-readable output:
The `address_row` field has a helper function to compute the display name for each Address Line
component based on its `local_name` field. This is then utilized by the overall `result` object,
which has a helper function to apply the function to all its address_row members and saves
the result in the `locale_name` field.
However, in order to set this `local_name` field in a preferred language, you must use the `Locale`
object which contains the function `localize_results`, which explicitly sets each `local_name field`.
``` python
>>> address_parts = results[0].address_rows.localize(locale)
>>> Locales().localize_results(results)
>>> address_parts = results[0].address_rows
>>> print(', '.join(address_parts))
Bruges, Flandre-Occidentale, Flandre, Belgique
```

View File

@@ -49,7 +49,11 @@ its address.
## Localization
Results are always returned with the full list of available names.
Results are always returned with the full list of available names. However, the
default `locale_name` must be explicitly set using the `localize` function within
`Locales`. This parses through the full list of available names to find the one
most preferred by the user. Once this is set, the user can simply use the
`display_name` field within a `Result` object to retrive the localized name.
### Locale

View File

@@ -29,7 +29,9 @@ local NAME_FILTER = nil
local ADDRESS_TAGS = {}
local ADDRESS_FILTER = nil
local EXTRATAGS_FILTER
local REQUIRED_EXTRATAGS_FILTER
local POSTCODE_FALLBACK = true
local ENTRANCE_FUNCTION = nil
-- This file can also be directly require'd instead of running it under
-- the themepark framework. In that case the first parameter is usually
@@ -40,37 +42,51 @@ if type(themepark) ~= 'table' then
themepark = nil
end
-- The single place table.
local place_table_definition = {
name = "place",
ids = { type = 'any', id_column = 'osm_id', type_column = 'osm_type' },
columns = {
{ column = 'class', type = 'text', not_null = true },
{ column = 'type', type = 'text', not_null = true },
{ column = 'admin_level', type = 'smallint' },
{ column = 'name', type = 'hstore' },
{ column = 'address', type = 'hstore' },
{ column = 'extratags', type = 'hstore' },
{ column = 'geometry', type = 'geometry', projection = 'WGS84', not_null = true },
-- The place tables carry the raw OSM information.
local table_definitions = {
place = {
ids = { type = 'any', id_column = 'osm_id', type_column = 'osm_type' },
columns = {
{ column = 'class', type = 'text', not_null = true },
{ column = 'type', type = 'text', not_null = true },
{ column = 'admin_level', type = 'smallint' },
{ column = 'name', type = 'hstore' },
{ column = 'address', type = 'hstore' },
{ column = 'extratags', type = 'hstore' },
{ column = 'geometry', type = 'geometry', projection = 'WGS84', not_null = true },
},
indexes = {}
},
data_tablespace = os.getenv("NOMINATIM_TABLESPACE_PLACE_DATA"),
index_tablespace = os.getenv("NOMINATIM_TABLESPACE_PLACE_INDEX"),
indexes = {}
place_entrance = {
ids = { type = 'node', id_column = 'osm_id' },
columns = {
{ column = 'type', type = 'text', not_null = true },
{ column = 'extratags', type = 'hstore' },
{ column = 'geometry', type = 'geometry', projection = 'WGS84', not_null = true }
},
indexes = {}
}
}
local insert_row
local insert_row = {}
local script_path = debug.getinfo(1, "S").source:match("@?(.*/)")
local PRESETS = loadfile(script_path .. 'presets.lua')()
if themepark then
themepark:add_table(place_table_definition)
insert_row = function(columns)
themepark:insert('place', columns, {}, {})
end
else
local place_table = osm2pgsql.define_table(place_table_definition)
insert_row = function(columns)
place_table:insert(columns)
for table_name, table_definition in pairs(table_definitions) do
table_definition.name = table_name
table_definition.data_tablespace = os.getenv("NOMINATIM_TABLESPACE_PLACE_DATA")
table_definition.index_tablespace = os.getenv("NOMINATIM_TABLESPACE_PLACE_INDEX")
if themepark then
themepark:add_table(table_definition)
insert_row[table_name] = function(columns)
themepark:insert(table_name, columns, {}, {})
end
else
local place_table = osm2pgsql.define_table(table_definition)
insert_row[table_name] = function(columns)
place_table:insert(columns)
end
end
end
@@ -150,24 +166,6 @@ local function address_fallback(place)
return place:clone{names=names}
end
--------- Built-in extratags transformation functions ---------------
local function default_extratags_filter(p, k)
-- Default handling is to copy over place tag for boundaries.
-- Nominatim needs this.
if k ~= 'boundary' or p.intags.place == nil then
return p.extratags
end
local extra = { place = p.intags.place }
for kin, vin in pairs(p.extratags) do
extra[kin] = vin
end
return extra
end
EXTRATAGS_FILTER = default_extratags_filter
----------------- other helper functions -----------------------------
local function lookup_prefilter_classification(k, v)
@@ -429,18 +427,25 @@ function Place:write_row(k, v)
return 0
end
local extratags = EXTRATAGS_FILTER(self, k, v)
if not (extratags and next(extratags)) then
extratags = nil
end
local extra = EXTRATAGS_FILTER(self, k, v) or {}
insert_row{
for tk, tv in pairs(self.object.tags) do
if REQUIRED_EXTRATAGS_FILTER(tk, tv) and extra[tk] == nil then
extra[tk] = tv
end
end
if extra and next(extra) == nil then
extra = nil
end
insert_row.place{
class = k,
type = v,
admin_level = self.admin_level,
name = next(self.names) and self.names,
address = next(self.address) and self.address,
extratags = extratags,
extratags = extra,
geometry = self.geometry
}
@@ -593,6 +598,16 @@ end
-- Process functions for all data types
function module.process_node(object)
if ENTRANCE_FUNCTION ~= nil then
local entrance_info = ENTRANCE_FUNCTION(object)
if entrance_info ~= nil then
insert_row.place_entrance{
type = entrance_info.entrance,
extratags = entrance_info.extratags,
geometry = object:as_point()
}
end
end
local function geom_func(o)
return o:as_point()
@@ -687,6 +702,15 @@ function module.process_tags(o)
end
end
--------- Extratags post-processing functions ---------------
local function default_extratags_filter(p, k)
return p.extratags
end
EXTRATAGS_FILTER = default_extratags_filter
REQUIRED_EXTRATAGS_FILTER = module.tag_match(PRESETS.EXTRATAGS)
--------- Convenience functions for simple style configuration -----------------
function module.set_prefilters(data)
@@ -717,7 +741,7 @@ end
function module.add_for_extratags(data)
if type(data) == 'string' then
local preset = data
data = PRESETS.EXTRATAGS[data] or PRESETS.IGNORE_KEYS[data]
data = PRESETS.IGNORE_KEYS[data]
if data == nil then
error('Unknown preset for extratags: ' .. preset)
end
@@ -917,6 +941,99 @@ function module.set_relation_types(data)
end
end
function module.set_entrance_filter(data)
if data == nil or type(data) == 'function' then
ENTRANCE_FUNCTION = data
return nil
end
if type(data) == 'string' then
local preset = data
data = PRESETS.ENTRANCE_TABLE[data]
if data == nil then
error('Unknown preset for entrance table: ' .. preset)
end
end
ENTRANCE_FUNCTION = nil
if data.main_tags ~= nil and next(data.main_tags) ~= nil then
if data.extra_include ~= nil and next(data.extra_include) == nil then
-- shortcut: no extra tags requested
ENTRANCE_FUNCTION = function(o)
for _, v in ipairs(data.main_tags) do
if o.tags[v] ~= nil then
return {entrance = o.tags[v]}
end
end
return nil
end
else
if data.extra_include ~= nil then
local tags = {}
for _, v in pairs(data.extra_include) do
tags[v] = true
end
if data.extra_exclude ~= nil then
for _, v in pairs(data.extra_exclude) do
tags[v] = nil
end
end
for _, v in pairs(data.main_tags) do
tags[v] = nil
end
ENTRANCE_FUNCTION = function(o)
for _, v in ipairs(data.main_tags) do
if o.tags[v] ~= nil then
local entrance = o.tags[v]
local extra = {}
for k, v in pairs(tags) do
extra[k] = o.tags[k]
end
if next(extra) == nil then
extra = nil
end
return {entrance = entrance, extratags = extra}
end
end
return nil
end
else
local notags = {}
if data.extra_exclude ~= nil then
for _, v in pairs(data.extra_exclude) do
notags[v] = 1
end
end
for _, v in pairs(data.main_tags) do
notags[v] = 1
end
ENTRANCE_FUNCTION = function(o)
for _, v in ipairs(data.main_tags) do
if o.tags[v] ~= nil then
local entrance = o.tags[v]
local extra = {}
for k, v in pairs(o.tags) do
if notags[k] ~= 1 then
extra[k] = v
end
end
if next(extra) == nil then
extra = nil
end
return {entrance = entrance, extratags = extra}
end
end
return nil
end
end
end
end
end
function module.get_taginfo()
return {main = MAIN_KEYS, name = NAMES, address = ADDRESS_TAGS}

View File

@@ -200,6 +200,8 @@ module.MAIN_TAGS_POIS = function (group)
leisure = {'always',
nature_reserve = 'fallback',
swimming_pool = 'named',
garden = 'named',
common = 'named',
no = group},
lock = {yes = lock_transform},
man_made = {pier = 'always',
@@ -362,7 +364,7 @@ module.IGNORE_KEYS.metatags = {'note', 'note:*', 'source', 'source:*', '*source'
'tiger:cfcc', 'tiger:reviewed', 'nysgissam:*',
'NHD:*', 'nhd:*', 'gnis:*', 'geobase:*', 'yh:*',
'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*',
'lacounty:*', 'ref:linz:*',
'lacounty:*', 'ref:linz:*', 'survey:*',
'ref:bygningsnr', 'ref:ruian:*', 'building:ruian:type',
'type',
'is_in:postcode'}
@@ -373,10 +375,15 @@ module.IGNORE_KEYS.address = {'addr:street:*', 'addr:city:*', 'addr:district:*',
'addr:province:*', 'addr:subdistrict:*', 'addr:place:*',
'addr:TW:dataset'}
-- Extra tags (prefiltered away)
-- INTERNAL: Required extra tags
module.EXTRATAGS = {}
module.EXTRATAGS = {keys = {'wikipedia', 'wikipedia:*', 'wikidata', 'capital'}}
module.EXTRATAGS.required = {'wikipedia', 'wikipedia:*', 'wikidata', 'capital'}
-- Defaults for the entrance table
module.ENTRANCE_TABLE = {}
module.ENTRANCE_TABLE.default = {main_tags = {'entrance', 'routing:entrance'},
extra_exclude = module.IGNORE_KEYS.metatags}
return module

View File

@@ -11,7 +11,6 @@ flex.set_address_tags('core')
flex.modify_address_tags('houses')
flex.ignore_keys('metatags')
flex.add_for_extratags('required')
if cfg.with_extratags then
flex.set_unused_handling{delete_keys = {'tiger:*'}}

View File

@@ -8,7 +8,6 @@ flex.set_address_tags('core')
flex.set_postcode_fallback(false)
flex.ignore_keys('metatags')
flex.add_for_extratags('required')
if cfg.with_extratags then
flex.set_unused_handling{delete_keys = {'tiger:*'}}

View File

@@ -20,7 +20,6 @@ flex.set_address_tags('core')
flex.modify_address_tags('houses')
flex.ignore_keys('metatags')
flex.add_for_extratags('required')
if cfg.with_extratags then
flex.set_unused_handling{delete_keys = {'tiger:*'}}
@@ -30,3 +29,5 @@ else
flex.ignore_keys('name')
flex.ignore_keys('address')
end
flex.set_entrance_filter('default')

View File

@@ -10,7 +10,6 @@ flex.set_address_tags('core')
flex.set_postcode_fallback(false)
flex.ignore_keys('metatags')
flex.add_for_extratags('required')
if cfg.with_extratags then
flex.set_unused_handling{delete_keys = {'tiger:*'}}

View File

@@ -338,6 +338,11 @@ BEGIN
END IF;
END IF;
-- When an existing way is updated, recalculate entrances
IF existingplacex.osm_type = 'W' and (existingplacex.rank_search > 27 or existingplacex.class IN ('landuse', 'leisure')) THEN
PERFORM place_update_entrances(existingplacex.place_id, existingplacex.osm_id);
END IF;
-- Abort the insertion (we modified the existing place instead)
RETURN NULL;
END;

View File

@@ -530,6 +530,7 @@ CREATE OR REPLACE FUNCTION insert_addresslines(obj_place_id BIGINT,
AS $$
DECLARE
address_havelevel BOOLEAN[];
place_min_distance FLOAT[];
location_isaddress BOOLEAN;
current_boundary GEOMETRY := NULL;
@@ -545,6 +546,7 @@ BEGIN
nameaddress_vector := '{}'::int[];
address_havelevel := array_fill(false, ARRAY[maxrank]);
place_min_distance := array_fill(1.0, ARRAY[maxrank]);
FOR location IN
SELECT apl.*, key
@@ -575,6 +577,10 @@ BEGIN
END IF;
END IF;
IF location.isguess and location.distance < place_min_distance[location.rank_address] THEN
place_min_distance[location.rank_address] := location.distance;
END IF;
INSERT INTO place_addressline (place_id, address_place_id, fromarea,
isaddress, distance, cached_rank_address)
VALUES (obj_place_id, location.place_id, not location.isguess,
@@ -602,6 +608,16 @@ BEGIN
-- If this is the first item in the rank, then assume it is the address.
location_isaddress := not address_havelevel[location.rank_address];
-- Ignore guessed places when they are too far away compared to similar closer ones.
IF location.isguess THEN
CONTINUE WHEN not location_isaddress
AND location.distance > 2 * place_min_distance[location.rank_address];
IF location.distance < place_min_distance[location.rank_address] THEN
place_min_distance[location.rank_address] := location.distance;
END IF;
END IF;
-- Further sanity checks to ensure that the address forms a sane hierarchy.
IF location_isaddress THEN
IF location.isguess and current_node_area is not NULL THEN
@@ -874,6 +890,11 @@ BEGIN
-- Compute a preliminary centroid.
NEW.centroid := get_center_point(NEW.geometry);
-- Record the entrance node locations
IF NEW.osm_type = 'W' and (NEW.rank_search > 27 or NEW.class IN ('landuse', 'leisure')) THEN
PERFORM place_update_entrances(NEW.place_id, NEW.osm_id);
END IF;
-- recalculate country and partition
IF NEW.rank_search = 4 AND NEW.address is not NULL AND NEW.address ? 'country' THEN
-- for countries, believe the mapped country code,

View File

@@ -623,3 +623,34 @@ BEGIN
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION place_update_entrances(placeid BIGINT, osmid BIGINT)
RETURNS INTEGER
AS $$
DECLARE
entrance RECORD;
osm_ids BIGINT[];
BEGIN
osm_ids := '{}';
FOR entrance in SELECT osm_id, type, geometry, extratags
FROM place_entrance
WHERE osm_id IN (SELECT unnest(nodes) FROM planet_osm_ways WHERE id=osmid)
LOOP
osm_ids := array_append(osm_ids, entrance.osm_id);
INSERT INTO placex_entrance (place_id, osm_id, type, location, extratags)
VALUES (placeid, entrance.osm_id, entrance.type, entrance.geometry, entrance.extratags)
ON CONFLICT (place_id, osm_id) DO UPDATE
SET type = excluded.type, location = excluded.location, extratags = excluded.extratags;
END LOOP;
IF array_length(osm_ids, 1) > 0 THEN
DELETE FROM placex_entrance WHERE place_id=placeid AND NOT osm_id=ANY(osm_ids);
ELSE
DELETE FROM placex_entrance WHERE place_id=placeid;
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;

View File

@@ -244,6 +244,25 @@ CREATE UNIQUE INDEX idx_postcode_id ON location_postcode USING BTREE (place_id)
CREATE INDEX idx_postcode_geometry ON location_postcode USING GIST (geometry) {{db.tablespace.address_index}};
GRANT SELECT ON location_postcode TO "{{config.DATABASE_WEBUSER}}" ;
-- Table to store location of entrance nodes
DROP TABLE IF EXISTS placex_entrance;
CREATE TABLE placex_entrance (
place_id BIGINT NOT NULL,
osm_id BIGINT NOT NULL,
type TEXT NOT NULL,
location GEOMETRY(Point, 4326) NOT NULL,
extratags HSTORE
);
CREATE UNIQUE INDEX idx_placex_entrance_place_id_osm_id ON placex_entrance
USING BTREE (place_id, osm_id) {{db.tablespace.search_index}};
GRANT SELECT ON placex_entrance TO "{{config.DATABASE_WEBUSER}}" ;
-- Create an index on the place table for lookups to populate the entrance
-- table
CREATE INDEX IF NOT EXISTS idx_placex_entrance_lookup ON place
USING BTREE (osm_id)
WHERE class IN ('routing:entrance', 'entrance');
DROP TABLE IF EXISTS import_polygon_error;
CREATE TABLE import_polygon_error (
osm_id BIGINT,

View File

@@ -67,6 +67,7 @@ markdown_extensions:
- codehilite
- admonition
- pymdownx.superfences
- pymdownx.blocks.html
- pymdownx.tabbed:
alternate_style: true
- def_list

View File

@@ -15,6 +15,7 @@ classifiers = [
"Operating System :: OS Independent",
]
dependencies = [
"async-timeout",
"python-dotenv",
"pyYAML>=5.1",
"SQLAlchemy>=1.4.31",

View File

@@ -21,7 +21,7 @@
"croft" : 20,
"subdivision" : 22,
"allotments" : 22,
"neighbourhood" : [20, 22],
"neighbourhood" : 24,
"quarter" : [20, 22],
"isolated_dwelling" : [22, 25],
"farm" : [22, 25],
@@ -48,17 +48,20 @@
"" : [25, 0]
},
"landuse" : {
"residential" : 22,
"farm" : 22,
"farmyard" : 22,
"industrial" : 22,
"commercial" : 22,
"allotments" : 22,
"retail" : 22,
"" : [22, 0]
"residential" : 24,
"farm" : 24,
"farmyard" : 24,
"industrial" : 24,
"commercial" : 24,
"allotments" : 24,
"retail" : 24,
"" : [24, 0]
},
"leisure" : {
"park" : [24, 0]
"park" : [24, 0],
"nature_reserve" : [24, 0],
"garden": [25, 0],
"common": [25, 0]
},
"natural" : {
"peak" : [18, 0],
@@ -236,6 +239,17 @@
"administrative11" : 20
}
}
},
{ "countries" : ["jp"],
"tags" : {
"boundary" : {
"administrative7" : 16,
"administrative8" : 18,
"administrative9" : 20,
"administrative10" : 22,
"administrative11" : 24
}
}
}
]

View File

@@ -97,7 +97,6 @@ name:
na: Andorra
ne: एण्डोरा
nl: Andorra
nn: Andorra
"no": Andorra
nv: Andówa
oc: Andòrra

View File

@@ -74,6 +74,7 @@ name:
mt: Emirati Għarab Magħquda
my: အာရပ်စော်ဘွားများပြည်ထောင်စုနိုင်ငံ
na: Emireitit Arabiya
nb: De forente arabiske emirater
ne: संयुक्त अरब इमिरेट्स
nl: Verenigde Arabische Emiraten
nn: Dei sameinte arabiske emirata

View File

@@ -96,7 +96,6 @@ name:
na: Apeganitan
ne: अफगानिस्तान
nl: Afghanistan
nn: Afghanistan
"no": Afghanistan
oc: Afganistan
om: Afgaanistaan

View File

@@ -86,10 +86,8 @@ name:
mt: Antigwa u Barbuda
my: အင်တီဂွါနှင့် ဘာဘူဒါ
na: Antigua me Barbuda
nb: Antigua og Barbuda
ne: एन्टिगुआ र बर्बुडा
nl: Antigua en Barbuda
nn: Antigua og Barbuda
"no": Antigua og Barbuda
nv: Antíígwa dóó Hashkʼaan Bikéyah Yázhí
oc: Antigua e Barbuda

View File

@@ -50,7 +50,6 @@ name:
ms: Anguilla
ne: एन्गुला
nl: Anguilla
nn: Anguilla
"no": Anguilla
oc: Anguilla
pa: ਐਂਗੁਈਲਾ

View File

@@ -101,7 +101,6 @@ name:
na: Arbainiya
ne: अल्बानिया
nl: Albanië
nn: Albania
"no": Albania
nv: Dziłigaii Bikéyah
oc: Albania

View File

@@ -99,7 +99,6 @@ name:
na: Arminiya
ne: आर्मेनिया
nl: Armenië
nn: Armenia
"no": Armenia
nv: Aooméénii Bikéyah
oc: Armenia

View File

@@ -90,7 +90,6 @@ name:
na: Angora
ne: अंगोला
nl: Angola
nn: Angola
"no": Angola
nv: Angóola
ny: Angola

View File

@@ -99,7 +99,6 @@ name:
na: Ardjentina
ne: अर्जेन्टिना
nl: Argentinië
nn: Argentina
"no": Argentina
nv: Béésh Łigaii Bikéyah
oc: Argentina

View File

@@ -93,6 +93,7 @@ name:
mt: Awstrija
my: သြစတြီးယားနိုင်ငံ
na: Oteriya
nb: Østerrike
ne: अष्ट्रीया
nl: Oostenrijk
nn: Austerrike

View File

@@ -94,7 +94,6 @@ name:
na: Otereiriya
ne: अष्ट्रेलिया
nl: Australië
nn: Australia
"no": Australia
nv: Nahatʼeʼiitsoh Bikéyah
oc: Austràlia

View File

@@ -96,10 +96,8 @@ name:
mt: Ażerbajġan
my: အဇာဘိုင်ဂျန်နိုင်ငံ
na: Aderbaidjan
nb: Aserbajdsjan
ne: अजरबैजान
nl: Azerbeidzjan
nn: Aserbajdsjan
"no": Aserbajdsjan
nv: Azééwii Bikéyah
ny: Azerbaijan

View File

@@ -94,7 +94,6 @@ name:
na: Boteniya me Erdegobina
ne: बोस्निया र हर्जगोभिना
nl: Bosnië en Herzegovina
nn: Bosnia-Hercegovina
"no": Bosnia-Hercegovina
nv: Bosna dóó Hetsog Bikéyah
oc: Bòsnia e Ercegovina

View File

@@ -77,7 +77,6 @@ name:
na: Barbadot
ne: बार्बाडोस
nl: Barbados
nn: Barbados
"no": Barbados
oc: Barbados
om: Baarbeedoos

View File

@@ -29,6 +29,7 @@ name:
lt: Bangladešas
lv: Bangladeša
mn: Бангладеш
"no": Bangladesh
pl: Bangladesz
pt: Bangladesh
ru: Бангладеш

View File

@@ -95,10 +95,8 @@ name:
mt: Belġju
my: ဘယ်လ်ဂျီယမ်နိုင်ငံ
na: Berdjiyum
nb: Belgia
ne: बेल्जियम
nl: België
nn: Belgia
"no": Belgia
oc: Belgica
om: Beeljiyeem

View File

@@ -88,7 +88,6 @@ name:
na: Burkinabato
ne: बुर्किना फासो
nl: Burkina Faso
nn: Burkina Faso
"no": Burkina Faso
oc: Burkina Faso
om: Burkinaa Faasoo

View File

@@ -93,7 +93,6 @@ name:
na: Borgeriya
ne: बुल्गेरिया
nl: Bulgarije
nn: Bulgaria
"no": Bulgaria
nv: Bálgaa Bikéyah
oc: Bulgaria

View File

@@ -91,7 +91,6 @@ name:
na: Bahrain
ne: बहराइन
nl: Bahrein
nn: Bahrain
"no": Bahrain
oc: Bahrayn
om: Baahireen

View File

@@ -88,7 +88,6 @@ name:
na: Burundi
ne: बुरूण्डी
nl: Burundi
nn: Burundi
"no": Burundi
oc: Burundi
om: Buruundii

View File

@@ -91,7 +91,6 @@ name:
na: Benin
ne: बेनिन
nl: Benin
nn: Benin
"no": Benin
oc: Benin
om: Beeniin

View File

@@ -25,6 +25,7 @@ name:
lv: Bermudu salas
mk: Бермуда
mn: Бермудын Арал
"no": Bermuda
oc: Bermudas
pl: Bermudy
pt: Bermudas

View File

@@ -91,7 +91,6 @@ name:
na: Brunei
ne: ब्रुनेई
nl: Brunei
nn: Brunei
"no": Brunei
ny: Brunei
oc: Brunei

View File

@@ -94,7 +94,6 @@ name:
na: Boribiya
ne: बोलिभिया
nl: Bolivia
nn: Bolivia
"no": Bolivia
nv: Bolíbiya
oc: Bolívia

View File

@@ -99,7 +99,6 @@ name:
na: Bradir
ne: ब्राजिल
nl: Brazilië
nn: Brasil
"no": Brasil
nv: Bwazííl
oc: Brasil

View File

@@ -85,7 +85,6 @@ name:
na: Bahamat
ne: बहामस
nl: Bahama's
nn: Bahamas
"no": Bahamas
oc: Las Bahamas
om: Bahamaas

View File

@@ -92,7 +92,6 @@ name:
na: Butan
ne: भूटान
nl: Bhutan
nn: Bhutan
"no": Bhutan
nv: Bikéyah
oc: Botan

View File

@@ -90,7 +90,6 @@ name:
na: Botwana
ne: बोत्स्वाना
nl: Botswana
nn: Botswana
"no": Botswana
nv: Tswana Dineʼé Bikéyah
oc: Botswana

View File

@@ -83,8 +83,7 @@ name:
na: Berarut
ne: बेलारुस
nl: Wit-Rusland
nn: Kviterussland
"no": Hviterussland
"no": Belarus
oc: Bielorussia
or: ବେଲାଋଷ
os: Белорусси

View File

@@ -85,7 +85,6 @@ name:
na: Berij
ne: बेलिज
nl: Belize
nn: Belize
"no": Belize
oc: Belize
om: Beliiz

View File

@@ -94,7 +94,6 @@ name:
na: Kanada
ne: क्यानाडा
nl: Canada
nn: Canada
"no": Canada
nv: Deeteel Bikéyah
oc: Canadà

View File

@@ -74,7 +74,6 @@ name:
na: Ripubrikit Engame Kongo
ne: प्रजातान्त्रिक गणतन्त्र कंगो
nl: Democratische Republiek Congo
nn: Den demokratiske republikken Kongo
"no": Den demokratiske republikken Kongo
nv: Kéyah Káango Shádiʼááhjí Siʼánígíí
oc: Republica Democratica de Còngo

View File

@@ -72,6 +72,7 @@ name:
mt: Repubblika Ċentru-Afrikana
my: ဗဟိုအာဖရိကသမ္မတနိုင်ငံ
na: Ripubrikin Aprika Yugaga
nb: Den sentralafrikanske republikk
ne: मध्य अफ्रिकी गणतन्त्र
nl: Centraal-Afrikaanse Republiek
nn: Den sentralafrikanske republikken

View File

@@ -70,7 +70,6 @@ name:
na: Ripubrikin Kongo
ne: कङ्गो
nl: Congo-Brazzaville
nn: Kongo-Brazzaville
"no": Republikken Kongo
nv: Kéyah Káango Náhookǫsjí Siʼánígíí
oc: Republica de Còngo

View File

@@ -84,7 +84,6 @@ name:
na: Switzerland
ne: स्विजरल्याण्ड
nl: Zwitserland
nn: Sveits
"no": Sveits
nv: Swis Bikéyah
oc: Soïssa

View File

@@ -75,6 +75,7 @@ name:
mt: Kosta tal-Avorju
my: အိုင်ဗရီကို့စ်နိုင်ငံ
na: Aibori Kot
nb: Elfenbenskysten
ne: आइभरी कोस्ट
nl: Ivoorkust
nn: Elfenbeinskysten

View File

@@ -79,6 +79,7 @@ name:
ms: Kepulauan Cook
mt: Gżejjer Cook
my: ကွတ် ကျွန်းစု
nb: Cookøyene
ne: कुक टापु
nl: Cookeilanden
nn: Cookøyane

View File

@@ -103,7 +103,6 @@ name:
na: Tsire
ne: चिली
nl: Chili
nn: Chile
"no": Chile
nv: Chíilii
ny: Chile

View File

@@ -79,7 +79,6 @@ name:
na: Kamerun
ne: क्यामेरून
nl: Kameroen
nn: Kamerun
"no": Kamerun
nv: Táłtłʼááh Chʼosh Daadánígíí Bitooh
oc: Cameron

View File

@@ -101,10 +101,8 @@ name:
mt: Ċina
my: တရုတ်
na: Tsiene
nb: Kina
ne: चीन
nl: China
nn: Kina
"no": Kina
nv: Tsiiʼyishbizhí Dineʼé Bikéyah
ny: China

View File

@@ -82,7 +82,6 @@ name:
na: Korombiya
ne: कोलम्बिया
nl: Colombia
nn: Colombia
"no": Colombia
nv: Kolámbiya
oc: Colómbia

View File

@@ -81,7 +81,6 @@ name:
na: Kosta Rika
ne: कोस्टारिका
nl: Costa Rica
nn: Costa Rica
"no": Costa Rica
oc: Còsta Rica
om: Kostaa Rikaa

View File

@@ -78,7 +78,6 @@ name:
na: Kiuba
ne: क्युबा
nl: Cuba
nn: Cuba
"no": Cuba
nv: Kyóoba
oc: Cuba

View File

@@ -36,6 +36,7 @@ name:
mk: Зелен ’Рт
mn: Кабо-Верде
nl: Kaapverdië
"no": Kapp Verde
pl: Republika Zielonego Przylądka
pt: Cabo Verde
ru: Кабо-Верде

View File

@@ -77,10 +77,8 @@ name:
mt: Ċipru
my: ဆိုက်ပရပ်စ်နိုင်ငံ
na: Taiprus
nb: Kypros
ne: साइप्रस
nl: Cyprus
nn: Kypros
"no": Kypros
nv: Béésh Łichíiʼii Bikéyah
oc: Chipre

View File

@@ -93,7 +93,6 @@ name:
na: Ripubrikin Tsiek
ne: चेक गणतन्त्र
nl: Tsjechië
nn: Tsjekkia
"no": Tsjekkia
nv: Chek Bikéyah
oc: Republica Chèca

View File

@@ -99,7 +99,6 @@ name:
na: Djermani
ne: जर्मनी
nl: Duitsland
nn: Tyskland
"no": Tyskland
nv: Béésh Bichʼahii Bikéyah
oc: Alemanha

View File

@@ -74,7 +74,6 @@ name:
na: Djibuti
ne: जिबुटी
nl: Djibouti
nn: Djibouti
"no": Djibouti
nv: Jibótii
oc: Jiboti

View File

@@ -85,7 +85,6 @@ name:
na: Denemark
ne: डेनमार्क
nl: Denemarken
nn: Danmark
"no": Danmark
nv: Déinish Dineʼé Bikéyah
oc: Danemarc

View File

@@ -28,6 +28,7 @@ name:
lv: Dominika
mn: Доминика
nl: Dominica
"no": Dominica
pl: Dominika
pt: Dominica
ru: Доминика

View File

@@ -69,6 +69,7 @@ name:
mt: Repubblika Dominikana
my: ဒိုမီနီကန်သမ္မတနိုင်ငံ
na: Ripubrikin Dominika
nb: Den dominikanske republikk
ne: डोमिनिकन गणतन्त्र
nl: Dominicaanse Republiek
nn: Den dominikanske republikken

View File

@@ -93,7 +93,6 @@ name:
na: Ardjiriya
ne: अल्जेरिया
nl: Algerije
nn: Algerie
"no": Algerie
nv: Aljííya
ny: Algeria

View File

@@ -77,7 +77,6 @@ name:
na: Ekwador
ne: इक्वेडर
nl: Ecuador
nn: Ecuador
"no": Ecuador
nv: Kéyah Nahasdzáán Ałníiʼgi Siʼánígíí
oc: Eqüator

View File

@@ -85,7 +85,6 @@ name:
na: Etoniya
ne: इस्टोनिया
nl: Estland
nn: Estland
"no": Estland
nv: Ééstii Bikéyah
oc: Estònia

View File

@@ -97,7 +97,6 @@ name:
na: Idjipt
ne: मिश्र
nl: Egypte
nn: Egypt
"no": Egypt
nv: Ííjip
oc: Egipte

View File

@@ -10,7 +10,10 @@ name:
fr: République arabe sahraouie démocratique
it: Repubblica Araba Democratica dei Sahrawi
lt: Sacharos Arabų Demokratinė Respublika
nb: Den saharawiske arabiske demokratiske republikk
nl: Arabische Democratische Republiek Sahara
nn: Den saharawiske arabiske demokratiske republikken
"no": Den saharawiske arabiske demokratiske republikk
pt: República Árabe Saaraui Democrática
ru: Сахарская Арабская Демократическая Республика
ur: صحراوی عرب عوامی جمہوریہ

View File

@@ -77,7 +77,6 @@ name:
na: Eritrea
ne: एरिट्रिया
nl: Eritrea
nn: Eritrea
"no": Eritrea
oc: Eritrèa
om: Eritrea

View File

@@ -88,10 +88,8 @@ name:
mt: Spanja
my: စပိန်နိုင်ငံ
na: Pain
nb: Spania
ne: स्पेन
nl: Spanje
nn: Spania
"no": Spania
nv: Dibé Diníí Bikéyah
oc: Espanha

View File

@@ -92,7 +92,6 @@ name:
na: Itiyopiya
ne: इथियोपिया
nl: Ethiopië
nn: Etiopia
"no": Etiopia
nv: Iithiyópya
oc: Etiopia

View File

@@ -92,7 +92,6 @@ name:
na: Finland
ne: फिनल्याण्ड
nl: Finland
nn: Finland
"no": Finland
nv: Nahoditsʼǫʼłání
oc: Finlàndia

View File

@@ -73,7 +73,6 @@ name:
na: Bidji
ne: फिजी
nl: Fiji
nn: Fiji
"no": Fiji
nv: Fííjii
oc: Fiji

View File

@@ -68,6 +68,7 @@ name:
ms: Kepulauan Falkland (Islas Malvinas)
mt: Falkland Islands
my: ဖောက်ကလန် ကျွန်းစု
nb: Falklandsøyene
ne: फक्ल्याण्ड टापुहरू (इज्लास माल्भिनास)
nl: Falklandeilanden
nn: Falklandsøyane

View File

@@ -31,7 +31,7 @@ name:
lv: Mikronēzija
mn: Микронези
nl: Micronesia
"no": Mikronesia
"no": Mikronesiaføderasjonen
oc: Estats Federats de Micronesia
pl: Mikronezja
ru: Федеративные Штаты Микронезии

View File

@@ -63,6 +63,7 @@ name:
mr: फेरो द्वीपसमूह
ms: Kepulauan Faroe
mt: Gżejjer Faroe
nb: Færøyene
ne: फरोइ टापु
nl: Faeröer
nn: Færøyane

View File

@@ -96,7 +96,6 @@ name:
na: Prant
ne: फ्रान्स
nl: Frankrijk
nn: Frankrike
"no": Frankrike
nv: Dáághahii Dineʼé Bikéyah
oc: França

View File

@@ -77,7 +77,6 @@ name:
na: Gabun
ne: गाबोन
nl: Gabon
nn: Gabon
"no": Gabon
nv: Gabǫ́ǫ́
oc: Gabon

View File

@@ -98,7 +98,6 @@ name:
na: Ingerand
ne: संयुक्त अधिराज्य
nl: Verenigd Koninkrijk
nn: Storbritannia
"no": Storbritannia
nv: Tótaʼ Dineʼé Bikéyah
oc: Reialme Unit

View File

@@ -27,6 +27,7 @@ name:
lv: Grenāda
mn: Гренада
nl: Grenada
"no": Grenada
pl: Granada
pt: Granada
ru: Гренада

View File

@@ -78,7 +78,6 @@ name:
na: Djiordjiya
ne: जर्जिया (देश)
nl: Georgië
nn: Georgia
"no": Georgia
nv: Jóojah (Kéyah)
oc: Georgia (Caucàs)

View File

@@ -55,7 +55,6 @@ name:
ms: Guernsey
ne: गुर्न्जी
nl: Guernsey
nn: Guernsey
"no": Guernsey
oc: Guernesey
os: Гернси

View File

@@ -83,7 +83,6 @@ name:
na: Gana
ne: घाना
nl: Ghana
nn: Ghana
"no": Ghana
nv: Gáana
oc: Ghana

View File

@@ -63,7 +63,6 @@ name:
my: ဂျီဘရော်လ်တာ
ne: गिब्राल्टार
nl: Gibraltar
nn: Gibraltar
"no": Gibraltar
oc: Gibartar
or: ଜିବ୍ରାଲେଟର

View File

@@ -72,7 +72,6 @@ name:
my: ဂရင်းလန်ကျွန်း
ne: ग्रीनल्याण्ड
nl: Groenland
nn: Grønland
"no": Grønland
nv: Haʼaʼaahjí Hakʼaz Dineʼé Bikéyah
oc: Groenlàndia

Some files were not shown because too many files have changed in this diff Show More