Skip to content

Instantly share code, notes, and snippets.

@mdeweerd
Last active February 21, 2022 05:32
Show Gist options
  • Save mdeweerd/9bc5f60f2d6733e907f3 to your computer and use it in GitHub Desktop.
Save mdeweerd/9bc5f60f2d6733e907f3 to your computer and use it in GitHub Desktop.
#!/bin/bash -xv
### Country list
# CHANGE WITH YOUR COUNTRIES
COUNTRIES="europe/france/guadeloupe europe/france/guyane europe/france/mayotte europe/france/martinique europe/france/reunion europe/france"
# SMALL SUBSET FOR TESTING:
COUNTRIES="europe/france/guyane europe/france/mayotte"
NOMINATIM="/var/www/Nominatim"
cd $NOMINATIM/data
INDEX=0 # false
### Foreach country check if configuration exists (if not create one) and then import the diff
for COUNTRY in $COUNTRIES;
do
DIR="$NOMINATIM/updates/$COUNTRY"
FILE="$DIR/configuration.txt"
if [ ! -f ${FILE} ];
then
/bin/mkdir -p ${DIR}
/usr/bin/osmosis --rrii workingDirectory=${DIR}/.
/bin/echo baseUrl=http://download.geofabrik.de/${COUNTRY}-updates > ${FILE}
/bin/echo maxInterval = 0 >> ${FILE}
cd ${DIR}
/usr/bin/wget http://download.geofabrik.de/${COUNTRY}-updates/state.txt
fi
FILENAME=${COUNTRY//[\/]/_}
/usr/bin/osmosis --rri workingDirectory=${DIR}/. --wxc ${DIR}/${FILENAME}.osc.gz
### Foreach diff files do the import
cd ${NOMINATIM}/updates
# NEXT LINE MAY NOT BE NEEDED - FILE SEEMS EMPTY
LIST=$DIR/*.osc.gz
LIST2=*.osc.gz
LIST="$LIST $LIST2"
for OSC in $LIST;
do
if [ -f ${OSC} ];
then
${NOMINATIM}/utils/update.php --import-diff ${OSC} --no-npi
rm ${OSC}
INDEX=1
fi
done
done
### Re-index if needed
if ((${INDEX}));
then
${NOMINATIM}/utils/update.php --index
fi
### Remove all diff files
#rm -f ${NOMINATIM}/updates/*.osc.gz
#rm -f ${NOMINATIM}/updates/*/*.osc.gz
#rm -f ${NOMINATIM}/updates/*/*/*.osc.gz
@bclaymiles
Copy link

Hey there,
I'm preparing to begin updating my recently build multi-region Nominatim server - and hoping to use your script. Question though - at the beginning, you set the base as /var/www/Nominatim, then cd to /var/www/Nominatim/data. However, it looks like everything actually takes place under /var/www/Nominatim/updates/ ?

@mdeweerd
Copy link
Author

As far as I remember, '/updates/' is where the scripts are located, and data is kept in subdirectories.

I've just read osm-search/Nominatim#60 (comment) and made the update accordingly in this GIST.

I rarely look at this script which works for me, but may not be generic enough to use without change in other setups.
As this script has helped some other developers, the goal is achieved ;-).

@stoffl6781
Copy link

i can you give me the usages from this script? - but by me it don't work.
Using projection SRS 4326 (Latlong) Osm2pgsql failed due to ERROR: PREPARE get_classes (CHAR(1), int8) AS SELECT class FROM place WHERE osm_type = $1 and osm_id = $2 failed: ERROR: relation "place" does not exist LINE 1: ... get_classes (CHAR(1), int8) AS SELECT class FROM place WHER... ^ ERROR: Error from osm2pgsql, 1 Error from osm2pgsql, 1

thank you

@panpomaly
Copy link

Today i had to do the same (set up multi-region Nominatim server) and i used your script as base for my setup. Thanks !

Changing into $NOMINATIM/data is not neccessary and the "searching" for the osc.gz files seems a bit confusing, when i tried to understood the script. Since you know that the file is saved as ${DIR}/${FILENAME}.osc.gz, you can just use that.

Saving all osc.gz files in the corresponding country directory made me prefer this script over the orginal one from openstreetmap/Nominatim#60, which just put all in the updates folder. But both approaches should work fine.

I forked your gist and changed it a bit to simplify it and support folders with spaces (https://gist.github.com/panpomaly/fb1881ffb127407a15549d60980accc5)

@casaulenbo
Copy link

hi

I am using Nominatim 3.2.0, and according to instruction it's said that we don't need osmosis any more.

But if i want to update multi countries, this script from issue #60 is using this command /usr/bin/osmosis --rri workingDirectory=${DIR}/. --wxc ${DIR}/${FILENAME}.osc.gz with cause error: osmosis not found.

So the question is: in case of update multi countries (which nominatim 3.2.0) i must install osmosis?

Thank for your help!

@RhinoDevel
Copy link

hi

I am using Nominatim 3.2.0, and according to instruction it's said that we don't need osmosis any more.

But if i want to update multi countries, this script from issue #60 is using this command /usr/bin/osmosis --rri workingDirectory=${DIR}/. --wxc ${DIR}/${FILENAME}.osc.gz with cause error: osmosis not found.

So the question is: in case of update multi countries (which nominatim 3.2.0) i must install osmosis?

Thank for your help!

@casaulenbo: If you want to use this script, you need to install osmosis.

@RhinoDevel
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment