{ callPackage, stdenv, makeWrapper, perl, perlPackages, pngquant, writeShellScript, writeShellScriptBin, }: let datamaps = callPackage ../datamaps/package.nix { }; parse-gpx = stdenv.mkDerivation { name = "parse-gpx"; src = ../../../parse-gpx.pl; dontUnpack = true; nativeBuildInputs = [ makeWrapper ]; buildInputs = [ perl ]; installPhase = "mkdir -p $out/bin; cp $src $out/bin/parse-gpx; chmod +x $out/bin/parse-gpx;"; postFixup = let perlPath = with perlPackages; makePerlPath [ XMLParser ]; in "wrapProgram $out/bin/parse-gpx --prefix PERL5LIB : '${perlPath}'"; }; makeTile = writeShellScript "makeTile.sh" '' mkdir -p tiles/$2/$3 echo "rendering $1 $2 $3 $4 $5 $6" if [ $2 -gt 13 ]; then ${datamaps}/bin/render -g -t0 -L4 -c 'ff8800' -S 'ff8800' $1 $2 $3 $4 | ${pngquant}/bin/pngquant 256 > tiles/$2/$3/$4.png else ${datamaps}/bin/render -g -t0 -L7 -c 'ff8800' -S 'ff8800' $1 $2 $3 $4 | ${pngquant}/bin/pngquant 256 > tiles/$2/$3/$4.png fi ''; in writeShellScriptBin "generateTilesFromGPX" '' # strict mode set -euo pipefail IFS=$'\n\t' TMP_DIR=`mktemp -d -t tiles.XXXXXXXXXX` trap "{ rm -rf "$TMP_DIR"; }" SIGINT SIGTERM ERR EXIT if [ ! -d "$1" ]; then echo "$1 does not exist." exit 1 fi if [ -z "$(ls -A $1)" ]; then echo "$1 is empty." exit 1 fi if [ ! -d "$2" ]; then echo "$2 does not exist." exit 1 fi if [ ! -z "$(ls -A $2)" ]; then echo "$2 is not empty." exit 1 fi GPX_DIR=`realpath $1` TILES_DIR=`realpath $2` cd $TMP_DIR find $GPX_DIR -name '*.gpx' -print0 | xargs -0 ${parse-gpx}/bin/parse-gpx | ${datamaps}/bin/encode -z16 -m8 -o $TMP_DIR/gpx.dm ${datamaps}/bin/enumerate -s -Z6 -z16 ./gpx.dm | xargs -L1 -P3 ${makeTile} mv $TMP_DIR/tiles/* $TILES_DIR/ ''