added CAN filter to postal code poly geocoder

This commit is contained in:
andrewxhill
2014-09-04 10:23:29 -04:00
parent 005fecee19
commit 2eefa8cfd5
2 changed files with 8 additions and 6 deletions
+1 -1
View File
@@ -7,6 +7,6 @@ CREATE OR REPLACE FUNCTION geocode_admin0_polygons(name text[])
BEGIN BEGIN
-- FOR ret IN -- FOR ret IN
RETURN QUERY RETURN QUERY
SELECT d.q, n.the_geom as geom, CASE WHEN s.adm0_a3 IS NULL then FALSE ELSE TRUE END AS success FROM (SELECT q, lower(regexp_replace(q, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text x FROM (SELECT unnest(name) q) g) d LEFT OUTER JOIN admin0_synonyms s ON name_ = d.x LEFT OUTER JOIN ne_admin0_v3 n ON s.adm0_a3 = n.adm0_a3; SELECT d.q, n.the_geom as geom, CASE WHEN s.adm0_a3 IS NULL then FALSE ELSE TRUE END AS success FROM (SELECT q, lower(regexp_replace(q, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text x FROM (SELECT unnest(name) q) g) d LEFT OUTER JOIN admin0_synonyms s ON name_ = d.x LEFT OUTER JOIN ne_admin0_v3 n ON s.adm0_a3 = n.adm0_a3 GROUP BY d.q, n.the_geom, s.adm0_a3;
END END
$$ LANGUAGE 'plpgsql' SECURITY DEFINER; $$ LANGUAGE 'plpgsql' SECURITY DEFINER;
+7 -5
View File
@@ -4,7 +4,11 @@ CREATE OR REPLACE FUNCTION geocode_postalcode_polygons(code text[], inputcountri
RETURNS SETOF geocode_namedplace_country_v1 AS $$ RETURNS SETOF geocode_namedplace_country_v1 AS $$
DECLARE DECLARE
ret geocode_namedplace_country_v1%rowtype; ret geocode_namedplace_country_v1%rowtype;
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;
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
@@ -13,12 +17,10 @@ CREATE OR REPLACE FUNCTION geocode_postalcode_polygons(code text[], inputcountri
q, c, ( q, c, (
SELECT the_geom SELECT the_geom
FROM postal_code_polygons FROM postal_code_polygons
WHERE postal_code = upper(d.q) WHERE postal_code = CASE WHEN a = 'CAN' THEN substring(upper(d.q) from 1 for 3) ELSE upper(d.q) END
AND adm0_a3 = ( AND adm0_a3 = a
SELECT adm0_a3 FROM admin0_synonyms WHERE name_ = lower(regexp_replace(d.c, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g'))::text LIMIT 1
)
) geom ) geom
FROM (SELECT unnest(code) q, unnest(inputcountries) c) d FROM (SELECT unnest(code) q, unnest(inputcountries) c, unnest(adm) a) d
) v ) v
LOOP LOOP
RETURN NEXT ret; RETURN NEXT ret;