Skip to content

Instantly share code, notes, and snippets.

@vilhelmen
Created January 28, 2023 01:18
Show Gist options
  • Save vilhelmen/556f002088504f6e5d47c8fb37c83d55 to your computer and use it in GitHub Desktop.
Save vilhelmen/556f002088504f6e5d47c8fb37c83d55 to your computer and use it in GitHub Desktop.
GADM 4.1 importer
#!/bin/bash
# You probably don't care about States, cities, counties, etc.
cat <<EOF
BEGIN;
DROP TABLE IF EXISTS gadm.adm_1;
DROP TABLE IF EXISTS gadm.adm_2;
DROP TABLE IF EXISTS gadm.adm_3;
DROP TABLE IF EXISTS gadm.adm_4;
DROP TABLE IF EXISTS gadm.adm_5;
COMMIT;
EOF
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "BAD PARAM COUNT! Usage: ${0} /path/to/gadm-levels.gpkg | psql ..."
fi
# SCREAMING ogr2ogr won't take a gpkg from stdin because it's missing a "conformat extension"
# Or because it can't skip tp the end of stdin. Idk. Or both.
ogr2ogr -f PGDump --config PG_USE_COPY YES -lco SCHEMA=gadm '/vsistdout/' "$1"
cat <<EOF
BEGIN;
\echo Indexng adm_0
CREATE INDEX ON gadm.adm_0 (gid_0);
CREATE INDEX ON gadm.adm_0 (country);
COMMIT;
BEGIN;
\echo Building gadm.country_borders
-- GO AWAY CASPIAN SEA WHO INVITED YOU YOU'RE NOT EVEN A COUNTRY
-- We also now have some mystery shapes for China, India, and Pakistan
CREATE MATERIALIZED VIEW gadm.country_borders AS SELECT gid_0 AS iso3, country AS name, geom FROM gadm.adm_0 WHERE gid_0 NOT IN ('XCA', 'Z01', 'Z02', 'Z03', 'Z04', 'Z05', 'Z06', 'Z07', 'Z08', 'Z09') WITH DATA;
CREATE INDEX ON gadm.country_borders (name);
CREATE INDEX ON gadm.country_borders (iso3);
CREATE INDEX ON gadm.country_borders USING gist(geom);
COMMIT;
EOF
#!/bin/bash
cat <<EOF
BEGIN;
\echo Indexng adm_1
CREATE INDEX ON gadm.adm_1 (gid_0);
CREATE INDEX ON gadm.adm_1 (country);
CREATE INDEX ON gadm.adm_1 (gid_1);
CREATE INDEX ON gadm.adm_1 (name_1);
CREATE INDEX ON gadm.adm_1 (iso_1);
\echo Indexng adm_2
CREATE INDEX ON gadm.adm_2 (gid_0);
CREATE INDEX ON gadm.adm_2 (country);
CREATE INDEX ON gadm.adm_2 (gid_1);
CREATE INDEX ON gadm.adm_2 (name_1);
CREATE INDEX ON gadm.adm_2 (gid_2);
CREATE INDEX ON gadm.adm_2 (name_2);
\echo Indexng adm_3
CREATE INDEX ON gadm.adm_3 (gid_0);
CREATE INDEX ON gadm.adm_3 (country);
CREATE INDEX ON gadm.adm_3 (gid_1);
CREATE INDEX ON gadm.adm_3 (name_1);
CREATE INDEX ON gadm.adm_3 (gid_2);
CREATE INDEX ON gadm.adm_3 (name_2);
CREATE INDEX ON gadm.adm_3 (gid_3);
CREATE INDEX ON gadm.adm_3 (name_3);
\echo Indexng adm_4
CREATE INDEX ON gadm.adm_4 (gid_0);
CREATE INDEX ON gadm.adm_4 (country);
CREATE INDEX ON gadm.adm_4 (gid_1);
CREATE INDEX ON gadm.adm_4 (name_1);
CREATE INDEX ON gadm.adm_4 (gid_2);
CREATE INDEX ON gadm.adm_4 (name_2);
CREATE INDEX ON gadm.adm_4 (gid_3);
CREATE INDEX ON gadm.adm_4 (name_3);
CREATE INDEX ON gadm.adm_4 (gid_4);
CREATE INDEX ON gadm.adm_4 (name_4);
\echo Indexng adm_5
CREATE INDEX ON gadm.adm_5 (gid_0);
CREATE INDEX ON gadm.adm_5 (country);
CREATE INDEX ON gadm.adm_5 (gid_1);
CREATE INDEX ON gadm.adm_5 (name_1);
CREATE INDEX ON gadm.adm_5 (gid_2);
CREATE INDEX ON gadm.adm_5 (name_2);
CREATE INDEX ON gadm.adm_5 (gid_3);
CREATE INDEX ON gadm.adm_5 (name_3);
CREATE INDEX ON gadm.adm_5 (gid_4);
CREATE INDEX ON gadm.adm_5 (name_4);
CREATE INDEX ON gadm.adm_5 (gid_5);
CREATE INDEX ON gadm.adm_5 (name_5);
COMMIT;
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment