feat: scripts
This commit is contained in:
78
scripts/mapdownload.js
Normal file
78
scripts/mapdownload.js
Normal 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();
|
||||
|
||||
Reference in New Issue
Block a user