blob: 151b1764d3539d8a17649a7569073c61d723ef1f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
#!/bin/bash
############################################
# Builds routing indices for given regions #
############################################
set -e # Exit when any of commands fail
set -o pipefail # Capture all errors in command chains
set -u # Fail on undefined variables
#set -x # Echo every script line
if [ $# -lt 1 ]; then
echo ''
echo "Usage:"
echo " $0 pbf"
echo " $0 prepare"
echo " $0 mwm"
echo " $0 online"
echo " $0 serve"
echo " $0 stop"
echo ''
exit 1
fi
fail() {
[ $# -gt 0 ] && echo "$@" >&2
exit 1
}
OMIM_PATH="${OMIM_PATH:-$(cd "$(dirname "$0")/../.."; pwd)}"
DATA_PATH="${DATA_PATH:-$OMIM_PATH/data}"
BORDERS_PATH="${BORDERS_PATH:-$DATA_PATH/borders}"
TARGET="${TARGET:-$DATA_PATH}"
[ ! -d "$TARGET" ] && fail "$TARGET should be a writable folder"
INTDIR="${INTDIR:-$TARGET/intermediate_data}"
mkdir -p "$INTDIR"
NUM_PROCESSES=${NUM_PROCESSES:-8}
KEEP_INTDIR=${KEEP_INTDIR-}
LOG_PATH=${LOG_PATH:-.}
echo "[$(date +%Y/%m/%d\ %H:%M:%S)] $0 $1"
if [ "$1" == "pbf" ]; then
PLANET="${PLANET:-$HOME/planet/planet-latest.o5m}"
OSMCTOOLS="${OSMCTOOLS:-$HOME/osmctools}"
[ ! -d "$OSMCTOOLS" ] && OSMCTOOLS="$INTDIR"
[ ! -x "$OSMCTOOLS/osmconvert" ] && cc -x c -O3 "$OMIM_PATH/tools/osmctools/osmconvert.c" -o "$OSMCTOOLS/osmconvert" -lz
TMPBORDERS="$INTDIR/tmpborders"
[ -d "$TMPBORDERS" ] && rm -r "$TMPBORDERS"
mkdir "$TMPBORDERS"
if [ -z "${REGIONS-}" ]; then
cp "$BORDERS_PATH"/*.poly "$TMPBORDERS"
else
echo "$REGIONS" | xargs -I % cp "%" "$TMPBORDERS"
fi
[ -z "$(ls "$TMPBORDERS" | grep '\.poly$')" ] && fail "No regions to create routing files for"
export OSMCTOOLS
export PLANET
export INTDIR
find "$TMPBORDERS" -maxdepth 1 -name '*.poly' -print0 | xargs -0 -P $NUM_PROCESSES -I % \
sh -c '"$OSMCTOOLS/osmconvert" "$PLANET" --hash-memory=2000 -B="%" --complete-ways --out-pbf -o="$INTDIR/$(basename "%" .poly).pbf"'
rm -r "$TMPBORDERS"
elif [ "$1" == "prepare" ]; then
[ -z "$(ls "$INTDIR" | grep '\.pbf$')" ] && fail "Please build PBF files first"
OSRM_PATH="${OSRM_PATH:-$OMIM_PATH/3party/osrm/osrm-backend}"
OSRM_BUILD_PATH="${OSRM_BUILD_PATH:-$OMIM_PATH/../osrm-backend-release}"
[ ! -x "$OSRM_BUILD_PATH/osrm-extract" ] && fail "Please compile OSRM binaries to $OSRM_BUILD_PATH"
OSRM_THREADS=${OSRM_THREADS:-15}
OSRM_MEMORY=${OSRM_MEMORY:-50}
EXTRACT_CFG="$INTDIR/extractor.ini"
PREPARE_CFG="$INTDIR/contractor.ini"
echo "threads = $OSRM_THREADS" > "$EXTRACT_CFG"
echo "memory = $OSRM_MEMORY" > "$PREPARE_CFG"
echo "threads = $OSRM_THREADS" >> "$PREPARE_CFG"
PROFILE="${PROFILE:-$OSRM_PATH/profiles/car.lua}"
[ $# -gt 1 ] && PROFILE="$2"
[ ! -r "$PROFILE" ] && fail "Lua profile $PROFILE is not found"
export STXXLCFG="$HOME/.stxxl"
[ ! -f "$STXXLCFG" ] && fail "For routing, you need ~/.stxxl file. Run this: echo 'disk=$HOME/stxxl_disk1,400G,syscall' > $STXXLCFG"
for PBF in "$INTDIR"/*.pbf; do
OSRM_FILE="${PBF%.*}.osrm"
RESTRICTIONS_FILE="$OSRM_FILE.restrictions"
LOG="$LOG_PATH/$(basename "$PBF" .pbf).log"
rm -f "$OSRM_FILE"
"$OSRM_BUILD_PATH/osrm-extract" --config "$EXTRACT_CFG" --profile "$PROFILE" "$PBF" >> "$LOG" 2>&1 || true
"$OSRM_BUILD_PATH/osrm-prepare" --config "$PREPARE_CFG" --profile "$PROFILE" "$OSRM_FILE" -r "$RESTRICTIONS_FILE" >> "$LOG" 2>&1 || true
"$OSRM_BUILD_PATH/osrm-mapsme" -i "$OSRM_FILE" >> "$LOG" 2>&1 || true
if [ -s "$OSRM_FILE" ]; then
[ -z "$KEEP_INTDIR" ] && rm -f "$PBF"
ONE_OSRM_READY=1
else
echo "Failed to create $OSRM_FILE" >> "$LOG"
fi
done
[ -z "${ONE_OSRM_READY-}" ] && fail "No osrm files were prepared"
elif [ "$1" == "mwm" ]; then
[ -z "$(ls "$INTDIR" | grep '\.osrm$')" ] && fail "Please build OSRM files first"
source "$(dirname "$0")/find_generator_tool.sh"
if [ ! -d "$TARGET/borders" -o -z "$(ls "$TARGET/borders" | grep '\.poly$')" ]; then
# copy polygons to a temporary directory
POLY_DIR="$TARGET/borders"
mkdir -p "$POLY_DIR"
if [ -z "${REGIONS-}" ]; then
cp "$BORDERS_PATH"/*.poly "$POLY_DIR"
else
echo "$REGIONS" | xargs -I % cp "%" "$POLY_DIR"
fi
fi
# Xargs has 255 chars limit for exec string, so we use short variable names.
export G="$GENERATOR_TOOL"
export K="--make_routing --make_cross_section --make_routing_index --generate_traffic_keys"
export I="--intermediate_data_path=$INTDIR"
export TARGET
export LOG_PATH
export DATA_PATH
set +e
find "$INTDIR" -maxdepth 1 -name '*.osrm' -print0 | xargs -0 -P $NUM_PROCESSES -I % \
sh -c 'O="%"; B="$(basename "$O" .osrm)"; "$G" $K "$I" --osrm_file_name="$O" --data_path="$TARGET" --user_resource_path="$DATA_PATH" --output="$B" 2>> "$LOG_PATH/$B.log"'
set -e
if [ -n "${POLY_DIR-}" ]; then
# delete temporary polygons
rm "$POLY_DIR"/*.poly
if [ -z "$(ls -A "$POLY_DIR")" ]; then
rmdir "$POLY_DIR"
fi
fi
elif [ "$1" == "stop" ]; then
LOG="$LOG_PATH/planet.log"
echo "Stopping osrm server..." >> "$LOG"
pkill osrm-routed || true
elif [ "$1" == "online" ]; then
PLANET="${PLANET:-$HOME/planet/planet-latest.o5m}"
OSMCTOOLS="${OSMCTOOLS:-$HOME/osmctools}"
[ ! -d "$OSMCTOOLS" ] && OSMCTOOLS="$INTDIR"
[ ! -x "$OSMCTOOLS/osmconvert" ] && cc -x c -lz -O3 "$OMIM_PATH/tools/osmctools/osmconvert.c" -o "$OSMCTOOLS/osmconvert"
PBF="$INTDIR/planet.pbf"
"$OSMCTOOLS/osmconvert" "$PLANET" --hash-memory=2000 --out-pbf -o="$PBF"
OSRM_PATH="${OSRM_PATH:-$OMIM_PATH/3party/osrm/osrm-backend}"
OSRM_BUILD_PATH="${OSRM_BUILD_PATH:-$OMIM_PATH/../osrm-backend-release}"
[ ! -x "$OSRM_BUILD_PATH/osrm-extract" ] && fail "Please compile OSRM binaries to $OSRM_BUILD_PATH"
OSRM_THREADS=${OSRM_THREADS:-15}
OSRM_MEMORY=${OSRM_MEMORY:-50}
EXTRACT_CFG="$INTDIR/extractor.ini"
PREPARE_CFG="$INTDIR/contractor.ini"
echo "threads = $OSRM_THREADS" > "$EXTRACT_CFG"
echo "memory = $OSRM_MEMORY" > "$PREPARE_CFG"
echo "threads = $OSRM_THREADS" >> "$PREPARE_CFG"
PROFILE="${PROFILE:-$OSRM_PATH/profiles/car.lua}"
[ $# -gt 1 ] && PROFILE="$2"
[ ! -r "$PROFILE" ] && fail "Lua profile $PROFILE is not found"
export STXXLCFG="$HOME/.stxxl"
OSRM_FILE="$INTDIR/planet.osrm"
RESTRICTIONS_FILE="$OSRM_FILE.restrictions"
LOG="$LOG_PATH/planet.log"
rm -f "$OSRM_FILE"
"$OSRM_BUILD_PATH/osrm-extract" --config "$EXTRACT_CFG" --profile "$PROFILE" "$PBF" >> "$LOG" 2>&1
"$OSRM_BUILD_PATH/osrm-prepare" --config "$PREPARE_CFG" --profile "$PROFILE" "$OSRM_FILE" -r "$RESTRICTIONS_FILE" >> "$LOG" 2>&1
if [ -s "$OSRM_FILE" ]; then
[ -z "$KEEP_INTDIR" ] && rm -f "$PBF"
else
echo "Failed to create $OSRM_FILE" >> "$LOG"
fi
elif [ "$1" == "serve" ]; then
OSRM_PATH="${OSRM_PATH:-$OMIM_PATH/3party/osrm/osrm-backend}"
OSRM_BUILD_PATH="${OSRM_BUILD_PATH:-$OMIM_PATH/../osrm-backend-release}"
[ ! -x "$OSRM_BUILD_PATH/osrm-extract" ] && fail "Please compile OSRM binaries to $OSRM_BUILD_PATH"
OSRM_THREADS=${OSRM_THREADS:-15}
OSRM_MEMORY=${OSRM_MEMORY:-50}
export STXXLCFG="$HOME/.stxxl"
OSRM_FILE="$INTDIR/planet.osrm"
PORT="10012"
RESTRICTIONS_FILE="$OSRM_FILE.restrictions"
LOG="$LOG_PATH/planet.log"
if [ -s "$OSRM_FILE" ]; then
echo "Starting: $OSRM_FILE"
"$OSRM_BUILD_PATH/osrm-routed" "$OSRM_FILE" --borders "$OMIM_PATH/data/" --port "$PORT" >> "$LOG" 2>&1 &
echo "Waiting until OSRM server starts:"
until $(curl --output /dev/null --silent --head --fail http://localhost:$PORT/mapsme); do
printf '.' >> "$LOG"
sleep 5
done
else
echo "Can't find OSRM file: $OSRM_FILE"
fi
else
fail "Incorrect parameter: $1"
fi
exit 0
|