forked from hans/Nominatim
Merge pull request #2685 from lonvia/show-inherited-housenumber
Keep address parts inherited from surrounding buildings after indexing
This commit is contained in:
@@ -28,35 +28,38 @@ DECLARE
|
|||||||
result prepare_update_info;
|
result prepare_update_info;
|
||||||
extra_names HSTORE;
|
extra_names HSTORE;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
IF not p.address ? '_inherited' THEN
|
||||||
|
result.address := p.address;
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- For POI nodes, check if the address should be derived from a surrounding
|
-- For POI nodes, check if the address should be derived from a surrounding
|
||||||
-- building.
|
-- building.
|
||||||
IF p.rank_search < 30 OR p.osm_type != 'N' THEN
|
IF p.rank_search = 30 AND p.osm_type = 'N' THEN
|
||||||
result.address := p.address;
|
IF p.address is null THEN
|
||||||
ELSEIF p.address is null THEN
|
-- The additional && condition works around the misguided query
|
||||||
-- The additional && condition works around the misguided query
|
-- planner of postgis 3.0.
|
||||||
-- planner of postgis 3.0.
|
SELECT placex.address || hstore('_inherited', '') INTO result.address
|
||||||
SELECT placex.address || hstore('_inherited', '') INTO result.address
|
FROM placex
|
||||||
FROM placex
|
WHERE ST_Covers(geometry, p.centroid)
|
||||||
WHERE ST_Covers(geometry, p.centroid)
|
and geometry && p.centroid
|
||||||
and geometry && p.centroid
|
and placex.address is not null
|
||||||
and placex.address is not null
|
and (placex.address ? 'housenumber' or placex.address ? 'street' or placex.address ? 'place')
|
||||||
and (placex.address ? 'housenumber' or placex.address ? 'street' or placex.address ? 'place')
|
and rank_search = 30 AND ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon')
|
||||||
and rank_search = 30 AND ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon')
|
LIMIT 1;
|
||||||
LIMIT 1;
|
ELSE
|
||||||
ELSE
|
-- See if we can inherit addtional address tags from an interpolation.
|
||||||
result.address := p.address;
|
-- These will become permanent.
|
||||||
-- See if we can inherit addtional address tags from an interpolation.
|
FOR location IN
|
||||||
-- These will become permanent.
|
SELECT (address - 'interpolation'::text - 'housenumber'::text) as address
|
||||||
FOR location IN
|
FROM place, planet_osm_ways w
|
||||||
SELECT (address - 'interpolation'::text - 'housenumber'::text) as address
|
WHERE place.osm_type = 'W' and place.address ? 'interpolation'
|
||||||
FROM place, planet_osm_ways w
|
and place.geometry && p.geometry
|
||||||
WHERE place.osm_type = 'W' and place.address ? 'interpolation'
|
and place.osm_id = w.id
|
||||||
and place.geometry && p.geometry
|
and p.osm_id = any(w.nodes)
|
||||||
and place.osm_id = w.id
|
LOOP
|
||||||
and p.osm_id = any(w.nodes)
|
result.address := location.address || result.address;
|
||||||
LOOP
|
END LOOP;
|
||||||
result.address := location.address || result.address;
|
END IF;
|
||||||
END LOOP;
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- remove internal and derived names
|
-- remove internal and derived names
|
||||||
@@ -984,15 +987,6 @@ BEGIN
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
NEW.token_info := token_strip_info(NEW.token_info);
|
NEW.token_info := token_strip_info(NEW.token_info);
|
||||||
-- If the address was inherited from a surrounding building,
|
|
||||||
-- do not add it permanently to the table.
|
|
||||||
IF NEW.address ? '_inherited' THEN
|
|
||||||
IF NEW.address ? '_unlisted_place' THEN
|
|
||||||
NEW.address := hstore('_unlisted_place', NEW.address->'_unlisted_place');
|
|
||||||
ELSE
|
|
||||||
NEW.address := null;
|
|
||||||
END IF;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
RETURN NEW;
|
RETURN NEW;
|
||||||
END IF;
|
END IF;
|
||||||
|
|||||||
@@ -376,6 +376,10 @@ Feature: Parenting of objects
|
|||||||
| N1 | W3 | 3 |
|
| N1 | W3 | 3 |
|
||||||
| N2 | W3 | 3 |
|
| N2 | W3 | 3 |
|
||||||
| N3 | W3 | 3 |
|
| N3 | W3 | 3 |
|
||||||
|
When sending geocodejson search query "3, foo" with address
|
||||||
|
Then results contain
|
||||||
|
| housenumber |
|
||||||
|
| 3 |
|
||||||
|
|
||||||
Scenario: POIs don't inherit from streets
|
Scenario: POIs don't inherit from streets
|
||||||
Given the scene building-on-street-corner
|
Given the scene building-on-street-corner
|
||||||
|
|||||||
Reference in New Issue
Block a user