146 lines
2.6 KiB
Shell
Executable file
146 lines
2.6 KiB
Shell
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
echo "usage: $0 DE_VG250.gpkg"
|
|
exit 1
|
|
fi
|
|
|
|
INPUT="$1"
|
|
|
|
if [ ! -f "$INPUT" ]; then
|
|
echo "file not found: $INPUT"
|
|
exit 1
|
|
fi
|
|
|
|
: "${DATABASE_URL:?DATABASE_URL must be set}"
|
|
|
|
echo "Available layers:"
|
|
ogrinfo "$INPUT" | sed -n '1,120p'
|
|
|
|
echo
|
|
echo "Inspecting vg250_krs..."
|
|
ogrinfo "$INPUT" vg250_krs -so
|
|
|
|
echo
|
|
echo "Importing only vg250_krs..."
|
|
|
|
# Remove an old failed import.
|
|
psql "$DATABASE_URL" <<'SQL'
|
|
DROP TABLE IF EXISTS vg250_krs_import CASCADE;
|
|
SQL
|
|
|
|
# IMPORTANT:
|
|
# The layer name is explicitly specified here.
|
|
ogr2ogr \
|
|
-f PostgreSQL \
|
|
"$DATABASE_URL" \
|
|
"$INPUT" \
|
|
vg250_krs \
|
|
-nln vg250_krs_import \
|
|
-nlt PROMOTE_TO_MULTI \
|
|
-t_srs EPSG:4326 \
|
|
-lco GEOMETRY_NAME=wkb_geometry \
|
|
-overwrite
|
|
|
|
echo
|
|
echo "Source import completed."
|
|
|
|
echo
|
|
echo "Imported source columns:"
|
|
psql "$DATABASE_URL" <<'SQL'
|
|
SELECT
|
|
column_name,
|
|
data_type
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'vg250_krs_import'
|
|
ORDER BY ordinal_position;
|
|
SQL
|
|
|
|
echo
|
|
echo "Creating county boundaries..."
|
|
|
|
psql "$DATABASE_URL" <<'SQL'
|
|
BEGIN;
|
|
|
|
TRUNCATE county_crossings;
|
|
TRUNCATE county_boundaries RESTART IDENTITY CASCADE;
|
|
|
|
INSERT INTO county_boundaries (
|
|
name,
|
|
geometry
|
|
)
|
|
SELECT
|
|
COALESCE(
|
|
NULLIF(TRIM(gen), ''),
|
|
NULLIF(TRIM(bez), ''),
|
|
NULLIF(TRIM(ars), ''),
|
|
'unknown'
|
|
) AS name,
|
|
|
|
ST_Multi(
|
|
ST_CollectionExtract(
|
|
ST_MakeValid(wkb_geometry),
|
|
3
|
|
)
|
|
)::geometry(MultiPolygon, 4326) AS geometry
|
|
|
|
FROM vg250_krs_import
|
|
|
|
WHERE
|
|
wkb_geometry IS NOT NULL
|
|
AND NOT ST_IsEmpty(wkb_geometry);
|
|
|
|
COMMIT;
|
|
SQL
|
|
|
|
echo
|
|
echo "Removing temporary import table..."
|
|
|
|
psql "$DATABASE_URL" <<'SQL'
|
|
DROP TABLE vg250_krs_import;
|
|
SQL
|
|
|
|
echo
|
|
echo "Recreating spatial index..."
|
|
|
|
psql "$DATABASE_URL" <<'SQL'
|
|
DROP INDEX IF EXISTS county_boundaries_geometry_idx;
|
|
|
|
CREATE INDEX county_boundaries_geometry_idx
|
|
ON county_boundaries
|
|
USING GIST (geometry);
|
|
|
|
ANALYZE county_boundaries;
|
|
SQL
|
|
|
|
echo
|
|
echo "=========================================="
|
|
echo " Imported counties"
|
|
echo "=========================================="
|
|
|
|
psql "$DATABASE_URL" <<'SQL'
|
|
SELECT
|
|
COUNT(*) AS total,
|
|
COUNT(*) FILTER (WHERE geometry IS NOT NULL) AS with_geometry,
|
|
COUNT(*) FILTER (WHERE ST_IsValid(geometry)) AS valid_geometry
|
|
FROM county_boundaries;
|
|
SQL
|
|
|
|
echo
|
|
echo "First 20 counties:"
|
|
echo
|
|
|
|
psql "$DATABASE_URL" <<'SQL'
|
|
SELECT
|
|
id,
|
|
name,
|
|
ST_GeometryType(geometry) AS geometry_type,
|
|
ST_SRID(geometry) AS srid
|
|
FROM county_boundaries
|
|
ORDER BY name
|
|
LIMIT 20;
|
|
SQL
|
|
|
|
echo
|
|
echo "Import completed successfully."
|