mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
simplify search for artificial postcodes
This commit is contained in:
@@ -319,35 +319,31 @@ LANGUAGE plpgsql IMMUTABLE;
|
|||||||
CREATE OR REPLACE FUNCTION get_nearest_postcode(country VARCHAR(2), geom GEOMETRY) RETURNS TEXT
|
CREATE OR REPLACE FUNCTION get_nearest_postcode(country VARCHAR(2), geom GEOMETRY) RETURNS TEXT
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
item RECORD;
|
outcode TEXT;
|
||||||
|
cnt INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
-- If the geometry is an area then only one postcode must be within
|
-- If the geometry is an area then only one postcode must be within
|
||||||
-- that area, otherwise consider the area as not having a postcode.
|
-- that area, otherwise consider the area as not having a postcode.
|
||||||
IF ST_GeometryType(geom) in ('ST_Polygon','ST_MultiPolygon') THEN
|
IF ST_GeometryType(geom) in ('ST_Polygon','ST_MultiPolygon') THEN
|
||||||
FOR item IN
|
SELECT min(postcode), count(*) FROM
|
||||||
SELECT min(postcode) as postcode, count(*) as cnt FROM
|
|
||||||
(SELECT postcode FROM location_postcode
|
(SELECT postcode FROM location_postcode
|
||||||
WHERE ST_Contains(geom, location_postcode.geometry) LIMIT 2) sub
|
WHERE ST_Contains(geom, location_postcode.geometry) LIMIT 2) sub
|
||||||
LOOP
|
INTO outcode, cnt;
|
||||||
IF item.cnt > 1 THEN
|
|
||||||
RETURN null;
|
IF cnt = 1 THEN
|
||||||
ELSEIF item.cnt = 1 THEN
|
RETURN outcode;
|
||||||
RETURN item.postcode;
|
ELSE
|
||||||
END IF;
|
RETURN null;
|
||||||
END LOOP;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
FOR item IN
|
SELECT postcode FROM location_postcode
|
||||||
SELECT postcode FROM location_postcode
|
WHERE ST_DWithin(geom, location_postcode.geometry, 0.05)
|
||||||
WHERE ST_DWithin(geom, location_postcode.geometry, 0.05)
|
AND location_postcode.country_code = country
|
||||||
AND location_postcode.country_code = country
|
ORDER BY ST_Distance(geom, location_postcode.geometry) LIMIT 1
|
||||||
ORDER BY ST_Distance(geom, location_postcode.geometry)
|
INTO outcode;
|
||||||
LIMIT 1
|
|
||||||
LOOP
|
|
||||||
RETURN item.postcode;
|
|
||||||
END LOOP;
|
|
||||||
|
|
||||||
RETURN null;
|
RETURN outcode;
|
||||||
END;
|
END;
|
||||||
$$
|
$$
|
||||||
LANGUAGE plpgsql;
|
LANGUAGE plpgsql;
|
||||||
|
|||||||
Reference in New Issue
Block a user