structuring for a make file

This commit is contained in:
andrewxhill
2014-08-04 18:29:28 -04:00
parent 0156731a20
commit 3e813b9868
5 changed files with 360 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
---- ADMIN0_SYNONYMS ---
-- insert data from ne_admin_0 into admin0_synonyms
-- the name column from ne_10m_countries is assigned a rank of 0
INSERT INTO admin0_synonyms (name, rank, adm0_a3)
SELECT name, 0, adm0_a3
FROM ne_admin0_v3;
-- separate data from the name_alt column from ne_admin0_v3 using `|` as a delimiter
-- and insert into admin1_synonyms as new rows with a rank=1
INSERT INTO admin0_synonyms (name, rank, adm0_a3)
SELECT
regexp_split_to_table(ne_admin0_v3.name_alt, E'\\|' ) AS name, 1, adm0_a3
FROM
ne_admin0_v3;
-- insert ad0_a3 codes as synonyms with a rank = 3
INSERT INTO admin0_synonyms (name, rank, adm0_a3)
SELECT
adm0_a3, 3, adm0_a3
FROM
ne_admin0_v3;
-- insert abbrv as name with a rank = 4
INSERT INTO admin0_synonyms (name, rank, adm0_a3)
SELECT
abbrev, 4, adm0_a3
FROM
ne_admin0_v3;
-- insert formal_en as name with a rank = 5
INSERT INTO admin0_synonyms (name, rank, adm0_a3)
SELECT
formal_en, 5, adm0_a3
FROM
ne_admin0_v3;
-- insert brk_name as name with a rank = 6
INSERT INTO admin0_synonyms (name, rank, adm0_a3)
SELECT
brk_name, 6, adm0_a3
FROM
ne_admin0_v3;
-- insert formal_fr as name with a rank = 7
INSERT INTO admin0_synonyms (name, rank, adm0_a3)
SELECT
formal_fr, 7, adm0_a3
FROM
ne_admin0_v3;
-- insert iso_a2 as name with a rank = 8
INSERT INTO admin0_synonyms (name, rank, adm0_a3)
SELECT
iso_a2, 8, adm0_a3
FROM
ne_admin0_v3;
-- remove all cases where name is NULL
DELETE FROM admin0_synonyms WHERE name IS NULL;
-- remove all cases where a name is duplicated with a higher rank
DELETE FROM admin0_synonyms
WHERE cartodb_id IN (
SELECT
cartodb_id
FROM
admin0_synonyms a
WHERE
0 < (
SELECT count(*)
FROM admin0_synonyms
WHERE name_ = a.name_
AND adm0_a3 = a.adm0_a3
AND rank < a.rank));

View File

@@ -0,0 +1,27 @@
CREATE OR REPLACE FUNCTION test_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-zA-Z]', '', '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;

View File

@@ -0,0 +1,26 @@
---- Subdivide France into subregions ----
--- Assumes fresh NaturalEarth admin0 dataset
-- Split French Guiane from France
INSERT INTO ne_admin0_v3 (the_geom, adm0_a3, name)
WITH a AS (SELECT (ST_Dump(the_geom)).geom geom,adm0_a3 FROM ne_admin0_v3 WHERE ST_Intersects(the_geom, CDB_LatLNg(4, -53)))
SELECT geom, 'GUF', 'French Guiane' FROM a WHERE ST_Intersects(geom, ST_Buffer(CDB_LatLNg(4, -53), 8));
-- Split Corse from France
INSERT INTO ne_admin0_v3 (the_geom, adm0_a3, name)
WITH a AS (SELECT (ST_Dump(the_geom)).geom geom,adm0_a3 FROM ne_admin0_v3 WHERE ST_Intersects(the_geom, CDB_LatLNg(42.14, 9.12)))
SELECT ST_Collect(geom), 'FRH', 'Corse' FROM a WHERE ST_Intersects(geom, ST_Buffer(CDB_LatLNg(42.14, 9.12), 2));
-- Split Reunion from France
INSERT INTO ne_admin0_v3 (the_geom, adm0_a3, name)
WITH a AS (SELECT (ST_Dump(the_geom)).geom geom,adm0_a3 FROM ne_admin0_v3 WHERE ST_Intersects(the_geom, CDB_LatLNg(-21.12, 55.51)))
SELECT ST_Collect(geom), 'REU', 'Reunion' FROM a WHERE ST_Intersects(geom, ST_Buffer(CDB_LatLNg(-21.12, 55.51),2));
-- Remove the above three from the FRA polygon
WITH a AS (SELECT (ST_Dump(the_geom)).geom geom FROM ne_admin0_v3 WHERE adm0_a3 = 'FRA')
UPDATE ne_admin0_v3 SET the_geom = (SELECT ST_Union(geom) FROM a WHERE NOT ST_intersects(geom, (SELECT ST_Union(the_geom) FROM ne_admin0_v3 WHERE adm0_a3 IN ('GUF', 'FRH', 'REU')))) WHERE adm0_a3 = 'FRA';