Siin on sinu OSM andmete importimise skript PostGIS andmebaasi korralikult vormindatud ja loetavamaks tehtud versioon. Olen parandanud süntaksit, lisanud kommentaare ja ühtlustanud stiili:
#!/usr/bin/env bash
# Ühenduse andmed
destination_host='localhost'
destination_port='5432'
destination_user='osm'
destination_password='osm'
destination_dbname='data'
destination_schema='aaa_osm'
destination_SRS='EPSG:3301'
# PostgreSQL ühenduse string
destination="host='${destination_host}' port='${destination_port}' dbname='${destination_dbname}' user='${destination_user}' password='${destination_password}'"
export PGPASSWORD=${destination_password}
CONNECTION_NAME="-h ${destination_host} -p ${destination_port} -d ${destination_dbname} -U ${destination_user}"
# Skeemi loomine, kui see veel ei eksisteeri
psql ${CONNECTION_NAME} -c "CREATE SCHEMA IF NOT EXISTS ${destination_schema};"
# Liigume ajutisse kausta
cd /tmp
# Laadime alla Eesti OSM andmed
wget https://download.geofabrik.de/europe/estonia-latest.osm.pbf
# Impordime andmed PostGIS andmebaasi
osm2pgsql \
--create \
--slim \
--cache 2000 \
--number-processes 4 \
--database ${destination_dbname} \
--username ${destination_user} \
--host ${destination_host} \
--port ${destination_port} \
--output=flex \
--style=lua/roads.lua \
-E 3301 \
-p osm \
/tmp/estonia-latest.osm.pbf
-p parameeter määrab tabelite eesliite. Kui soovid, et tabelid oleksid näiteks osm_roads, osm_buildings, siis kasuta -p osm.Siin on bash-skript, mis loob sinu OSM andmebaasis uue tabeli osm_buildings, kasutades olemasolevat osm_polygon tabelit. Skript sisaldab ka geomeetriaindeksi loomist ja andmebaasi optimeerimist.
create_osm_buildings.sh#!/usr/bin/env bash
# Loome uue tabeli ainult hoonete jaoks
psql ${CONNECTION_NAME} <<EOF
DROP TABLE IF EXISTS ${destination_schema}.osm_buildings;
CREATE TABLE ${destination_schema}.osm_buildings AS
SELECT
osm_id,
name,
building,
way AS geom
FROM
${destination_schema}.osm_polygon
WHERE
building IS NOT NULL;
-- Loome geomeetriaindeksi
CREATE INDEX idx_osm_buildings_geom ON ${destination_schema}.osm_buildings USING GIST (geom);
-- Optimeerime tabeli
VACUUM ANALYZE ${destination_schema}.osm_buildings;
EOF
create_osm_buildings.sh.Tee see käivitatavaks:
chmod +x create_osm_buildings.sh
Käivita:
./create_osm_buildings.sh
Väga hea küsimus! Vaatame su koodi üle ja täiustame seda nii, et:
Jah, OSM andmetes on hooned olemas, kui kasutad osm2pgsql importi. Need salvestatakse tavaliselt tabelisse nagu planet_osm_polygon, kus building IS NOT NULL.
Kuid: HOTOSM hoonete andmed võivad olla täpsemad, ajakohasemad või spetsiaalselt puhastatud. Seega nende lisamine võib olla kasulik, kui soovid:
#!/usr/bin/env bash
# Muutujad
SCHEMA=${destination_schema}
TABLE_NAME="buildings_hotosm"
file_name="hotosm_est_buildings"
# Lae alla ja paki lahti
cd /tmp
wget https://export.hotosm.org/downloads/1df48435-4f56-4a7a-b8b2-c6ad8f474a65/hotosm_est_buildings_gpkg.zip
unzip -o ${file_name}_gpkg.zip
# Eemalda olemasolev tabel (kui on)
psql ${CONNECTION_NAME} -c "DROP TABLE IF EXISTS ${SCHEMA}.${TABLE_NAME};"
# Impordi GPKG PostGIS andmebaasi, teisendades koordinaadid EPSG:3301
ogr2ogr \
--config PG_USE_COPY YES \
-f PostgreSQL PG:"dbname='${destination_dbname}' host='${destination_host}' port='${destination_port}' user='${destination_user}' password='${destination_password}' sslmode=disable active_schema=${SCHEMA}" \
-nln ${TABLE_NAME} \
-s_srs EPSG:4326 \
-t_srs EPSG:3301 \
/tmp/${file_name}.gpkg
# Optimeeri tabel
psql ${CONNECTION_NAME} -c "VACUUM (FULL) ${SCHEMA}.${TABLE_NAME};"
Eesti katastriüksuste andmed on kättesaadavad Maa- ja Ruumiameti (MaRu) WFS teenuse kaudu. Teenus sisaldab katastriüksuste polügone ja punkte, koos kõigi oluliste atribuutidega (tunnus, sihtotstarve, pindala, aadress jne) ja uuendatakse iga öö [1].
https://geoportaal.maaamet.ee/wfs/katastriuksused
#!/usr/bin/env bash
# Ühenduse andmed
destination_host='localhost'
destination_port='5432'
destination_user='osm'
destination_password='osm'
destination_dbname='data'
destination_schema='aaa_osm'
table_name='katastriuksused'
export PGPASSWORD=${destination_password}
CONNECTION_NAME="-h ${destination_host} -p ${destination_port} -d ${destination_dbname} -U ${destination_user}"
# WFS teenuse URL
wfs_url="WFS:https://gsavalik.envir.ee/geoserver/kataster/wfs?service=WFS&version=2.0.0&request=GetCapabilities"
# Eemaldame olemasoleva tabeli (kui on)
psql ${CONNECTION_NAME} -c "DROP TABLE IF EXISTS ${destination_schema}.${table_name};"
# Impordime katastriüksused PostGIS andmebaasi
ogr2ogr \
--config PG_USE_COPY YES \
-f "PostgreSQL" PG:"host=${destination_host} dbname=${destination_dbname} user=${destination_user} password=${destination_password} active_schema=${destination_schema}" \
"${wfs_url}" \
-nln ${table_name} \
-t_srs EPSG:3301
# Optimeerime tabeli
psql ${CONNECTION_NAME} -c "VACUUM ANALYZE ${destination_schema}.${table_name};"
import_katastriuksused.shTee see käivitatavaks:
chmod +x import_katastriuksused.sh
Käivita:
./import_katastriuksused.sh
Kas soovid, et lisaksin ka logimise, ajastamise cron'iga või kontrolli, kas andmed on muutunud enne importi?
References
[1] Eesti katastriüksuste andmed (WFS)
Kas soovid, et lisaksin ka logimise või kontrolli, kas tabel juba eksisteerib ja kas see on tühi?
Kas soovid, et ma aitaksin ka skripti muuta nii, et see oleks automaatselt ajastatav (cron) või logiks tegevusi faili?