"square" : 25,
"houses" : [28, 0],
"farm" : [20, 0],
- "locality" : [20, 0]
+ "locality" : [20, 0],
+ "house" : 30,
+ "" : [22, 0]
},
"boundary" : {
"administrative2" : 4,
"administrative9" : 18,
"administrative10" : 20,
"administrative11" : 22,
- "administrative12" : 24
+ "administrative12" : 24,
+ "" : [25, 0]
},
"landuse" : {
"residential" : 22,
"" : [20, 0]
},
"historic" : {
- "neighbourhood" : [30, 0]
+ "neighbourhood" : [22, 0]
}
}
},
{
"keys" : ["boundary"],
"values" : {
+ "place" : "skip",
"" : "main,with_name"
}
},
{
"keys" : ["boundary"],
"values" : {
+ "place" : "skip",
"" : "main,with_name"
}
},
-- deleting large polygons can have a massive effect on the system - require manual intervention to let them through
IF st_area(OLD.geometry) > 2 and st_isvalid(OLD.geometry) THEN
- SELECT bool_or(not (rank_address = 0 or rank_address > 26)) as ranked FROM placex WHERE osm_type = OLD.osm_type and osm_id = OLD.osm_id and class = OLD.class and type = OLD.type INTO has_rank;
+ SELECT bool_or(not (rank_address = 0 or rank_address > 25)) as ranked FROM placex WHERE osm_type = OLD.osm_type and osm_id = OLD.osm_id and class = OLD.class and type = OLD.type INTO has_rank;
IF has_rank THEN
insert into import_polygon_delete (osm_type, osm_id, class, type) values (OLD.osm_type,OLD.osm_id,OLD.class,OLD.type);
RETURN NULL;
END IF;
IF fallback THEN
- IF ST_Area(bbox) < 0.01 THEN
+ IF ST_Area(bbox) < 0.005 THEN
-- for smaller features get the nearest road
SELECT getNearestRoadPlaceId(poi_partition, bbox) INTO parent_place_id;
--DEBUG: RAISE WARNING 'Checked for nearest way (%)', parent_place_id;
(NEW.extratags->'capital') = 'yes',
NEW.address->'postcode');
-- We must always increase the address level relative to the admin boundary.
- IF NEW.class = 'boundary' and NEW.type = 'administrative' and NEW.osm_type = 'R' THEN
+ IF NEW.class = 'boundary' and NEW.type = 'administrative'
+ and NEW.osm_type = 'R' and NEW.rank_address > 0
+ THEN
parent_address_level := get_parent_address_level(NEW.centroid, NEW.admin_level);
IF parent_address_level >= NEW.rank_address THEN
IF parent_address_level >= 24 THEN
And placex contains
| object | rank_search | rank_address |
| R20 | 4 | 4 |
- | R21 | 30 | 30 |
- | R22 | 30 | 30 |
- | R23 | 30 | 30 |
+ | R21 | 25 | 0 |
+ | R22 | 25 | 0 |
+ | R23 | 25 | 0 |
| R40 | 4 | 0 |
| R41 | 8 | 0 |
Then placex contains
| object | rank_search | rank_address |
| N1 | 30 | 30 |
- | N11 | 30 | 30 |
+ | N11 | 22 | 0 |
| N12 | 2 | 0 |
| N13 | 2 | 0 |
| N14 | 4 | 0 |
Then placex contains
| object | rank_search | rank_address |
| R20 | 4 | 4 |
- | R21 | 30 | 30 |
+ | R21 | 25 | 0 |
| R22 | 12 | 12 |
| R23 | 20 | 20 |
- Scenario: Ranks for boundaries with place assignment go with place address ranks if available
+ Scenario: Ranks for addressable boundaries with place assignment go with place address ranks if available
Given the named places
| osm | class | type | admin | extra+place | geometry |
| R20 | boundary | administrative | 3 | state | (1 1, 2 2, 1 2, 1 1) |
Then placex contains
| object | rank_search | rank_address |
| R20 | 6 | 6 |
- | R21 | 30 | 20 |
+ | R21 | 25 | 0 |
| R22 | 12 | 16 |
| R23 | 20 | 16 |
Scenario: Do delete large features of low rank
Given the named places
- | osm | class | type | geometry |
- | W1 | place | house | poly-area:5.0 |
- | R1 | boundary | national_park | poly-area:5.0 |
+ | osm | class | type | geometry |
+ | W1 | place | house | poly-area:5.0 |
+ | R1 | natural | wood | poly-area:5.0 |
+ | R2 | highway | residential | poly-area:5.0 |
When importing
Then placex contains
| object | rank_address |
| R1 | 30 |
+ | R2 | 26 |
| W1 | 30 |
- When marking for delete R1,W1
+ When marking for delete R1,R2,W1
Then placex has no entry for W1
Then placex has no entry for R1
+ Then placex has no entry for R2
Scenario: type mutation
Given the places
| W1 | boundary | historic | Haha | 5 | (1, 2, 4, 3, 1) |
Then placex contains
| object | rank_address |
- | W1 | 30 |
+ | W1 | 0 |
if self.pid is None:
return "<null>"
+ if self.pid == 0:
+ return "place ID 0"
+
cur = self.conn.cursor()
cur.execute("""SELECT osm_type, osm_id, class
FROM placex WHERE place_id = %s""",