mapcachetools 1.0.4 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,380 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
-
4
- /*
5
- Download images sequentially
6
- */
7
- "use strict";
8
- const v_pjson = require("./package.json");
9
- const c_args = require("./helpers/hlp_args.js");
10
- const c_colors = require("./helpers/js_colors.js").Colors;
11
-
12
- const fs = require("fs");
13
- const axios = require("axios");
14
-
15
- const EARTH_RADIUS = 6378137;
16
- const MAX_LATITUDE = 85.0511287798;
17
- const R_MINOR = 6356752.314245179;
18
- const TOKEN = "GET YOUR TOKEN";
19
- var map_provider = 0;
20
- var myArgs = c_args.getArgs();
21
-
22
- /*
23
- * @namespace Projection
24
- * @projection L.Projection.SphericalMercator
25
- *
26
- * Spherical Mercator projection — the most common projection for online maps,
27
- * used by almost all free and commercial tile providers. Assumes that Earth is
28
- * a sphere. Used by the `EPSG:3857` CRS.
29
- */
30
- function project(lat, lng) {
31
- var d = Math.PI / 180,
32
- max = MAX_LATITUDE,
33
- lat = Math.max(Math.min(max, lat), -max),
34
- sin = Math.sin(lat * d);
35
-
36
- return {
37
- x: EARTH_RADIUS * lng * d,
38
- y: (EARTH_RADIUS * Math.log((1 + sin) / (1 - sin))) / 2,
39
- };
40
- }
41
-
42
- function unproject(point) {
43
- var d = 180 / Math.PI;
44
-
45
- return {
46
- lat: (2 * Math.atan(Math.exp(point.y / EARTH_RADIUS)) - Math.PI / 2) * d,
47
- lng: (point.x * d) / EARTH_RADIUS,
48
- };
49
- }
50
-
51
- function zoomScale(zoom) {
52
- return 256 * Math.pow(2, zoom);
53
- }
54
-
55
- function transform(point, scale) {
56
- scale = scale || 1;
57
- point.x = scale * (2.495320233665337e-8 * point.x + 0.5);
58
- point.y = scale * (-2.495320233665337e-8 * point.y + 0.5);
59
- return point;
60
- }
61
-
62
- function fn_convertFromLngLatToPoints(lat1, lng1, lat2, lng2, zoom) {
63
- // order location
64
- if (lng1 > lng2) {
65
- var t = lng2;
66
- lng2 = lng1;
67
- lng1 = t;
68
- }
69
-
70
- if (lat1 > lat2) {
71
- var t = lat2;
72
- lat2 = lat1;
73
- lat1 = t;
74
- }
75
-
76
- // convert to points
77
- var point1 = project(lat1, lng1);
78
- var point2 = project(lat2, lng2);
79
-
80
- var scaledZoom = zoomScale(zoom);
81
- point1 = transform(point1, scaledZoom);
82
- point2 = transform(point2, scaledZoom);
83
-
84
- // convert to integer
85
- point1.x = Math.floor(point1.x / 256);
86
- point1.y = Math.floor(point1.y / 256);
87
- point2.x = Math.floor(point2.x / 256);
88
- point2.y = Math.floor(point2.y / 256);
89
-
90
- // sort
91
- if (point1.y > point2.y) {
92
- var t = point2.y;
93
- point2.y = point1.y;
94
- point1.y = t;
95
- }
96
-
97
- var point = [];
98
-
99
- point.push(point1);
100
- point.push(point2);
101
-
102
- return point;
103
- }
104
-
105
- /* ============================================================
106
- Function: Download Image
107
- ============================================================ */
108
-
109
- const download_image = (url, image_path) =>
110
- axios({
111
- url,
112
- responseType: "stream",
113
- }).then(
114
- (response) =>
115
- new Promise((resolve, reject) => {
116
- response.data
117
- .pipe(fs.createWriteStream(image_path))
118
- .on("finish", () => resolve())
119
- .on("error", (e) => reject(e));
120
- })
121
- ).catch((error) => {
122
- console.log(error.message);
123
- });;
124
-
125
- function fn_download_images(point1, point2, zoom) {
126
- (async () => {
127
- var url, filename;
128
- var totalImages =
129
- (1 + (point2.x + 1) - point1.x) * (1 + (point2.y + 1) - point1.y);
130
- var START_FROM = 0;
131
-
132
- for (var j, c = 0, i = point1.x; i <= point2.x + 1; ++i)
133
- for (j = point1.y; j <= point2.y + 1; ++j, ++c) {
134
- if (c >= START_FROM) {
135
- /*
136
- You can edit URL here to download from any provider.
137
- */
138
- if (map_provider==1)
139
- {
140
- // MAPBOX API
141
- url =
142
- "https://api.mapbox.com/styles/v1/mapbox/satellite-v9/tiles/" +
143
- zoom +
144
- "/" +
145
- i +
146
- "/" +
147
- j +
148
- "?access_token=" +
149
- TOKEN;
150
- }
151
- else
152
- {
153
- // Open Street Map
154
- // URL https://tile.openstreetmap.org/{z}/{x}/{y}.png
155
- url =
156
- "https://tile.openstreetmap.org/" +
157
- zoom +
158
- "/" +
159
- i +
160
- "/" +
161
- j +
162
- ".png";
163
- }
164
- filename = folder + "/" + i + "_" + j + "_" + zoom + ".jpeg";
165
- if (!fs.existsSync(filename)) {
166
- await download_image(url, filename);
167
- }
168
- else
169
- {
170
- console.log ("image no. " + c + " already exists.");
171
- }
172
- console.log(c + " of " + totalImages + ":" + url);
173
- }
174
- }
175
- })();
176
- }
177
-
178
- function fn_handle_arguments() {
179
- myArgs = c_args.getArgs();
180
- console.log(JSON.stringify(myArgs));
181
- var error = false;
182
- if (
183
- myArgs.hasOwnProperty("version") === true ||
184
- myArgs.hasOwnProperty("v") === true
185
- ) {
186
- console.log(
187
- c_colors.BSuccess +
188
- "MAP Cache version" +
189
- c_colors.FgYellow +
190
- JSON.stringify(v_pjson.version) +
191
- c_colors.Reset
192
- );
193
- console.log(
194
- c_colors.BSuccess +
195
- "--lat1" +
196
- c_colors.FgWhite +
197
- " for Start latitude. " +
198
- c_colors.FgYellow +
199
- " Example --lat1=-54.652332555" +
200
- c_colors.Reset
201
- );
202
- console.log(
203
- c_colors.BSuccess +
204
- "--lng1" +
205
- c_colors.FgWhite +
206
- " for start longitude. " +
207
- c_colors.FgYellow +
208
- " Example --lng1=-54.652332555" +
209
- c_colors.Reset
210
- );
211
- console.log(
212
- c_colors.BSuccess +
213
- "--lat2" +
214
- c_colors.FgWhite +
215
- " for end latitude. " +
216
- c_colors.FgYellow +
217
- " Example --lat2=-54.652332555" +
218
- c_colors.Reset
219
- );
220
- console.log(
221
- c_colors.BSuccess +
222
- "--lng2" +
223
- c_colors.FgWhite +
224
- " for end longitude. " +
225
- c_colors.FgYellow +
226
- " Example --lng2=-54.652332555" +
227
- c_colors.Reset
228
- );
229
- console.log(
230
- c_colors.BSuccess +
231
- "--zout" +
232
- c_colors.FgWhite +
233
- " for maximum zoom in. You need to check provider normally up to 20" +
234
- c_colors.FgYellow +
235
- " Example --zout=2 " +
236
- c_colors.Reset
237
- );
238
- console.log(
239
- c_colors.BSuccess +
240
- "--zin" +
241
- c_colors.FgWhite +
242
- " for maximum zoom out. can be as low as 0. " +
243
- c_colors.FgYellow +
244
- " Example --zin=10 " +
245
- c_colors.Reset
246
- );
247
- console.log(
248
- c_colors.BSuccess +
249
- "--folder" +
250
- c_colors.FgWhite +
251
- " folder to store images in. " +
252
- c_colors.FgYellow +
253
- " Example --folder=./out " +
254
- c_colors.Reset
255
- );
256
- console.log(
257
- c_colors.BSuccess +
258
- "--provider" +
259
- c_colors.FgWhite +
260
- " if equal to 1 then use https://api.mapbox.com else use tile.openstreetmap.org. " +
261
- c_colors.FgYellow +
262
- " Example --folder=./out " +
263
- c_colors.Reset
264
- );
265
- console.log(
266
- c_colors.BSuccess +
267
- "--token" +
268
- c_colors.FgWhite +
269
- " Required only with https://api.mapbox.com " +
270
- c_colors.FgYellow +
271
- " Example --folder=pk.eyJ1IjoibZglZm55IiwiYSI698mNrZW84Nm9rYTA2ZWgycm9mdmNscmFxYzcifQ.c-zxDZXCthXmRsErPzKhbQ " +
272
- c_colors.Reset
273
- );
274
- process.exit();
275
- }
276
- if (myArgs.hasOwnProperty("lat1") !== true) {
277
- error = true;
278
- console.log(
279
- c_colors.BError +
280
- "Missing start latitude. " +
281
- c_colors.FgYellow +
282
- " Example --lat1=-54.652332555" +
283
- c_colors.Reset
284
- );
285
- }
286
- if (myArgs.hasOwnProperty("lng1") !== true) {
287
- error = true;
288
- console.log(
289
- c_colors.BError +
290
- "Missing start longitude. " +
291
- c_colors.FgYellow +
292
- " Example --lng1=-54.652332555" +
293
- c_colors.Reset
294
- );
295
- }
296
- if (myArgs.hasOwnProperty("lat2") !== true) {
297
- error = true;
298
- console.log(
299
- c_colors.BError +
300
- "Missing end latitude. " +
301
- c_colors.FgYellow +
302
- " Example --lat2=-54.652332555" +
303
- c_colors.Reset
304
- );
305
- }
306
- if (myArgs.hasOwnProperty("lng2") !== true) {
307
- error = true;
308
- console.log(
309
- c_colors.BError +
310
- "Missing end longitude. " +
311
- c_colors.FgYellow +
312
- " Example --lng2=-54.652332555" +
313
- c_colors.Reset
314
- );
315
- }
316
- if (myArgs.hasOwnProperty("zout") !== true) {
317
- myArgs.zout = 0;
318
- console.log(
319
- c_colors.FgCyan +
320
- "Missing zoom out max. Use zero as a default. " +
321
- c_colors.FgYellow +
322
- " Example --zout=0 " +
323
- c_colors.Reset
324
- );
325
- }
326
- if (myArgs.hasOwnProperty("zin") !== true) {
327
- error = true;
328
- console.log(
329
- c_colors.BError +
330
- "Missing zoom in max between 18 & 2. " +
331
- c_colors.FgYellow +
332
- " Example --zin=10 " +
333
- c_colors.Reset
334
- );
335
- }
336
- if (myArgs.hasOwnProperty("folder") !== true) {
337
- error = true;
338
- console.log(
339
- c_colors.BError +
340
- "Missing output folder. " +
341
- c_colors.FgYellow +
342
- " Example --folder=./out " +
343
- c_colors.Reset
344
- );
345
- }
346
- if (myArgs.hasOwnProperty("provider") === true) {
347
- if (myArgs.provider == 1)
348
- {
349
- map_provider = 1;
350
- if (myArgs.hasOwnProperty("token") !== true) {
351
- error = true;
352
- console.log(
353
- c_colors.BError +
354
- "Missing TOKEN file for https://api.mapbox.com. " +
355
- c_colors.FgYellow +
356
- " Example --token=pk.eyJ1IjoibZglZm55IiwiYSI698mNrZW84Nm9rYTA2ZWgycm9mdmNscmFxYzcifQ.c-zxDZXCthXmRsErPzKhbQ " +
357
- c_colors.Reset
358
- );
359
- }
360
- }
361
- }
362
-
363
- if (map_provider)
364
- if (error === true) process.exit(0);
365
- }
366
-
367
- /* ============================================================
368
- Download Images in Order
369
- ============================================================ */
370
-
371
- fn_handle_arguments();
372
- var folder = myArgs.folder;
373
- for (var zoom = myArgs.zout; zoom <= myArgs.zin; ++zoom) {
374
- var points = fn_convertFromLngLatToPoints(myArgs.lat1, myArgs.lng1, myArgs.lat2, myArgs.lng2, zoom);
375
-
376
- var point1 = points[0];
377
- var point2 = points[1];
378
-
379
- fn_download_images(point1, point2, zoom);
380
- }