summaryrefslogtreecommitdiff
path: root/scripts/convert_maps.1.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/convert_maps.1.sh')
-rwxr-xr-xscripts/convert_maps.1.sh64
1 files changed, 64 insertions, 0 deletions
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 <ywang@forksworld.de>
+# Copyright (C) 2020 Markus Koch <markus@notsyncing.net>
+#
+# 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