Installation

1. Vorarbeiten

sudo apt install postgresql postgresql-postgis postgis

2. Installation aus den Quellen

mkdir -p ~/projects && cd ~/projects
git clone git@bitbucket.org:locr/osmparser.net.git OsmParser.NET
cd OsmParser.NET

Datei OsmParser/.env.example nach OsmParser/.env kopieren und anpassen.

cp OsmParser/.env.example OsmParser/.env

3. OSM Daten importieren

3.1. Vorarbeiten

  • Unattended Upgrades deaktivieren, damit während des Imports keine Updates durchgeführt werden und ggf. der PostgreSQL Server neu gestartet wird!

sudo systemctl stop unattended-upgrades
sudo systemctl disable unattended-upgrades
sudo sed -i 's/Unattended-Upgrade "1"/Unattended-Upgrade "0"/g' /etc/apt/apt.conf.d/20auto-upgrades

3.2. Alte ZFS Snapshots löschen

sudo zfs list -t snapshot
sudo zfs destroy zfs_pool_2tb/dbs/postgresql@nodes-completed
sudo zfs destroy zfs_pool_2tb/dbs/postgresql@ways-completed
sudo zfs destroy zfs_pool_2tb/dbs/postgresql@relations-completed
sudo zfs destroy zfs_pool_2tb/dbs/postgresql@simplify-tables-completed

3.3. OpenStreetMap Datenbank herunterladen

# OSM Plant Datei herunterladen
# https://planet.openstreetmap.org/pbf/
# z.B. planet-250512.osm.pbf

# screen verwenden
screen - R Import
wget https://planet.openstreetmap.org/pbf/planet-250512.osm.pbf

# Alte Datenbank aus PostgreSQL löschen
# http://192.168.100.132/phppgadmin/
# user: postgres

# Heruntergeladenen Daten löschen
# zfs_pool_2tb/data/osm
# flat_nodes nicht löschen (Datei speichert nodes um schnelleren Import zu ermöglichen.)

3.4. Schritt für Schritt import

# Zugrundeliegende Daten für die Zeitangaben
#   Server: 192.168.100.132
#   OS Version: Ubuntu 22.04
#   OSM Datenbestand: 22.01.2024 (8,892,818,730 nodes; 995,060,617 ways; 11,778,871 relations)
#   Import durchgeführt: Anfang Februar 2024

cd OsmParser
dotnet run --framework=net9.0 -- --import-step=PrepareImport # ca. 03:00h.
dotnet run --framework=net9.0 -- --import-step=InitializeDatabase # ca. 30 Sekunden.
dotnet run --framework=net9.0 -- --import-step=ImportNodes # ca. 2d. (ca. 57,000 Nodes pro Sekunde)
# DB Größe nach ImportNodes Schritt: ca. 963GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@nodes-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=ImportWays # ca. 3d 17:00h. (ca. 3,150 Ways pro Sekunde)
# DB Größe nach ImportWays Schritt: ca. 1469GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@ways-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=ImportRelations # ca. 3d 10:00h (40 Relations pro Sekunde)
# DB Größe nach ImportRelations Schritt: 1499GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@relations-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=DeleteRawData # ca. 10 Sekunden.
# DB Größe nach DeleteRawData Schritt: 290GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@deleted-raw-data-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=CreateIndexes # ca. 02:00h.
# DB Größe nach CreateIndexes Schritt: 410GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@created-indexes-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=ImportZipBoundariesByCensus # ca. 10 Sekunden
# DB Größe nach ImportZipBoundariesByCensus Schritt: 410GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@zip-boundaries-by-census-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=ImportAreasCoastline # ca. 00:02h
dotnet run --framework=net9.0 -- --import-step=ImportAreasCoastlineSplitted # ca. 00:02h
# DB Größe nach ImportAreasCoastlineSplitted Schritt: 413GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@areas-coastline-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=ProcessCountryBoundingsLand # ca. 00:25h
# DB Größe nach ProcessCountryBoundingsLand Schritt: 415GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@country-boundings-land-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=ProcessStateBoundingsLand # ca. 00:20h
# DB Größe nach ProcessStateBoundingsLand Schritt: 417GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@state-boundings-land-completed
# sudo service postgresql start
dotnet run --framework=net9.0 -- --import-step=SimplifyTables # ca. 02:40h
# DB Größe nach SimplifyTables Schritt: 523GB
# Optional: ZFS snapshot erstellen =>
# sudo service postgresql stop
# sudo zfs snapshot zfs_pool/dbs/postgresql@simplify-tables-completed
# sudo service postgresql start

3.5. All-in-one import

cd OsmParser.NET/OsmParser
dotnet run
dotnet run -- --start-http-server
# go to http://ip-address:2003/web_ui/ and do post-processing!
# cancel the server process!
dotnet run -- --import-step=SimplifyTables

3.6. neu importierte Datenbank exportieren und importieren

3.6.1. Export

sudo -u postgres pg_dump osm_planet | gzip > /zfs_pool/data/osm/osm_planet.gz # ca. 06:00h.

3.6.2. Import

# Datenbank anlegen
sudo -u postgres createdb osm_planet
# Dateigröße: 208GB
cat /zfs_pool/data/osm/osm_planet.gz | gunzip | sudo -u postgres psql osm_planet # ca.

3.7. Externe Quellen

Um neuere Postleitzahlengebiete für die USA zu bekommen, müssen die Daten von folgender Webseite bezogen werden:

https://catalog.data.gov/dataset/2019-cartographic-boundary-shapefile-2010-zip-code-tabulation-areas-for-united-states-1-500000

Der direkte Link ist/war https://www2.census.gov/geo/tiger/GENZ2019/shp/cb_2019_us_zcta510_500k.zip.
Diese Daten wurden in QGIS importiert und dann in eine PostgreSQL-Datenbank exportiert. Dann musste noch eine Transformation der Projektion von epsg:4269 nach epsg:3857 durchgeführt werden.