mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
Merge pull request #1111 from lonvia/remove-postcode-nodes-from-address
Do not have postcode node appear in addresses directly
This commit is contained in:
@@ -864,6 +864,10 @@ BEGIN
|
|||||||
SELECT * FROM get_postcode_rank(NEW.country_code, NEW.address->'postcode')
|
SELECT * FROM get_postcode_rank(NEW.country_code, NEW.address->'postcode')
|
||||||
INTO NEW.rank_search, NEW.rank_address;
|
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
|
ELSEIF NEW.class = 'place' THEN
|
||||||
IF NEW.type in ('continent') THEN
|
IF NEW.type in ('continent') THEN
|
||||||
NEW.rank_search := 2;
|
NEW.rank_search := 2;
|
||||||
|
|||||||
@@ -20,3 +20,41 @@ Feature: Address computation
|
|||||||
| object | address | cached_rank_address |
|
| object | address | cached_rank_address |
|
||||||
| W1 | W10 | 10 |
|
| W1 | W10 | 10 |
|
||||||
| W1 | W11 | 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
|
When importing
|
||||||
Then placex contains
|
Then placex contains
|
||||||
| object | postcode | country_code | rank_search | rank_address |
|
| object | postcode | country_code | rank_search | rank_address |
|
||||||
| N1 | E45 2CD | gb | 25 | 5 |
|
| N1 | E45 2CD | gb | 25 | 0 |
|
||||||
| N2 | E45 2 | gb | 23 | 5 |
|
| N2 | E45 2 | gb | 23 | 0 |
|
||||||
| N3 | Y45 | gb | 21 | 5 |
|
| N3 | Y45 | gb | 21 | 0 |
|
||||||
|
|
||||||
Scenario: wrongly formatted GB postcodes are down-ranked
|
Scenario: wrongly formatted GB postcodes are down-ranked
|
||||||
Given the places
|
Given the places
|
||||||
@@ -82,8 +82,8 @@ Feature: Import into placex
|
|||||||
When importing
|
When importing
|
||||||
Then placex contains
|
Then placex contains
|
||||||
| object | country_code | rank_search | rank_address |
|
| object | country_code | rank_search | rank_address |
|
||||||
| N1 | gb | 30 | 30 |
|
| N1 | gb | 30 | 0 |
|
||||||
| N2 | gb | 30 | 30 |
|
| N2 | gb | 30 | 0 |
|
||||||
|
|
||||||
Scenario: search and address rank for DE postcodes correctly assigned
|
Scenario: search and address rank for DE postcodes correctly assigned
|
||||||
Given the places
|
Given the places
|
||||||
@@ -95,10 +95,10 @@ Feature: Import into placex
|
|||||||
When importing
|
When importing
|
||||||
Then placex contains
|
Then placex contains
|
||||||
| object | country_code | rank_search | rank_address |
|
| object | country_code | rank_search | rank_address |
|
||||||
| N1 | de | 21 | 11 |
|
| N1 | de | 21 | 0 |
|
||||||
| N2 | de | 30 | 30 |
|
| N2 | de | 30 | 0 |
|
||||||
| N3 | de | 30 | 30 |
|
| N3 | de | 30 | 0 |
|
||||||
| N4 | de | 30 | 30 |
|
| N4 | de | 30 | 0 |
|
||||||
|
|
||||||
Scenario: search and address rank for other postcodes are correctly assigned
|
Scenario: search and address rank for other postcodes are correctly assigned
|
||||||
Given the places
|
Given the places
|
||||||
@@ -115,15 +115,15 @@ Feature: Import into placex
|
|||||||
When importing
|
When importing
|
||||||
Then placex contains
|
Then placex contains
|
||||||
| object | country_code | rank_search | rank_address |
|
| object | country_code | rank_search | rank_address |
|
||||||
| N1 | ca | 21 | 11 |
|
| N1 | ca | 21 | 0 |
|
||||||
| N2 | ca | 21 | 11 |
|
| N2 | ca | 21 | 0 |
|
||||||
| N3 | ca | 21 | 11 |
|
| N3 | ca | 21 | 0 |
|
||||||
| N4 | ca | 21 | 11 |
|
| N4 | ca | 21 | 0 |
|
||||||
| N5 | ca | 21 | 11 |
|
| N5 | ca | 21 | 0 |
|
||||||
| N6 | ca | 21 | 11 |
|
| N6 | ca | 21 | 0 |
|
||||||
| N7 | ca | 25 | 11 |
|
| N7 | ca | 25 | 0 |
|
||||||
| N8 | ca | 25 | 11 |
|
| N8 | ca | 25 | 0 |
|
||||||
| N9 | ca | 25 | 11 |
|
| N9 | ca | 25 | 0 |
|
||||||
|
|
||||||
Scenario: search and address ranks for places are correctly assigned
|
Scenario: search and address ranks for places are correctly assigned
|
||||||
Given the named places
|
Given the named places
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ Feature: Import of postcodes
|
|||||||
| object | postcode |
|
| object | postcode |
|
||||||
| W22 | 112 DE 34 |
|
| 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
|
Given the scene admin-areas
|
||||||
And the named places
|
And the named places
|
||||||
| osm | class | type | geometry |
|
| osm | class | type | geometry |
|
||||||
@@ -95,6 +95,19 @@ Feature: Import of postcodes
|
|||||||
| object | postcode |
|
| object | postcode |
|
||||||
| W93 | 445023 |
|
| 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
|
Scenario: Postcodes from admin boundaries are preferred over estimated postcodes
|
||||||
Given the scene admin-areas
|
Given the scene admin-areas
|
||||||
And the named places
|
And the named places
|
||||||
|
|||||||
@@ -498,6 +498,21 @@ def check_place_addressline(context):
|
|||||||
|
|
||||||
context.db.commit()
|
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")
|
@then("(?P<oid>\w+) expands to(?P<neg> no)? interpolation")
|
||||||
def check_location_property_osmline(context, oid, neg):
|
def check_location_property_osmline(context, oid, neg):
|
||||||
cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
cur = context.db.cursor(cursor_factory=psycopg2.extras.DictCursor)
|
||||||
|
|||||||
Reference in New Issue
Block a user