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' python: '3.9'
- flavour: ubuntu-24 - flavour: ubuntu-24
ubuntu: 24 ubuntu: 24
postgresql: 17 postgresql: 18
lua: '5.3' lua: '5.3'
dependencies: apt dependencies: apt
python: 'builtin' python: 'builtin'
@@ -326,7 +326,7 @@ jobs:
- uses: ./Nominatim/.github/actions/setup-postgresql - uses: ./Nominatim/.github/actions/setup-postgresql
with: with:
postgresql-version: 17 postgresql-version: 18
- name: Install Python dependencies - name: Install Python dependencies
run: | 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 5.1.0
* replace datrie with simple internal trie implementation * replace datrie with simple internal trie implementation
* add pattern-based postcode parser for queries, * add pattern-based postcode parser for queries,

View File

@@ -9,11 +9,11 @@ versions.
| Version | End of support for security updates | | Version | End of support for security updates |
| ------- | ----------------------------------- | | ------- | ----------------------------------- |
| 5.2.x | 2027-10-29 |
| 5.1.x | 2027-04-01 | | 5.1.x | 2027-04-01 |
| 5.0.x | 2027-02-06 | | 5.0.x | 2027-02-06 |
| 4.5.x | 2026-09-12 | | 4.5.x | 2026-09-12 |
| 4.4.x | 2026-03-07 | | 4.4.x | 2026-03-07 |
| 4.3.x | 2025-09-07 |
## Reporting a Vulnerability ## 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 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 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 the [Nominatim blog](https://nominatim.org/blog/) describing the nature of the
incident. Announcements will also be published at the incident.
[geocoding mailinglist](https://lists.openstreetmap.org/listinfo/geocoding).
## List of Previous Incidents ## 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 and migrate to 4.3 first. Then you can migrate to the current
version. It is strongly recommended to do a reimport instead. 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 ## 4.5.0 -> 5.0.0
### PHP frontend removed ### PHP frontend removed

View File

@@ -105,6 +105,13 @@ grouped by type.
Include geometry of result. 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 ### Language of results
| Parameter | Value | Default | | Parameter | Value | Default |

View File

@@ -49,7 +49,7 @@ Only has an effect for JSON output formats.
| Parameter | Value | Default | | 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. When set to 1, include a breakdown of the address into elements.
The exact content of the address breakdown depends on the output format. 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 When set to 1, include a full list of names for the result. These may include
language variants, older names, references and brand. 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 ### Language of results

View File

@@ -60,6 +60,8 @@ The possible fields are:
* `namedetails` - dictionary with full list of available names including ref etc. * `namedetails` - dictionary with full list of available names including ref etc.
* `geojson`, `svg`, `geotext`, `geokml` - full geometry * `geojson`, `svg`, `geotext`, `geokml` - full geometry
(only with the appropriate `polygon_*` parameter) (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 ## JSONv2
@@ -87,6 +89,8 @@ The properties object has the following fields:
* `extratags` - dictionary with additional useful tags like `website` or `maxspeed` * `extratags` - dictionary with additional useful tags like `website` or `maxspeed`
(only with `extratags=1`) (only with `extratags=1`)
* `namedetails` - dictionary with full list of available names including ref etc. * `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 Use `polygon_geojson` to output the full geometry of the object instead
of the centroid. 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`) * `admin` - list of localised names of administrative boundaries (only with `addressdetails=1`)
* `extra` - dictionary with additional useful tags like `website` or `maxspeed` * `extra` - dictionary with additional useful tags like `website` or `maxspeed`
(only with `extratags=1`) (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 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 The full address of the result can be found in the content of the
`result` element as a comma-separated list. `result` element as a comma-separated list.
Additional information requested with `addressdetails=1`, `extratags=1` and Additional information requested with `addressdetails=1`, `extratags=1`,
`namedetails=1` can be found in extra elements. `namedetails=1`, and `entrances=1` can be found in extra elements.
### Search and Lookup ### 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 When `addressdetails=1` is requested, the localised address parts appear
as subelements with the type of the address part. as subelements with the type of the address part.
Additional information requested with `extratags=1` and `namedetails=1` can Additional information requested with `extratags=1`, `namedetails=1`, and
be found in extra elements as sub-element of `extratags` and `namedetails` `entrances=1` can be found in extra elements as sub-element of `extratags`,
respectively. `namedetails`, and `entrances` respectively.
## Notes on field values ## 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 They roughly correspond to the classification of the OpenStreetMap data
according to either the `place` tag or the main key of the object. 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 When set to 1, include a full list of names for the result. These may include
language variants, older names, references and brand. 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 ### Language of results
@@ -146,7 +152,7 @@ In terms of address details the zoom levels are as follows:
| Parameter | Value | Default | | 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. The layer filter allows to select places by themes.
@@ -212,7 +218,7 @@ This overrides the specified machine readable format.
## Examples ## 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 ```xml
<reversegeocode timestamp="Fri, 06 Nov 09 16:33:54 +0000" querystring="..."> <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` ##### 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 ```json
{ {
@@ -267,7 +273,7 @@ This overrides the specified machine readable format.
##### Example with `format=geojson` ##### 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 ```json
{ {
@@ -319,7 +325,7 @@ This overrides the specified machine readable format.
##### Example with `format=geocodejson` ##### 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 ```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 When set to 1, include a full list of names for the result. These may include
language variants, older names, references and brand. 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 ### 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 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 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 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. 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 _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 !!! danger
Some tags in the extratags category are used by Nominatim to better Some tags in the extratags category are used by Nominatim to better
classify the place. You want to make sure these are always present classify the place. These tags will always be added, independent of
in custom styles. any settings in the style.
Configuring the style means deciding which key and/or key/value is used Configuring the style means deciding which key and/or key/value is used
in which category. in which category.
@@ -266,11 +267,7 @@ in turn take precedence over prefix matches.
##### Presets ##### Presets
| Name | Description | Accepts all [presets from ignored tags](#presets_1).
| :----- | :---------- |
| 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.
### General pre-filtering ### General pre-filtering
@@ -426,6 +423,56 @@ is added for extratags.
already delete the tiger tags with `set_prefilters()` because that already delete the tiger tags with `set_prefilters()` because that
would remove tiger:county before the address tags are processed. 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 ## Customizing osm2pgsql callbacks
osm2pgsql expects the flex style to implement three callbacks, one process 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 | | **Description:** | Log requests into a file |
| **Format:** | path | | **Format:** | path |
| **Default:** | _empty_ (logging disabled) | | **Default:** | _empty_ (logging disabled) |
| **After Changes:** | run `nominatim refresh --website` |
Enable logging of requests into a file with this setting by setting the log 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 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 #### NOMINATIM_DEBUG_SQL

View File

@@ -39,3 +39,9 @@ th {
filter: grayscale(100%); filter: grayscale(100%);
font-size: 80%; 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' 'Brugges'
``` ```
The `address_row` field has a helper function to apply the function to all The `address_row` field has a helper function to compute the display name for each Address Line
its members and save the result in the `local_name` field. It also returns component based on its `local_name` field. This is then utilized by the overall `result` object,
all the localized names as a convenient simple list. This list can be used which has a helper function to apply the function to all its address_row members and saves
to create a human-readable output: 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 ``` python
>>> address_parts = results[0].address_rows.localize(locale) >>> Locales().localize_results(results)
>>> address_parts = results[0].address_rows
>>> print(', '.join(address_parts)) >>> print(', '.join(address_parts))
Bruges, Flandre-Occidentale, Flandre, Belgique Bruges, Flandre-Occidentale, Flandre, Belgique
``` ```

View File

@@ -49,7 +49,11 @@ its address.
## Localization ## 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 ### Locale

View File

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

View File

@@ -200,6 +200,8 @@ module.MAIN_TAGS_POIS = function (group)
leisure = {'always', leisure = {'always',
nature_reserve = 'fallback', nature_reserve = 'fallback',
swimming_pool = 'named', swimming_pool = 'named',
garden = 'named',
common = 'named',
no = group}, no = group},
lock = {yes = lock_transform}, lock = {yes = lock_transform},
man_made = {pier = 'always', man_made = {pier = 'always',
@@ -362,7 +364,7 @@ module.IGNORE_KEYS.metatags = {'note', 'note:*', 'source', 'source:*', '*source'
'tiger:cfcc', 'tiger:reviewed', 'nysgissam:*', 'tiger:cfcc', 'tiger:reviewed', 'nysgissam:*',
'NHD:*', 'nhd:*', 'gnis:*', 'geobase:*', 'yh:*', 'NHD:*', 'nhd:*', 'gnis:*', 'geobase:*', 'yh:*',
'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*', 'osak:*', 'naptan:*', 'CLC:*', 'import', 'it:fvg:*',
'lacounty:*', 'ref:linz:*', 'lacounty:*', 'ref:linz:*', 'survey:*',
'ref:bygningsnr', 'ref:ruian:*', 'building:ruian:type', 'ref:bygningsnr', 'ref:ruian:*', 'building:ruian:type',
'type', 'type',
'is_in:postcode'} 'is_in:postcode'}
@@ -373,10 +375,15 @@ module.IGNORE_KEYS.address = {'addr:street:*', 'addr:city:*', 'addr:district:*',
'addr:province:*', 'addr:subdistrict:*', 'addr:place:*', 'addr:province:*', 'addr:subdistrict:*', 'addr:place:*',
'addr:TW:dataset'} '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 return module

View File

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

View File

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

View File

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

View File

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

View File

@@ -338,6 +338,11 @@ BEGIN
END IF; END IF;
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) -- Abort the insertion (we modified the existing place instead)
RETURN NULL; RETURN NULL;
END; END;

View File

@@ -530,6 +530,7 @@ CREATE OR REPLACE FUNCTION insert_addresslines(obj_place_id BIGINT,
AS $$ AS $$
DECLARE DECLARE
address_havelevel BOOLEAN[]; address_havelevel BOOLEAN[];
place_min_distance FLOAT[];
location_isaddress BOOLEAN; location_isaddress BOOLEAN;
current_boundary GEOMETRY := NULL; current_boundary GEOMETRY := NULL;
@@ -545,6 +546,7 @@ BEGIN
nameaddress_vector := '{}'::int[]; nameaddress_vector := '{}'::int[];
address_havelevel := array_fill(false, ARRAY[maxrank]); address_havelevel := array_fill(false, ARRAY[maxrank]);
place_min_distance := array_fill(1.0, ARRAY[maxrank]);
FOR location IN FOR location IN
SELECT apl.*, key SELECT apl.*, key
@@ -575,6 +577,10 @@ BEGIN
END IF; END IF;
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, INSERT INTO place_addressline (place_id, address_place_id, fromarea,
isaddress, distance, cached_rank_address) isaddress, distance, cached_rank_address)
VALUES (obj_place_id, location.place_id, not location.isguess, 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. -- If this is the first item in the rank, then assume it is the address.
location_isaddress := not address_havelevel[location.rank_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. -- Further sanity checks to ensure that the address forms a sane hierarchy.
IF location_isaddress THEN IF location_isaddress THEN
IF location.isguess and current_node_area is not NULL THEN IF location.isguess and current_node_area is not NULL THEN
@@ -874,6 +890,11 @@ BEGIN
-- Compute a preliminary centroid. -- Compute a preliminary centroid.
NEW.centroid := get_center_point(NEW.geometry); 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 -- recalculate country and partition
IF NEW.rank_search = 4 AND NEW.address is not NULL AND NEW.address ? 'country' THEN IF NEW.rank_search = 4 AND NEW.address is not NULL AND NEW.address ? 'country' THEN
-- for countries, believe the mapped country code, -- for countries, believe the mapped country code,

View File

@@ -623,3 +623,34 @@ BEGIN
RETURN NULL; RETURN NULL;
END; END;
$$ LANGUAGE plpgsql; $$ 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}}; CREATE INDEX idx_postcode_geometry ON location_postcode USING GIST (geometry) {{db.tablespace.address_index}};
GRANT SELECT ON location_postcode TO "{{config.DATABASE_WEBUSER}}" ; 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; DROP TABLE IF EXISTS import_polygon_error;
CREATE TABLE import_polygon_error ( CREATE TABLE import_polygon_error (
osm_id BIGINT, osm_id BIGINT,

View File

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

View File

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

View File

@@ -21,7 +21,7 @@
"croft" : 20, "croft" : 20,
"subdivision" : 22, "subdivision" : 22,
"allotments" : 22, "allotments" : 22,
"neighbourhood" : [20, 22], "neighbourhood" : 24,
"quarter" : [20, 22], "quarter" : [20, 22],
"isolated_dwelling" : [22, 25], "isolated_dwelling" : [22, 25],
"farm" : [22, 25], "farm" : [22, 25],
@@ -48,17 +48,20 @@
"" : [25, 0] "" : [25, 0]
}, },
"landuse" : { "landuse" : {
"residential" : 22, "residential" : 24,
"farm" : 22, "farm" : 24,
"farmyard" : 22, "farmyard" : 24,
"industrial" : 22, "industrial" : 24,
"commercial" : 22, "commercial" : 24,
"allotments" : 22, "allotments" : 24,
"retail" : 22, "retail" : 24,
"" : [22, 0] "" : [24, 0]
}, },
"leisure" : { "leisure" : {
"park" : [24, 0] "park" : [24, 0],
"nature_reserve" : [24, 0],
"garden": [25, 0],
"common": [25, 0]
}, },
"natural" : { "natural" : {
"peak" : [18, 0], "peak" : [18, 0],
@@ -236,6 +239,17 @@
"administrative11" : 20 "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 na: Andorra
ne: एण्डोरा ne: एण्डोरा
nl: Andorra nl: Andorra
nn: Andorra
"no": Andorra "no": Andorra
nv: Andówa nv: Andówa
oc: Andòrra oc: Andòrra

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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