diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e4e5f6c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ \ No newline at end of file diff --git a/scripts/mapbuilder.sh b/scripts/mapbuilder.sh new file mode 100755 index 0000000..f2121c2 --- /dev/null +++ b/scripts/mapbuilder.sh @@ -0,0 +1,18 @@ +#!/bin/bash + + + +temp=$(mktemp -d) + +mkdir "$temp/data" +for i in "$1/data/"* +do + ogrmerge.py -single -o "$temp/$i.json" "$i"/* +done + + +tippecanoe -aN -z10 -o "$temp/strecken.pmtiles" $temp/data/*.json + +mv $temp/strecken.pmtiles "$2" + +rm -r $temp diff --git a/scripts/umap-extractor.py b/scripts/umap-extractor.py new file mode 100755 index 0000000..5a8b19f --- /dev/null +++ b/scripts/umap-extractor.py @@ -0,0 +1,55 @@ +#!/usr/bin/python3 + +import re +import requests +import json +import os +import sys + + +url = sys.argv[1] +outdir = sys.argv[2] + +base = url.split("/map/")[0] +r = requests.get(url) + +regexp = re.compile(r'U.MAP = new U.Map[(]"map", (.+) }\)', re.DOTALL) + +data = json.loads(regexp.findall(r.text, re.DOTALL)[0].replace("})","}")) + +properties = data["properties"] +layers = properties["datalayers"] +map_id = properties["umap_id"] + +config = {} +config["name"] = properties["name"] +colors = {} +config["layers"] = colors +config["tilelayer"] = properties["tilelayer"] + +config["tilelayer"]["attribution"] = re.sub(r'\[\[([^|]+)\|([^|]+)\]\]', r'\2', config["tilelayer"]["attribution"]) + +def normalize_name(name) : + return name.replace("/", "_").replace("-","").replace(" ","") + +datadir = os.path.join(outdir,"data") +if not os.path.exists(datadir) : + os.mkdir(datadir) + +for layer in layers : + layer_id = layer["id"] + req = requests.get(f"{base}/datalayer/{map_id}/{layer_id}/") + options = req.json()["_umap_options"] + nname = normalize_name(options['name']) + if not os.path.exists(os.path.join(datadir,nname)) : + os.mkdir(os.path.join(datadir,nname)) + with open(os.path.join(datadir,nname,f"{nname}.json"), "w") as f : + f.write(req.text) + colors[nname] = { "color" : options["color"] if "color" in options else "DarkGreen" , "humanname" : options["name"] } + if "weight" in options : + colors[nname]["width"] = options["weight"] + else: + colors[nname]["width"] = 2 + +with open(os.path.join(outdir,"layers.json"), "w") as f : + json.dump(config, f, indent=4)