Created
May 8, 2014 15:24
-
-
Save lonvia/f24516f8672a0fad2740 to your computer and use it in GitHub Desktop.
Creating regional OSM .osc diffs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
cd /tmp | |
SCRIPTDIR=/etc/planet/hourly.d | |
BASEDIR=/srv/planet.osm.ch | |
DATADIR=$BASEDIR/data | |
WWWDIR=$BASEDIR/site | |
LOCKFILE=$DATADIR/chextract.lock | |
BBOX="5,45.3,11.3,48.3" | |
CHPOLY=$WWWDIR/switzerland-padded.poly | |
CHOUTPBF=$WWWDIR/switzerland-padded.osm.pbf | |
OLDBOXEXTRACT=$DATADIR/chbbox_old.o5m | |
NEWBOXEXTRACT=$DATADIR/chbbox.o5m | |
OLDCHEXTRACT=$DATADIR/switzerland_old.o5m | |
NEWCHEXTRACT=$DATADIR/switzerland.o5m | |
NEWDIFF=$DATADIR/chdiff.osc | |
HOURLYDIR=$WWWDIR/replication/hour | |
STATEFILE=$DATADIR/state.txt | |
# derived values | |
TEMPBOXEXTRACT=$(dirname $NEWBOXEXTRACT)/inprogress_$(basename $NEWBOXEXTRACT) | |
TEMPCHEXTRACT=$(dirname $NEWCHEXTRACT)/inprogress_$(basename $NEWCHEXTRACT) | |
CHPBF=${NEWCHEXTRACT%.o5m}.pbf | |
SEQUENCENUMBER=$(awk 'BEGIN{FS="="} /sequenceNumber/{print $2}' $HOURLYDIR/state.txt) | |
((SEQUENCENUMBER += 1)) | |
((LEVEL_ONE_DIR = SEQUENCENUMBER / 1000000)) | |
((LEVEL_TWO_DIR = (SEQUENCENUMBER / 1000) % 1000)) | |
((LEVEL_THREE_FILE = SEQUENCENUMBER % 1000 )) | |
LEVEL_ONE_DIR=$(printf "%03d" $LEVEL_ONE_DIR) | |
LEVEL_TWO_DIR=$(printf "%03d" $LEVEL_TWO_DIR) | |
LEVEL_THREE_FILE=$(printf "%03d" $LEVEL_THREE_FILE) | |
OSCPATH=$HOURLYDIR/$LEVEL_ONE_DIR/$LEVEL_TWO_DIR/$LEVEL_THREE_FILE | |
lockfile-create $LOCKFILE | |
# lockfile create waits for some time and retries to create the lock file a few times. | |
# If it gives up, we need to exit now. | |
if [ $? -ne 0 ]; then exit 1; fi | |
lockfile-touch $LOCKFILE & | |
LOCKPID="$!" | |
# echo "lock down, starting update of ch extract" | |
function exit_on_failure | |
{ | |
if [ $? -ne 0 ] | |
then | |
kill "${LOCKPID}" | |
lockfile-remove $LOCKFILE | |
exit 1 | |
fi | |
} | |
# update to current osm state | |
osmupdate $NEWBOXEXTRACT $TEMPBOXEXTRACT --minutely -t=$BASEDIR/osmupdate_temp/temp -b=$BBOX | |
exit_on_failure | |
# move files | |
mv $OLDBOXEXTRACT $OLDBOXEXTRACT.bak | |
mv $NEWBOXEXTRACT $OLDBOXEXTRACT | |
mv $TEMPBOXEXTRACT $NEWBOXEXTRACT | |
# derive new swiss extract | |
osmconvert $NEWBOXEXTRACT -o=$TEMPCHEXTRACT -B=$CHPOLY | |
exit_on_failure | |
osmconvert $TEMPCHEXTRACT -o=$CHPBF | |
exit_on_failure | |
chmod 644 $CHPBF | |
# derive change file | |
osmconvert $NEWCHEXTRACT $TEMPCHEXTRACT --diff --fake-lonlat --emulate-osmosis -o=$NEWDIFF | |
exit_on_failure | |
# create state file | |
date --utc > $STATEFILE | |
echo sequenceNumber=$SEQUENCENUMBER >> $STATEFILE | |
echo timestamp=$(osmconvert $TEMPCHEXTRACT --out-timestamp) >> $STATEFILE | |
# move files | |
mv $OLDCHEXTRACT $OLDCHEXTRACT.bak | |
mv $NEWCHEXTRACT $OLDCHEXTRACT | |
mv $TEMPCHEXTRACT $NEWCHEXTRACT | |
mv $CHPBF $CHOUTPBF | |
mkdir -p $(dirname $OSCPATH) | |
cp $STATEFILE $OSCPATH.state.txt | |
gzip $NEWDIFF | |
mv $NEWDIFF.gz $OSCPATH.osc.gz | |
chmod +r $OSCPATH.osc.gz | |
mv $STATEFILE $HOURLYDIR/state.txt | |
# echo "release lock, update finished" | |
kill "${LOCKPID}" | |
lockfile-remove $LOCKFILE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment