From b6fd348c5b26a397e4535b92a9cec3a4bd2d9022 Mon Sep 17 00:00:00 2001 From: Carla Date: Wed, 24 Jun 2015 17:29:17 +0200 Subject: [PATCH] Adds geocode_namedplace_country from db --- .../namedplace/sql/geocode_namedplace.sql | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/geocoder/namedplace/sql/geocode_namedplace.sql b/geocoder/namedplace/sql/geocode_namedplace.sql index 9dada25..80ba76d 100644 --- a/geocoder/namedplace/sql/geocode_namedplace.sql +++ b/geocoder/namedplace/sql/geocode_namedplace.sql @@ -294,3 +294,31 @@ AS $function$ RETURN; END $function$ + +-- geocode_namedplace_country -- +CREATE OR REPLACE FUNCTION public.geocode_namedplace_country(places text[], country text[]) + RETURNS SETOF geocode_namedplace_country_v1 + LANGUAGE plpgsql + IMMUTABLE SECURITY DEFINER +AS $function$ +DECLARE + ret geocode_namedplace_country_v1%rowtype; + iso TEXT[]; + i INT; + fails INT[]; + BEGIN + + SELECT array_agg((SELECT iso2 FROM country_decoder WHERE lower(r.c) = ANY (synonyms))) i FROM (SELECT unnest(country)::text AS c) r INTO iso; + + FOR i IN 1 .. array_upper(places, 1) LOOP + + SELECT q, c, (SELECT gp.the_geom AS geom FROM global_cities_points gp WHERE gp.lowername = lower(x.q) AND gp.iso2 = x.i ORDER BY population DESC LIMIT 1), TRUE as success FROM (SELECT unnest(places) q, unnest(iso) i, unnest(country) c) x INTO ret; + IF ret.geom IS NOT NULL THEN + RETURN NEXT ret; + ELSE + fails := array_append(fails, i); + END IF; + END LOOP; + RETURN; +END +$function$