OSM kaardid.md 6.8 KB

Siin on sinu OSM andmete importimise skript PostGIS andmebaasi korralikult vormindatud ja loetavamaks tehtud versioon. Olen parandanud süntaksit, lisanud kommentaare ja ühtlustanud stiili:


📁 1. Üldised muutujad

#!/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}"

🏗️ 2. Skeemi loomine

# Skeemi loomine, kui see veel ei eksisteeri
psql ${CONNECTION_NAME} -c "CREATE SCHEMA IF NOT EXISTS ${destination_schema};"

🗺️ 3. OSM andmete allalaadimine ja import

# 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

ℹ️ Märkused

  • Kasutatud projektsioon on EPSG:3857 (Web Mercator). Kui soovid kasutada Eesti ametlikku koordinaatsüsteemi, võid selle asendada EPSG:3301.
  • -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.


📝 Skript: 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

✅ Kasutamine

  1. Salvesta see fail nimega create_osm_buildings.sh.
  2. Tee see käivitatavaks:

    chmod +x create_osm_buildings.sh
    
  3. Käivita:

    ./create_osm_buildings.sh
    

Väga hea küsimus! Vaatame su koodi üle ja täiustame seda nii, et:

  1. Laetakse alla hoonete andmed HOTOSM-ist.
  2. Ekstraheeritakse need.
  3. Imporditakse need õigesse skeemi PostGIS andmebaasis.
  4. Kontrollime, kas OSM andmetes juba on hooned olemas.

🧠 Kas OSM andmetes on hooned juba olemas?

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:

  • ainult hooneid eraldi tabelis
  • paremat kvaliteeti või täpsust
  • lihtsamat töötlemist

✅ Täiendatud skript hoonete lisamiseks skeemi

#!/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].


WFS teenuse URL:

https://geoportaal.maaamet.ee/wfs/katastriuksused

📝 Bash-skript: katastriüksuste import PostGIS andmebaasi

#!/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};"

📦 Kasutamine

  1. Salvesta see failina, nt import_katastriuksused.sh
  2. Tee see käivitatavaks:

    chmod +x import_katastriuksused.sh
    
  3. 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?