structuring for a make file
This commit is contained in:
75
geocoder/admin0/sql/build_synonym_table.sql
Normal file
75
geocoder/admin0/sql/build_synonym_table.sql
Normal 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));
|
||||
27
geocoder/admin0/sql/geocoder.sql
Normal file
27
geocoder/admin0/sql/geocoder.sql
Normal 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;
|
||||
26
geocoder/admin0/sql/subdivide_polygons.sql
Normal file
26
geocoder/admin0/sql/subdivide_polygons.sql
Normal 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';
|
||||
Reference in New Issue
Block a user