From 8eb50eddb9733b01f19d19a2bbb68bac9d64c8d4 Mon Sep 17 00:00:00 2001 From: ywang Date: Sun, 7 Jun 2020 14:22:19 +0200 Subject: Use unpkg when possible; update map tile generator - Moved most sources to unpkg. - Add scripts/getassets to fetch files that need to be hosted locally. - Added a new map tile generator that uses symlinks instead of PHP. --- scripts/convert_maps.1.sh | 64 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100755 scripts/convert_maps.1.sh (limited to 'scripts/convert_maps.1.sh') diff --git a/scripts/convert_maps.1.sh b/scripts/convert_maps.1.sh new file mode 100755 index 0000000..0c78c8f --- /dev/null +++ b/scripts/convert_maps.1.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# Convert a huge .png file into smaller chunks for LeafletJS. +# +# Copyright (C) 2020 Y. Wang +# Copyright (C) 2020 Markus Koch +# +# This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. +# You can obtain a copy of the license at https://mozilla.org/MPL/2.0/. + +TILESIZE=256 +MAPFILE="$1" +MAPNAME="${1/.png/}" + +width=`file "$MAPFILE" | sed -n "s/.* \([0-9]\+\) x \([0-9]\+\).*/\1/p"` +crop=$TILESIZE +zoom=0 + +# Enabled because my VPS +IMFLAGS="-limit area 0" +#IMFLAGS="" + +echo -n "Getting highest zoomlevel... "; +while [ $crop -lt $width ]; do + crop=$(($crop * 2)); + zoom=$(($zoom + 1)); +done; +echo "$zoom"; + +echo "Extending map for maptile generation..." +extended=$(mktemp) +echo " The extended map is temporarily saved to $extended." +convert $MAPFILE -extent ${crop}x${crop} png:$extended + +while [ $zoom -ge 0 ]; do + out="$MAPNAME/$zoom" + tempfile=$out/temp.png + + echo "Generating maps for zoomlevel $zoom to $out..." + + mkdir -p $out; + + echo " Scaling image..." + convert png:$extended -resize ${crop}x${crop} $tempfile + + echo " Generating tiles..." + convert $tempfile -crop ${TILESIZE}x${TILESIZE} +adjoin $out/%d.png + + rm $tempfile + + echo " Creating symlinks..." + n=$(($crop / $TILESIZE)) + for i in $(seq 0 $(($n-1))); do + rm -rf $out/$i >/dev/null 2>/dev/null # Nobody cares if this fails ... + mkdir $out/$i + for j in $(seq 0 $(($n-1))); do + ln -s ../$(($j*$n+$i)).png $out/$i/${j}.png + done + done + + crop=$(($crop / 2)) + zoom=$(($zoom - 1)) +done; + +rm $extended -- cgit v1.2.3