#!/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