mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 02:48:38 -04:00
113 lines
3.8 KiB
Bash
Executable file
113 lines
3.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
MERGED_TMP_FILE=/tmp/wrolpi-merged.osm.pbf
|
|
|
|
if [ ! -f /opt/openstreetmap-carto/openstreetmap-carto.lua ]; then
|
|
echo "openstreetmap-carto.lua file is missing. Has install been completed?"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f /opt/openstreetmap-carto/openstreetmap-carto.style ]; then
|
|
echo "openstreetmap-carto.style file is missing. Has install been completed?"
|
|
exit 2
|
|
fi
|
|
|
|
if [ "${1}" == "" ]; then
|
|
echo "Missing file argument."
|
|
exit 3
|
|
fi
|
|
|
|
set -x
|
|
|
|
HAS_ICE_SHEET=false
|
|
sudo -u postgres psql gis -c '\d' | grep icesheet_polygons && HAS_ICE_SHEET=true
|
|
if [ ${HAS_ICE_SHEET} = false ]; then
|
|
echo "WROLPi: Missing icesheet_polygons. Run reset_map.sh"
|
|
exit 4
|
|
fi
|
|
|
|
# Re-execute this script if it wasn't called with sudo.
|
|
if [ $EUID != 0 ]; then
|
|
sudo "$0" "$@"
|
|
exit $?
|
|
fi
|
|
|
|
function cleanup() {
|
|
if [ -f ${MERGED_TMP_FILE} ]; then
|
|
rm ${MERGED_TMP_FILE}
|
|
fi
|
|
# Renderd must be restarted to forget the cache.
|
|
systemctl restart renderd
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
cleanup
|
|
|
|
systemctl stop renderd
|
|
|
|
if [[ ${1} == *.osm.pbf ]]; then
|
|
# Import PBF files.
|
|
for i in "$@"; do
|
|
if [[ $i != *.osm.pbf ]]; then
|
|
echo "WROLPi: Cannot mix file types"
|
|
exit 5
|
|
fi
|
|
if [ ! -f "${i}" ]; then
|
|
echo "WROLPi: File does not exist! ${i}"
|
|
exit 6
|
|
fi
|
|
done
|
|
|
|
# Use 1/4 of the RAM to import. 1/2 causes crashes on RPi.
|
|
RAM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
|
|
MAX_CACHE=$((RAM_KB / 1024 / 4))
|
|
|
|
pbf_path=${1}
|
|
pbf_paths=($@)
|
|
if [[ ${#pbf_paths[@]} -gt 1 ]]; then
|
|
# More than one PBF, merge them before import.
|
|
nice -n 18 osmium merge $@ -o ${MERGED_TMP_FILE}
|
|
pbf_path=${MERGED_TMP_FILE}
|
|
fi
|
|
|
|
# Import as postgres user, then change ownership to _renderd.
|
|
nice -n 18 sudo -u postgres osm2pgsql -d gis --create --slim -G --hstore \
|
|
--tag-transform-script /opt/openstreetmap-carto/openstreetmap-carto.lua \
|
|
-C ${MAX_CACHE} \
|
|
--number-processes 3 \
|
|
-S /opt/openstreetmap-carto/openstreetmap-carto.style \
|
|
"${pbf_path}"
|
|
# Assign all data to _renderd so the map can be rendered.
|
|
sudo -u postgres psql -d gis -c 'ALTER TABLE external_data OWNER TO _renderd'
|
|
sudo -u postgres psql -d gis -c 'ALTER TABLE geography_columns OWNER TO _renderd'
|
|
sudo -u postgres psql -d gis -c 'ALTER TABLE geometry_columns OWNER TO _renderd'
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE icesheet_outlines OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE icesheet_polygons OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE ne_100m_admin_0_boundary_lines_land OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE planet_osm_line OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE planet_osm_nodes OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE planet_osm_point OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE planet_osm_polygon OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE planet_osm_rels OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE planet_osm_roads OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE planet_osm_ways OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE simplified_water_polygons OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE spatial_ref_sys OWNER TO _renderd"
|
|
sudo -u postgres psql -d gis -c "ALTER TABLE water_polygons OWNER TO _renderd"
|
|
elif [[ ${1} == *.dump ]]; then
|
|
if [ ! -f "${1}" ]; then
|
|
echo "WROLPi: File does not exist! ${1}"
|
|
exit 7
|
|
fi
|
|
# Import a Postgresql dump.
|
|
nice -n 18 pg_restore -j3 --no-owner -d gis -U _renderd -h 127.0.0.1 "${1}"
|
|
else
|
|
echo "WROLPi: Cannot import unknown file"
|
|
exit 8
|
|
fi
|
|
|
|
# Clear map tile cache only after successful import.
|
|
[ -d /var/lib/mod_tile/ajt ] && rm -rf /var/lib/mod_tile/ajt
|
|
[ -d /var/cache/renderd/tiles/ajt ] && rm -rf /var/cache/renderd/tiles/ajt
|
|
|
|
# Renderd is restarted in cleanup trap.
|