Cleans countries in postal codes for extension
This commit is contained in:
@@ -5,18 +5,18 @@
|
|||||||
CREATE FUNCTION geocode_postalcode_polygons(code text[], inputcountries text[]) RETURNS SETOF geocode_namedplace_country_v1
|
CREATE FUNCTION geocode_postalcode_polygons(code text[], inputcountries text[]) RETURNS SETOF geocode_namedplace_country_v1
|
||||||
LANGUAGE plpgsql SECURITY DEFINER
|
LANGUAGE plpgsql SECURITY DEFINER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
ret geocode_namedplace_country_v1%rowtype;
|
ret geocode_namedplace_country_v1%rowtype;
|
||||||
adm text[];
|
adm text[];
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
SELECT INTO adm array_agg((SELECT adm0_a3 FROM admin0_synonyms WHERE name_ = lower(regexp_replace(b.c, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text LIMIT 1)) FROM (SELECT UNNEST(inputcountries) c) b;
|
SELECT INTO adm array_agg((SELECT adm0_a3 FROM admin0_synonyms WHERE name_ = lower(regexp_replace(b.c, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text LIMIT 1)) FROM (SELECT UNNEST(inputcountries) c) b;
|
||||||
|
|
||||||
FOR ret IN
|
FOR ret IN
|
||||||
SELECT
|
SELECT
|
||||||
q, c, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
q, c, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
q, c, (
|
q, c, (
|
||||||
SELECT the_geom
|
SELECT the_geom
|
||||||
FROM global_postal_code_polygons
|
FROM global_postal_code_polygons
|
||||||
@@ -25,7 +25,7 @@ CREATE FUNCTION geocode_postalcode_polygons(code text[], inputcountries text[])
|
|||||||
) geom
|
) geom
|
||||||
FROM (SELECT unnest(code) q, unnest(inputcountries) c, unnest(adm) a) d
|
FROM (SELECT unnest(code) q, unnest(inputcountries) c, unnest(adm) a) d
|
||||||
) v
|
) v
|
||||||
LOOP
|
LOOP
|
||||||
RETURN NEXT ret;
|
RETURN NEXT ret;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN;
|
RETURN;
|
||||||
@@ -38,26 +38,26 @@ $$;
|
|||||||
CREATE FUNCTION geocode_postalcode_polygons(code text[], inputcountry text) RETURNS SETOF geocode_namedplace_v1
|
CREATE FUNCTION geocode_postalcode_polygons(code text[], inputcountry text) RETURNS SETOF geocode_namedplace_v1
|
||||||
LANGUAGE plpgsql SECURITY DEFINER
|
LANGUAGE plpgsql SECURITY DEFINER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
ret geocode_namedplace_v1%rowtype;
|
ret geocode_namedplace_v1%rowtype;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR ret IN
|
FOR ret IN
|
||||||
SELECT
|
SELECT
|
||||||
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
q, (
|
q, (
|
||||||
SELECT the_geom
|
SELECT the_geom
|
||||||
FROM global_postal_code_polygons
|
FROM global_postal_code_polygons
|
||||||
WHERE postal_code = upper(d.q)
|
WHERE postal_code = upper(d.q)
|
||||||
AND iso3 = (
|
AND iso3 = (
|
||||||
SELECT iso3 FROM country_decoder WHERE
|
SELECT iso3 FROM country_decoder WHERE
|
||||||
lower(inputcountry) = ANY (synonyms) LIMIT 1
|
lower(regexp_replace(inputcountry, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text = ANY (synonyms) LIMIT 1
|
||||||
)
|
)
|
||||||
) geom
|
) geom
|
||||||
FROM (SELECT unnest(code) q) d
|
FROM (SELECT unnest(code) q) d
|
||||||
) v
|
) v
|
||||||
LOOP
|
LOOP
|
||||||
RETURN NEXT ret;
|
RETURN NEXT ret;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN;
|
RETURN;
|
||||||
@@ -69,23 +69,23 @@ $$;
|
|||||||
CREATE FUNCTION geocode_postalcode_polygons(code text[]) RETURNS SETOF geocode_namedplace_v1
|
CREATE FUNCTION geocode_postalcode_polygons(code text[]) RETURNS SETOF geocode_namedplace_v1
|
||||||
LANGUAGE plpgsql SECURITY DEFINER
|
LANGUAGE plpgsql SECURITY DEFINER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
ret geocode_namedplace_v1%rowtype;
|
ret geocode_namedplace_v1%rowtype;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR ret IN
|
FOR ret IN
|
||||||
SELECT
|
SELECT
|
||||||
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
q, (
|
q, (
|
||||||
SELECT the_geom
|
SELECT the_geom
|
||||||
FROM global_postal_code_polygons
|
FROM global_postal_code_polygons
|
||||||
WHERE postal_code = upper(d.q)
|
WHERE postal_code = upper(d.q)
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
) geom
|
) geom
|
||||||
FROM (SELECT unnest(code) q) d
|
FROM (SELECT unnest(code) q) d
|
||||||
) v
|
) v
|
||||||
LOOP
|
LOOP
|
||||||
RETURN NEXT ret;
|
RETURN NEXT ret;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN;
|
RETURN;
|
||||||
@@ -98,27 +98,27 @@ $$;
|
|||||||
CREATE FUNCTION geocode_postalcode_points(code text[], inputcountry text) RETURNS SETOF geocode_namedplace_v1
|
CREATE FUNCTION geocode_postalcode_points(code text[], inputcountry text) RETURNS SETOF geocode_namedplace_v1
|
||||||
LANGUAGE plpgsql SECURITY DEFINER
|
LANGUAGE plpgsql SECURITY DEFINER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
ret geocode_namedplace_v1%rowtype;
|
ret geocode_namedplace_v1%rowtype;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR ret IN
|
FOR ret IN
|
||||||
SELECT
|
SELECT
|
||||||
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
q, (
|
q, (
|
||||||
SELECT the_geom
|
SELECT the_geom
|
||||||
FROM global_postal_code_points
|
FROM global_postal_code_points
|
||||||
WHERE postal_code = upper(d.q)
|
WHERE postal_code = upper(d.q)
|
||||||
AND iso3 = (
|
AND iso3 = (
|
||||||
SELECT iso3 FROM country_decoder WHERE
|
SELECT iso3 FROM country_decoder WHERE
|
||||||
lower(inputcountry) = ANY (synonyms) LIMIT 1
|
lower(regexp_replace(inputcountry, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text = ANY (synonyms) LIMIT 1
|
||||||
)
|
)
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
) geom
|
) geom
|
||||||
FROM (SELECT unnest(code) q) d
|
FROM (SELECT unnest(code) q) d
|
||||||
) v
|
) v
|
||||||
LOOP
|
LOOP
|
||||||
RETURN NEXT ret;
|
RETURN NEXT ret;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN;
|
RETURN;
|
||||||
@@ -130,27 +130,27 @@ $$;
|
|||||||
CREATE FUNCTION geocode_postalcode_points(code integer[], inputcountries text[]) RETURNS SETOF geocode_postalint_country_v1
|
CREATE FUNCTION geocode_postalcode_points(code integer[], inputcountries text[]) RETURNS SETOF geocode_postalint_country_v1
|
||||||
LANGUAGE plpgsql SECURITY DEFINER
|
LANGUAGE plpgsql SECURITY DEFINER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
ret geocode_postalint_country_v1%rowtype;
|
ret geocode_postalint_country_v1%rowtype;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR ret IN
|
FOR ret IN
|
||||||
SELECT
|
SELECT
|
||||||
q, c, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
q, c, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
q, c, (
|
q, c, (
|
||||||
SELECT the_geom
|
SELECT the_geom
|
||||||
FROM global_postal_code_points
|
FROM global_postal_code_points
|
||||||
WHERE postal_code_num = d.q
|
WHERE postal_code_num = d.q
|
||||||
AND iso3 = (
|
AND iso3 = (
|
||||||
SELECT iso3 FROM country_decoder WHERE
|
SELECT iso3 FROM country_decoder WHERE
|
||||||
lower(d.c) = ANY (synonyms) LIMIT 1
|
lower(regexp_replace(d.c, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text = ANY (synonyms) LIMIT 1
|
||||||
)
|
)
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
) geom
|
) geom
|
||||||
FROM (SELECT unnest(code) q, unnest(inputcountries) c) d
|
FROM (SELECT unnest(code) q, unnest(inputcountries) c) d
|
||||||
) v
|
) v
|
||||||
LOOP
|
LOOP
|
||||||
RETURN NEXT ret;
|
RETURN NEXT ret;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN;
|
RETURN;
|
||||||
@@ -162,23 +162,23 @@ $$;
|
|||||||
CREATE FUNCTION geocode_postalcode_points(code text[]) RETURNS SETOF geocode_namedplace_v1
|
CREATE FUNCTION geocode_postalcode_points(code text[]) RETURNS SETOF geocode_namedplace_v1
|
||||||
LANGUAGE plpgsql SECURITY DEFINER
|
LANGUAGE plpgsql SECURITY DEFINER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARElower(regexp_replace(inputcountry, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text
|
||||||
ret geocode_namedplace_v1%rowtype;
|
ret geocode_namedplace_v1%rowtype;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR ret IN
|
FOR ret IN
|
||||||
SELECT
|
SELECT
|
||||||
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
q, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
q, (
|
q, (
|
||||||
SELECT the_geom
|
SELECT the_geom
|
||||||
FROM global_postal_code_points
|
FROM global_postal_code_points
|
||||||
WHERE postal_code = upper(d.q)
|
WHERE postal_code = upper(d.q)
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
) geom
|
) geom
|
||||||
FROM (SELECT unnest(code) q) d
|
FROM (SELECT unnest(code) q) d
|
||||||
) v
|
) v
|
||||||
LOOP
|
LOOP
|
||||||
RETURN NEXT ret;
|
RETURN NEXT ret;
|
||||||
END LOOP;
|
END LOOP;
|
||||||
RETURN;
|
RETURN;
|
||||||
@@ -190,7 +190,7 @@ $$;
|
|||||||
CREATE FUNCTION geocode_postalcode_points(code text[], inputcountries text[]) RETURNS SETOF geocode_place_country_iso_v1
|
CREATE FUNCTION geocode_postalcode_points(code text[], inputcountries text[]) RETURNS SETOF geocode_place_country_iso_v1
|
||||||
LANGUAGE plpgsql SECURITY DEFINER
|
LANGUAGE plpgsql SECURITY DEFINER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
ret geocode_place_country_iso_v1%rowtype;
|
ret geocode_place_country_iso_v1%rowtype;
|
||||||
geo GEOMETRY;
|
geo GEOMETRY;
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -199,7 +199,7 @@ CREATE FUNCTION geocode_postalcode_points(code text[], inputcountries text[]) RE
|
|||||||
SELECT
|
SELECT
|
||||||
q, c, iso3, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
q, c, iso3, geom, CASE WHEN geom IS NULL THEN FALSE ELSE TRUE END AS success
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
q, c, (SELECT iso3 FROM country_decoder WHERE
|
q, c, (SELECT iso3 FROM country_decoder WHERE
|
||||||
lower(d.c) = ANY (synonyms) LIMIT 1) iso3, (
|
lower(d.c) = ANY (synonyms) LIMIT 1) iso3, (
|
||||||
SELECT the_geom
|
SELECT the_geom
|
||||||
@@ -207,13 +207,13 @@ CREATE FUNCTION geocode_postalcode_points(code text[], inputcountries text[]) RE
|
|||||||
WHERE postal_code = upper(d.q)
|
WHERE postal_code = upper(d.q)
|
||||||
AND iso3 = (
|
AND iso3 = (
|
||||||
SELECT iso3 FROM country_decoder WHERE
|
SELECT iso3 FROM country_decoder WHERE
|
||||||
lower(d.c) = ANY (synonyms) LIMIT 1
|
lower(regexp_replace(d.c, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text = ANY (synonyms) LIMIT 1
|
||||||
)
|
)
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
) geom
|
) geom
|
||||||
FROM (SELECT unnest(code) q, unnest(inputcountries) c) d
|
FROM (SELECT unnest(code) q, unnest(inputcountries) c) d
|
||||||
) v
|
) v
|
||||||
LOOP
|
LOOP
|
||||||
IF ret.geom IS NULL AND ret.iso3 = 'GBR' THEN
|
IF ret.geom IS NULL AND ret.iso3 = 'GBR' THEN
|
||||||
geo := geocode_greatbritain_outward(ret.q);
|
geo := geocode_greatbritain_outward(ret.q);
|
||||||
IF geo IS NOT NULL THEN
|
IF geo IS NOT NULL THEN
|
||||||
@@ -239,7 +239,7 @@ CREATE FUNCTION geocode_greatbritain_outward(code text) RETURNS geometry
|
|||||||
geom := NULL;
|
geom := NULL;
|
||||||
IF array_length(string_to_array(code,' '),1) = 2 THEN
|
IF array_length(string_to_array(code,' '),1) = 2 THEN
|
||||||
code := split_part(code, ' ', 1) || ' ' || rpad(substring(split_part(code, ' ', 2), 1, 1), 3, '#');
|
code := split_part(code, ' ', 1) || ' ' || rpad(substring(split_part(code, ' ', 2), 1, 1), 3, '#');
|
||||||
SELECT the_geom INTO geom FROM global_postal_code_points WHERE
|
SELECT the_geom INTO geom FROM global_postal_code_points WHERE
|
||||||
postal_code = code
|
postal_code = code
|
||||||
AND iso3 = 'GBR'
|
AND iso3 = 'GBR'
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
@@ -252,15 +252,15 @@ $$;
|
|||||||
CREATE FUNCTION admin0_available_services(name text[]) RETURNS SETOF available_services_v1
|
CREATE FUNCTION admin0_available_services(name text[]) RETURNS SETOF available_services_v1
|
||||||
LANGUAGE plpgsql SECURITY DEFINER
|
LANGUAGE plpgsql SECURITY DEFINER
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
ret available_services_v1%rowtype;
|
ret available_services_v1%rowtype;
|
||||||
BEGIN RETURN QUERY
|
BEGIN RETURN QUERY
|
||||||
SELECT d.q, n.adm0_a3, n.postal_code_points, n.postal_code_polygons FROM
|
SELECT d.q, n.adm0_a3, n.postal_code_points, n.postal_code_polygons FROM
|
||||||
(
|
(
|
||||||
SELECT q, lower(regexp_replace(q, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text x FROM
|
SELECT q, lower(regexp_replace(q, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text x FROM
|
||||||
(
|
(
|
||||||
SELECT unnest(name) q
|
SELECT unnest(name) q
|
||||||
)
|
)
|
||||||
g) d LEFT OUTER JOIN admin0_synonyms s ON name_ = d.x LEFT OUTER JOIN available_services n ON s.adm0_a3 = n.adm0_a3 GROUP BY d.q, n.adm0_a3, n.postal_code_points, n.postal_code_polygons;
|
g) d LEFT OUTER JOIN admin0_synonyms s ON name_ = d.x LEFT OUTER JOIN available_services n ON s.adm0_a3 = n.adm0_a3 GROUP BY d.q, n.adm0_a3, n.postal_code_points, n.postal_code_polygons;
|
||||||
END
|
END
|
||||||
$$;
|
$$;
|
||||||
|
|||||||
Reference in New Issue
Block a user