72 lines
2.8 KiB
Bash
Executable file
72 lines
2.8 KiB
Bash
Executable file
#!/bin/bash
|
|
# scripts/06_build_offline_packages.sh
|
|
|
|
PG_CONN="postgresql://maps:maps@postgres:5432/maps"
|
|
PACKAGES_DIR="/data/offline_packages"
|
|
REGION_ID="amsterdam"
|
|
BBOX="4.7288,52.2783,5.0796,52.4311" # minLon,minLat,maxLon,maxLat
|
|
|
|
mkdir -p "${PACKAGES_DIR}/${REGION_ID}"
|
|
|
|
# --- Tiles: extract MBTiles for the bounding box ---
|
|
# Use martin-cp (Martin's CLI tool) to export tiles from PostGIS to MBTiles
|
|
martin-cp \
|
|
--output-file "${PACKAGES_DIR}/${REGION_ID}/tiles.mbtiles" \
|
|
--mbtiles-type flat \
|
|
--bbox "$BBOX" \
|
|
--min-zoom 0 \
|
|
--max-zoom 16 \
|
|
--source openmaptiles \
|
|
--connect "$PG_CONN"
|
|
|
|
# --- POIs: export to SQLite with FTS5 index ---
|
|
# Custom Rust tool or Python script that queries PostGIS and writes SQLite
|
|
/app/tools/export_pois_sqlite \
|
|
--bbox "$BBOX" \
|
|
--pg-conn "$PG_CONN" \
|
|
--output "${PACKAGES_DIR}/${REGION_ID}/pois.db"
|
|
|
|
# --- Routing: tar the OSRM files per profile ---
|
|
for PROFILE in car foot bicycle; do
|
|
tar -cf "${PACKAGES_DIR}/${REGION_ID}/routing-${PROFILE}.tar" \
|
|
-C "/data/osrm/${PROFILE}" \
|
|
region.osrm region.osrm.cell_metrics region.osrm.cells \
|
|
region.osrm.datasource_names region.osrm.ebg region.osrm.ebg_nodes \
|
|
region.osrm.edges region.osrm.fileIndex region.osrm.geometry \
|
|
region.osrm.icd region.osrm.maneuver_overrides \
|
|
region.osrm.mldgr region.osrm.names region.osrm.nbg_nodes \
|
|
region.osrm.partition region.osrm.properties \
|
|
region.osrm.ramIndex region.osrm.timestamp \
|
|
region.osrm.tld region.osrm.tls region.osrm.turn_duration_penalties \
|
|
region.osrm.turn_penalties_index region.osrm.turn_weight_penalties
|
|
done
|
|
|
|
# --- Update offline_regions table with file sizes ---
|
|
TILES_SIZE=$(stat -f%z "${PACKAGES_DIR}/${REGION_ID}/tiles.mbtiles" 2>/dev/null || stat -c%s "${PACKAGES_DIR}/${REGION_ID}/tiles.mbtiles")
|
|
ROUTING_SIZE=0
|
|
for PROFILE in car foot bicycle; do
|
|
SIZE=$(stat -f%z "${PACKAGES_DIR}/${REGION_ID}/routing-${PROFILE}.tar" 2>/dev/null || stat -c%s "${PACKAGES_DIR}/${REGION_ID}/routing-${PROFILE}.tar")
|
|
ROUTING_SIZE=$((ROUTING_SIZE + SIZE))
|
|
done
|
|
POIS_SIZE=$(stat -f%z "${PACKAGES_DIR}/${REGION_ID}/pois.db" 2>/dev/null || stat -c%s "${PACKAGES_DIR}/${REGION_ID}/pois.db")
|
|
|
|
psql "$PG_CONN" <<SQL
|
|
INSERT INTO offline_regions (id, name, description, bbox, tiles_size_bytes, routing_size_bytes, pois_size_bytes, last_updated)
|
|
VALUES (
|
|
'${REGION_ID}',
|
|
'Amsterdam',
|
|
'Amsterdam metropolitan area',
|
|
ST_MakeEnvelope(4.7288, 52.2783, 5.0796, 52.4311, 4326),
|
|
${TILES_SIZE},
|
|
${ROUTING_SIZE},
|
|
${POIS_SIZE},
|
|
NOW()
|
|
)
|
|
ON CONFLICT (id) DO UPDATE SET
|
|
tiles_size_bytes = EXCLUDED.tiles_size_bytes,
|
|
routing_size_bytes = EXCLUDED.routing_size_bytes,
|
|
pois_size_bytes = EXCLUDED.pois_size_bytes,
|
|
last_updated = EXCLUDED.last_updated;
|
|
SQL
|
|
|
|
echo "Offline package for ${REGION_ID} built."
|