#!/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" description="$region_id" family_name="" product_id="$region_id" product_version="$version_id" [[ -n $OSMGARMIN_MAP_FAMILY_NAME ]] && family_name="$OSMGARMIN_MAP_FAMILY_NAME" exec_mkgmap \ --add-pois-to-areas \ --area-name="$region" \ --bounds="$bounds_dir" \ --description="$description" \ --family-name="$family_name" \ --gmapsupp \ --index \ --product-id="$product_id" \ --product-version="$product_version" \ --route \ --series-name="$family_name" \ $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 exec_mkgmap() { java -jar /opt/mkgmap/mkgmap.jar $@ } function exec_splitter() { java -jar /opt/splitter/splitter.jar $@ } function update_bounds() { function download_bounds() { 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" } download_bounds "bounds" #download_bounds "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" 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 to \"$region\"" fi else echo "โš ๏ธ Region \"$region\" does not exist" fi done if [[ $is_updates == "true" ]]; then echo "๐Ÿ“’ Updating bounds..." update_bounds 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