mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-10-05 06:57:34 +03:00
Do not have postcode node appear in addresses directly
Many of the postcode nodes are actually derived from incomplete addresses and are as such not even centroids. Better let them only take part in the address computation via the postcode table.
This commit is contained in:
parent
9bdbbec0c8
commit
48d4ea5542
@ -864,6 +864,10 @@ BEGIN
|
||||
SELECT * FROM get_postcode_rank(NEW.country_code, NEW.address->'postcode')
|
||||
INTO NEW.rank_search, NEW.rank_address;
|
||||
|
||||
IF NOT ST_GeometryType(NEW.geometry) IN ('ST_Polygon','ST_MultiPolygon') THEN
|
||||
NEW.rank_address := 0;
|
||||
END IF;
|
||||
|
||||
ELSEIF NEW.class = 'place' THEN
|
||||
IF NEW.type in ('continent') THEN
|
||||
NEW.rank_search := 2;
|
||||
|
@ -20,3 +20,41 @@ Feature: Address computation
|
||||
| object | address | cached_rank_address |
|
||||
| W1 | W10 | 10 |
|
||||
| W1 | W11 | 10 |
|
||||
|
||||
Scenario: buildings with only addr:postcodes do not appear in the address of a way
|
||||
Given the scene admin-areas
|
||||
And the named places
|
||||
| osm | class | type | admin | addr+postcode | geometry |
|
||||
| R1 | boundary | administrative | 6 | 112 | :b0 |
|
||||
| R34 | boundary | administrative | 8 | 112 DE | :b1:E |
|
||||
| R4 | boundary | administrative | 10 | 112 DE 34 | :b2:N |
|
||||
And the named places
|
||||
| osm | class | type | geometry |
|
||||
| W93 | highway | residential | :w2N |
|
||||
And the places
|
||||
| osm | class | type | addr+postcode | geometry |
|
||||
| W22 | place | postcode | 445023 | :building:w2N |
|
||||
When importing
|
||||
Then place_addressline doesn't contain
|
||||
| object | address |
|
||||
| W93 | W22 |
|
||||
|
||||
Scenario: postcode boundaries do appear in the address of a way
|
||||
Given the scene admin-areas
|
||||
And the named places
|
||||
| osm | class | type | admin | addr+postcode | geometry |
|
||||
| R1 | boundary | administrative | 6 | 112 | :b0 |
|
||||
| R34 | boundary | administrative | 8 | 112 DE | :b1:E |
|
||||
And the places
|
||||
| osm | class | type | addr+postcode | geometry |
|
||||
| R4 | place | postcode | 112 DE 34 | :b2:N |
|
||||
And the named places
|
||||
| osm | class | type | geometry |
|
||||
| W93 | highway | residential | :w2N |
|
||||
And the places
|
||||
| osm | class | type | addr+postcode | geometry |
|
||||
| W22 | place | postcode | 445023 | :building:w2N |
|
||||
When importing
|
||||
Then place_addressline contains
|
||||
| object | address |
|
||||
| W93 | R4 |
|
||||
|
@ -70,9 +70,9 @@ Feature: Import into placex
|
||||
When importing
|
||||
Then placex contains
|
||||
| object | postcode | country_code | rank_search | rank_address |
|
||||
| N1 | E45 2CD | gb | 25 | 5 |
|
||||
| N2 | E45 2 | gb | 23 | 5 |
|
||||
| N3 | Y45 | gb | 21 | 5 |
|
||||
| N1 | E45 2CD | gb | 25 | 0 |
|
||||
| N2 | E45 2 | gb | 23 | 0 |
|
||||
| N3 | Y45 | gb | 21 | 0 |
|
||||
|
||||
Scenario: wrongly formatted GB postcodes are down-ranked
|
||||
Given the places
|
||||
@ -82,8 +82,8 @@ Feature: Import into placex
|
||||
When importing
|
||||
Then placex contains
|
||||
| object | country_code | rank_search | rank_address |
|
||||
| N1 | gb | 30 | 30 |
|
||||
| N2 | gb | 30 | 30 |
|
||||
| N1 | gb | 30 | 0 |
|
||||
| N2 | gb | 30 | 0 |
|
||||
|
||||
Scenario: search and address rank for DE postcodes correctly assigned
|
||||
Given the places
|
||||
@ -95,10 +95,10 @@ Feature: Import into placex
|
||||
When importing
|
||||
Then placex contains
|
||||
| object | country_code | rank_search | rank_address |
|
||||
| N1 | de | 21 | 11 |
|
||||
| N2 | de | 30 | 30 |
|
||||
| N3 | de | 30 | 30 |
|
||||
| N4 | de | 30 | 30 |
|
||||
| N1 | de | 21 | 0 |
|
||||
| N2 | de | 30 | 0 |
|
||||
| N3 | de | 30 | 0 |
|
||||
| N4 | de | 30 | 0 |
|
||||
|
||||
Scenario: search and address rank for other postcodes are correctly assigned
|
||||
Given the places
|
||||
@ -115,15 +115,15 @@ Feature: Import into placex
|
||||
When importing
|
||||
Then placex contains
|
||||
| object | country_code | rank_search | rank_address |
|
||||
| N1 | ca | 21 | 11 |
|
||||
| N2 | ca | 21 | 11 |
|
||||
| N3 | ca | 21 | 11 |
|
||||
| N4 | ca | 21 | 11 |
|
||||
| N5 | ca | 21 | 11 |
|
||||
| N6 | ca | 21 | 11 |
|
||||
| N7 | ca | 25 | 11 |
|
||||
| N8 | ca | 25 | 11 |
|
||||
| N9 | ca | 25 | 11 |
|
||||
| N1 | ca | 21 | 0 |
|
||||
| N2 | ca | 21 | 0 |
|
||||
| N3 | ca | 21 | 0 |
|
||||
| N4 | ca | 21 | 0 |
|
||||
| N5 | ca | 21 | 0 |
|
||||
| N6 | ca | 21 | 0 |
|
||||
| N7 | ca | 25 | 0 |
|
||||
| N8 | ca | 25 | 0 |
|
||||
| N9 | ca | 25 | 0 |
|
||||
|
||||
Scenario: search and address ranks for places are correctly assigned
|
||||
Given the named places
|
||||
|
@ -82,7 +82,7 @@ Feature: Import of postcodes
|
||||
| object | postcode |
|
||||
| W22 | 112 DE 34 |
|
||||
|
||||
Scenario: Roads get postcodes from nearby buildings without other info
|
||||
Scenario: Roads get postcodes from nearby named buildings without other info
|
||||
Given the scene admin-areas
|
||||
And the named places
|
||||
| osm | class | type | geometry |
|
||||
@ -95,6 +95,19 @@ Feature: Import of postcodes
|
||||
| object | postcode |
|
||||
| W93 | 445023 |
|
||||
|
||||
Scenario: Roads get postcodes from nearby unnamed buildings without other info
|
||||
Given the scene admin-areas
|
||||
And the named places
|
||||
| osm | class | type | geometry |
|
||||
| W93 | highway | residential | :w2N |
|
||||
And the named places
|
||||
| osm | class | type | addr+postcode | geometry |
|
||||
| W22 | place | postcode | 445023 | :building:w2N |
|
||||
When importing
|
||||
Then placex contains
|
||||
| object | postcode |
|
||||
| W93 | 445023 |
|
||||
|
||||
Scenario: Postcodes from admin boundaries are preferred over estimated postcodes
|
||||
Given the scene admin-areas
|
||||
And the named places
|
||||
|
@ -498,6 +498,21 @@ def check_place_addressline(context):
|
||||
|
||||
context.db.commit()
|
||||
|
||||
@then("place_addressline doesn't contain")
|
||||
def check_place_addressline_exclude(context):
|
||||
cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||
|
||||
for row in context.table:
|
||||
pid = NominatimID(row['object']).get_place_id(cur)
|
||||
apid = NominatimID(row['address']).get_place_id(cur)
|
||||
cur.execute(""" SELECT * FROM place_addressline
|
||||
WHERE place_id = %s AND address_place_id = %s""",
|
||||
(pid, apid))
|
||||
eq_(0, cur.rowcount,
|
||||
"Row found for place %s and address %s" % (row['object'], row['address']))
|
||||
|
||||
context.db.commit()
|
||||
|
||||
@then("(?P<oid>\w+) expands to(?P<neg> no)? interpolation")
|
||||
def check_location_property_osmline(context, oid, neg):
|
||||
cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||
|
Loading…
Reference in New Issue
Block a user