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:
Sarah Hoffmann 2018-08-05 17:04:54 +02:00 committed by GitHub
commit 9b7f0627ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 89 additions and 19 deletions

View File

@ -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;

View File

@ -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 |

View File

@ -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

View File

@ -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

View File

@ -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)