79 lines
2.9 KiB
JavaScript
79 lines
2.9 KiB
JavaScript
#! /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();
|
|
|