feat: scripts

This commit is contained in:
2025-04-05 16:57:26 +08:00
parent bd4fe63cdc
commit 3e996ffab3
62 changed files with 4905 additions and 0 deletions

78
scripts/mapdownload.js Normal file
View File

@@ -0,0 +1,78 @@
#! /usr/bin/env runjs
function long2tile(lon, zoom) {
return (Math.floor((lon + 180) / 360 * Math.pow(2, zoom)));
}
function lat2tile(lat, zoom) {
return (Math.floor((1 - Math.log(Math.tan(lat * Math.PI / 180) + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)));
}
main = () => {
if ($ARGS.length < 3) {
println("Usage: mapdownload.js pattern true|false zoom [png|jpg]");
println(" | | | |");
println(" +-------+----------+----+----------- URL Pattern");
println(" | | |");
println(" +----------+----+----------- Reverse Y (Gaode -> TMS should set true)");
println(" | |");
println(" +----+----------- Zoom (0~20), 2_120,30~121,31");
println(" |");
println(" +----------- Image type");
return;
}
var pattern = $ARGS[0];
var reverseY = "true".equals($ARGS[1]);
var z = $ARGS[2];
var suffix = ($ARGS.length > 3) ? $ARGS[3] : 'png';
if (z.indexOf('_') < 0) {
var x_min = 0;
var y_min = 0;
var x_max = Math.pow(2, z) - 1;
var y_max = Math.pow(2, z) - 1;
} else {
var _z = z;
z = parseInt(_z.substring(0, _z.indexOf('_')));
var lngLats = _z.substring(_z.indexOf('_') + 1).split('~');
var lngLat1 = lngLats[0].split(',');
var lngLat2 = lngLats[1].split(',');
var x1 = long2tile(parseFloat(lngLat1[0]), z);
var x2 = long2tile(parseFloat(lngLat2[0]), z);
var y1 = lat2tile(parseFloat(lngLat1[1]), z);
var y2 = lat2tile(parseFloat(lngLat2[1]), z);
x_min = Math.min(x1, x2);
x_max = Math.max(x1, x2);
y_min = Math.min(y1, y2);
y_max = Math.max(y1, y2);
}
println('X, min: ' + x_min + ', max: ' + x_max);
println('Y, min: ' + y_min + ', max: ' + y_max);
var count = 0;
var total = (x_max - x_min + 1) * (y_max - y_min + 1);
for (var x = x_min; x <= x_max; x++) {
for (var y = y_min; y <= y_max; y++) {
count++;
var url = pattern;
url = url.replace(/\{x\}/g, "" + x);
url = url.replace(/\{y\}/g, "" + y);
url = url.replace(/\{z\}/g, "" + z);
var fiPath = $$.file("" + z, "" + x);
fiPath.mkdirs();
var fi = $$.file(fiPath, (reverseY ? (Math.pow(2, z) - 1 - y) : y) + "." + suffix);
if (!fi.exists()) {
println("Downloading: " + url + " ==> " + fi + " (" + count + "/" + total + ")");
var bs = $$.httpRequest().url(url).get().getBytes();
$$.rFile(fi).write(bs);
}
}
}
};
main();