mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-11-30 02:07:52 +03:00
update interpolations instead of deleting and recreating
This commit is contained in:
parent
c65938d53c
commit
c0d8b95f67
@ -13,7 +13,7 @@ DECLARE
|
|||||||
country RECORD;
|
country RECORD;
|
||||||
existing RECORD;
|
existing RECORD;
|
||||||
existingplacex RECORD;
|
existingplacex RECORD;
|
||||||
existingline RECORD;
|
existingline BIGINT[];
|
||||||
result BOOLEAN;
|
result BOOLEAN;
|
||||||
BEGIN
|
BEGIN
|
||||||
{% if debug %}
|
{% if debug %}
|
||||||
@ -58,19 +58,29 @@ BEGIN
|
|||||||
and NEW.osm_type='W' and ST_GeometryType(NEW.geometry) = 'ST_LineString'
|
and NEW.osm_type='W' and ST_GeometryType(NEW.geometry) = 'ST_LineString'
|
||||||
THEN
|
THEN
|
||||||
-- Get the existing entry from the interpolation table.
|
-- Get the existing entry from the interpolation table.
|
||||||
SELECT * INTO existingline
|
SELECT array_agg(place_id) INTO existingline
|
||||||
FROM location_property_osmline WHERE osm_id = NEW.osm_id;
|
FROM location_property_osmline WHERE osm_id = NEW.osm_id;
|
||||||
|
|
||||||
-- Update the interpolation table:
|
IF existingline IS NULL or array_length(existingline, 1) = 0 THEN
|
||||||
-- delete all old interpolation lines with same osm_id
|
INSERT INTO location_property_osmline (osm_id, address, linegeo)
|
||||||
-- and insert the new one(s) (they can be split up, if they have > 2 nodes)
|
VALUES (NEW.osm_id, NEW.address, NEW.geometry);
|
||||||
IF existingline.osm_id IS NOT NULL THEN
|
ELSE
|
||||||
DELETE FROM location_property_osmline where osm_id = NEW.osm_id;
|
-- Update the interpolation table:
|
||||||
|
-- The first entry gets the original data, all other entries
|
||||||
|
-- are removed and will be recreated on indexing.
|
||||||
|
-- (An interpolation can be split up, if it has more than 2 address nodes)
|
||||||
|
UPDATE location_property_osmline
|
||||||
|
SET address = NEW.address,
|
||||||
|
linegeo = NEW.geometry,
|
||||||
|
startnumber = null,
|
||||||
|
indexed_status = 1
|
||||||
|
WHERE place_id = existingline[1];
|
||||||
|
IF array_length(existingline, 1) > 1 THEN
|
||||||
|
DELETE FROM location_property_osmline
|
||||||
|
WHERE place_id = any(existingline[2:]);
|
||||||
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
INSERT INTO location_property_osmline (osm_id, address, linegeo)
|
|
||||||
VALUES (NEW.osm_id, NEW.address, NEW.geometry);
|
|
||||||
|
|
||||||
-- Now invalidate all address nodes on the line.
|
-- Now invalidate all address nodes on the line.
|
||||||
-- They get their parent from the interpolation.
|
-- They get their parent from the interpolation.
|
||||||
UPDATE placex p SET indexed_status = 2
|
UPDATE placex p SET indexed_status = 2
|
||||||
|
Loading…
Reference in New Issue
Block a user