186 lines
5.2 KiB
Bash
Executable File
186 lines
5.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
. /app/utils.sh
|
|
|
|
regions="$1"
|
|
style="$2"
|
|
|
|
cwd="$(pwd)"
|
|
|
|
function build_gmap() {
|
|
region="$1"
|
|
region_id="$2"
|
|
style="$3"
|
|
country_abbr="$4"
|
|
country_name="$5"
|
|
|
|
region_shortname="$(get_region_shortname "$region")"
|
|
generated_map_dir="$out_dir/$region_shortname/"
|
|
version_path="$generated_map_dir/version.txt"
|
|
|
|
bounds_dir_md5="$(get_md5_dir "$bounds_dir")"
|
|
map_md5="$(get_md5 "$maps_dir/$region_shortname.osm.pbf")"
|
|
style_md5="$(get_md5 "$styles_dir/$style.TYP")"
|
|
|
|
version_id=""
|
|
version_md5="$(echo "$bounds_dir_md5|$map_md5|$style_md5" | md5sum | cut -d' ' -f1)"
|
|
|
|
if [[ -f "$version_path" ]]; then
|
|
version_id="$(cat "$version_path" | cut -d'|' -f1)"
|
|
version_id="$((version_id+1))"
|
|
fi
|
|
|
|
version="$version_id|$version_md5"
|
|
|
|
build="true"
|
|
build_failed="false"
|
|
|
|
mkdir -p "$generated_map_dir"
|
|
|
|
[[ -z "$country_abbr" ]] && country_abbr="ZZ"
|
|
[[ -z "$country_name" ]] && country_name="Unknown"
|
|
|
|
if [[ -f "$version_path" ]]; then
|
|
if [[ $(cat "$version_path") == "$version" ]]; then
|
|
build="false"
|
|
fi
|
|
fi
|
|
|
|
if [[ $build == "true" ]]; then
|
|
cd "$build_dir"
|
|
|
|
exec_mkgmap \
|
|
--description="$(echo "${region##*/}" | sed -e "s/-/ /g" | sed -e "s/\b\(.\)/\u\1/g" | sed -e "s/ /-/g")" \
|
|
--add-pois-to-areas \
|
|
--bounds="$bounds_dir" \
|
|
--country-abbr="$country_abbr" \
|
|
--country-name="$country_name" \
|
|
--housenumbers \
|
|
--index \
|
|
--route \
|
|
--gmapsupp \
|
|
$tiles_dir/$region_shortname/6324*.osm.pbf \
|
|
"$styles_dir/$style.TYP"
|
|
|
|
[[ $? != 0 ]] && build_failed="true"
|
|
cd "$cwd"
|
|
|
|
if [[ $build_failed == "false" ]]; then
|
|
rm -f $generated_map_dir/*
|
|
|
|
mv "$build_dir/gmapsupp.img" "$generated_map_dir/${region_shortname}_gmapsupp.img"
|
|
mv "$build_dir/osmmap.img" "$generated_map_dir/${region_shortname}_osmmap.img"
|
|
mv "$build_dir/osmmap.tdb" "$generated_map_dir/${region_shortname}_osmmap.tdb"
|
|
echo "$version" > "$version_path"
|
|
|
|
rm -f $build_dir/*
|
|
rm -f "$styles_dir/x$style.TYP"
|
|
else
|
|
rm -f $build_dir/*
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function cleanup() {
|
|
rm -f "$build_dir/*"
|
|
}
|
|
|
|
function update_bounds() {
|
|
function update_bound_item() {
|
|
type="$1"
|
|
bounds_url_prefix="https://www.thkukuk.de/osm/data"
|
|
|
|
curl -L --fail "$bounds_url_prefix/$type-latest.zip" -o "$bounds_dir/$type.zip"
|
|
unzip -o "$bounds_dir/$type.zip" -d "$bounds_dir"
|
|
rm -f "$bounds_dir/$type.zip"
|
|
}
|
|
|
|
update_bound_item "bounds"
|
|
update_bound_item "sea"
|
|
}
|
|
|
|
function update_osm_map() {
|
|
region="$1"
|
|
region_filename="$(get_region_shortname "$region").osm.pbf"
|
|
region_path="$maps_dir/$region_filename"
|
|
|
|
curl -L "$(get_pbf_url "$region")" -o "$region_path"
|
|
}
|
|
|
|
function update_tiles() {
|
|
region="$1"
|
|
region_tiles_dir="$tiles_dir/$(get_region_shortname "$region")"
|
|
|
|
mkdir -p "$region_tiles_dir"
|
|
rm -rf "$region_tiles_dir/*"
|
|
cd "$region_tiles_dir" # HACK: --output-dir doesn't work
|
|
|
|
exec_splitter "$maps_dir/$(get_region_shortname "$region").osm.pbf"
|
|
|
|
cd "$cwd"
|
|
}
|
|
|
|
mkdir -p "$bounds_dir"
|
|
mkdir -p "$build_dir"
|
|
mkdir -p "$maps_dir"
|
|
mkdir -p "$out_dir"
|
|
mkdir -p "$tiles_dir"
|
|
|
|
[[ -z "$regions" ]] && die "No regions given (1st argument)"
|
|
[[ -z "$style" ]] && die "No style given (2nd argument)"
|
|
|
|
regions_array="$(echo $regions | tr ";" "\n")"
|
|
is_updates="false"
|
|
|
|
[[ $OSMGARMIN_FORCE_BUILD == "true" ]] && is_updates="true"
|
|
|
|
if [[ $OSMGARMIN_SKIP_UPDATE_MAPS != "true" ]]; then
|
|
for region in $regions_array; do
|
|
region="$(echo "$region" | cut -d':' -f1)"
|
|
|
|
if [[ "$(check_osm_region_exists "$region")" == "true" ]]; then
|
|
if [[ "$(check_osm_update "$region")" == "true" ]]; then
|
|
echo "🌍 Updating OSM map: $region"
|
|
update_osm_map "$region"
|
|
|
|
echo "✂️ Building tiles: $region"
|
|
update_tiles "$region"
|
|
|
|
[[ $is_updates == "false" ]] && is_updates="true"
|
|
else
|
|
echo "⚠️ No updates for \"$region\""
|
|
fi
|
|
else
|
|
echo "⚠️ Region \"$region\" does not exist"
|
|
fi
|
|
done
|
|
else
|
|
is_updates="true"
|
|
fi
|
|
|
|
if [[ $is_updates == "true" ]]; then
|
|
if [[ $OSMGARMIN_SKIP_UPDATE_BOUNDS != "true" ]]; then
|
|
echo "📒 Updating bounds..."
|
|
update_bounds
|
|
fi
|
|
|
|
region_id=1
|
|
|
|
for region in $regions_array; do
|
|
region="$(echo "$region" | cut -d':' -f1)"
|
|
region_attr="$(echo "$region" | cut -d':' -f2)"
|
|
region_country_abbr="$(echo "$region_attr" | cut -d',' -f1)"
|
|
region_country_name="$(echo "$region_attr" | cut -d',' -f2)"
|
|
|
|
if [[ "$(check_osm_region_exists "$region")" == "true" ]]; then
|
|
echo "🔨 Building Garmin map: $region"
|
|
build_gmap "$region" "$region_id" "$style" "$region_country_abbr" "$region_country_name"
|
|
((region_id++))
|
|
fi
|
|
done
|
|
else
|
|
echo "⚠️ No new maps. Not building (set \$OSMGARMIN_FORCE_BUILD=true to override)"
|
|
fi
|
|
|
|
echo "🧹 Cleaning up..."
|
|
cleanup |