#!/usr/bin/env bash . /app/utils.sh regions="$1" style="$2" cwd="$(pwd)" function build_gmap() { # TODO: Set name (currently is "OSM street map") # Use --housenumbers? # A way to pass extra options # Change ID (currently is 63240000) region="$1" region_id="$2" style="$3" 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" 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" \ --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/" mv "$build_dir/osmmap.img" "$generated_map_dir/" mv "$build_dir/osmmap.tdb" "$generated_map_dir/" echo "$version" > "$version_path" rm -f $build_dir/* else rm -f $build_dir/* fi rm -f "$styles_dir/x$style.TYP" 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" 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 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 if [[ "$(check_osm_region_exists "$region")" == "true" ]]; then echo "๐Ÿ”จ Building Garmin map: $region" build_gmap "$region" "$region_id" "$style" ((region_id++)) fi done else echo "โš ๏ธ No new maps. Not building (set \$OSMGARMIN_FORCE_BUILD=true to override)" fi echo "๐Ÿงน Cleaning up..." cleanup