29 lines
732 B
PL/PgSQL
29 lines
732 B
PL/PgSQL
CREATE OR REPLACE FUNCTION geocode_admin0_polygons(name text[])
|
|
RETURNS SETOF geocode_admin_v1 AS $$
|
|
DECLARE
|
|
ret geocode_admin_v1%rowtype;
|
|
BEGIN
|
|
FOR ret IN
|
|
SELECT
|
|
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
|
FROM (
|
|
SELECT
|
|
q, (
|
|
SELECT the_geom
|
|
FROM ne_admin0_v3
|
|
WHERE adm0_a3 = (
|
|
SELECT adm0_a3 FROM admin0_synonyms
|
|
WHERE name_ =
|
|
lower(regexp_replace(d.q, '[^A-z\u00C0-\u00ff]+', '', 'g'))
|
|
ORDER BY rank ASC LIMIT 1
|
|
)
|
|
) geom
|
|
FROM (SELECT unnest(name) q) d
|
|
) v
|
|
LOOP
|
|
RETURN NEXT ret;
|
|
END LOOP;
|
|
RETURN;
|
|
END
|
|
$$ LANGUAGE 'plpgsql' SECURITY DEFINER;
|