@map-colonies/mc-utils 3.1.0 → 3.3.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.
- package/README.md +67 -67
- package/dist/arrays/index.d.ts +1 -1
- package/dist/arrays/index.js +17 -17
- package/dist/arrays/subGroups.d.ts +8 -8
- package/dist/arrays/subGroups.js +33 -33
- package/dist/communication/http/httpClient.d.ts +29 -29
- package/dist/communication/http/httpClient.d.ts.map +1 -1
- package/dist/communication/http/httpClient.js +353 -317
- package/dist/communication/http/httpClient.js.map +1 -1
- package/dist/communication/http/index.d.ts +1 -1
- package/dist/communication/http/index.js +17 -17
- package/dist/communication/index.d.ts +1 -1
- package/dist/communication/index.js +17 -17
- package/dist/dateTime/getUTCDate.d.ts +1 -1
- package/dist/dateTime/getUTCDate.js +10 -10
- package/dist/dateTime/index.d.ts +1 -1
- package/dist/dateTime/index.js +17 -17
- package/dist/geo/bboxUtils.d.ts +23 -23
- package/dist/geo/bboxUtils.js +89 -89
- package/dist/geo/geoConvertor.d.ts +18 -18
- package/dist/geo/geoConvertor.js +49 -49
- package/dist/geo/geoHash.d.ts +24 -24
- package/dist/geo/geoHash.js +134 -134
- package/dist/geo/geoIntersection.d.ts +19 -19
- package/dist/geo/geoIntersection.js +70 -70
- package/dist/geo/index.d.ts +8 -8
- package/dist/geo/index.js +24 -24
- package/dist/geo/tileBatcher.d.ts +8 -8
- package/dist/geo/tileBatcher.js +97 -97
- package/dist/geo/tileRanger.d.ts +46 -46
- package/dist/geo/tileRanger.js +232 -232
- package/dist/geo/tiles.d.ts +82 -82
- package/dist/geo/tiles.js +219 -219
- package/dist/geo/tilesGenerator.d.ts +2 -2
- package/dist/geo/tilesGenerator.js +17 -17
- package/dist/index.d.ts +6 -6
- package/dist/index.js +22 -22
- package/dist/models/enums/gdal/dataType.d.ts +16 -16
- package/dist/models/enums/gdal/dataType.js +20 -20
- package/dist/models/enums/gdal/index.d.ts +2 -2
- package/dist/models/enums/gdal/index.js +18 -18
- package/dist/models/enums/gdal/resamplingMethod.d.ts +16 -16
- package/dist/models/enums/gdal/resamplingMethod.js +20 -20
- package/dist/models/enums/geo/index.d.ts +1 -1
- package/dist/models/enums/geo/index.js +17 -17
- package/dist/models/enums/geo/tileOrigin.d.ts +7 -7
- package/dist/models/enums/geo/tileOrigin.js +11 -11
- package/dist/models/enums/index.d.ts +2 -2
- package/dist/models/enums/index.js +18 -18
- package/dist/models/index.d.ts +2 -2
- package/dist/models/index.js +18 -18
- package/dist/models/interfaces/geo/iPoint.d.ts +7 -7
- package/dist/models/interfaces/geo/iPoint.js +2 -2
- package/dist/models/interfaces/geo/iTile.d.ts +15 -15
- package/dist/models/interfaces/geo/iTile.js +2 -2
- package/dist/models/interfaces/geo/index.d.ts +2 -2
- package/dist/models/interfaces/geo/index.js +18 -18
- package/dist/models/interfaces/index.d.ts +1 -1
- package/dist/models/interfaces/index.js +17 -17
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +17 -17
- package/dist/utils/timeout.d.ts +4 -4
- package/dist/utils/timeout.js +22 -22
- package/package.json +79 -79
package/dist/geo/tileBatcher.js
CHANGED
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tileBatchGenerator = void 0;
|
|
4
|
-
const timeout_1 = require("../utils/timeout");
|
|
5
|
-
/**
|
|
6
|
-
* split collection of tile ranges to batches based on tile count
|
|
7
|
-
* @param batchSize amount of tile per batch
|
|
8
|
-
* @param ranges iterable collection of tile ranges
|
|
9
|
-
*/
|
|
10
|
-
async function* tileBatchGenerator(batchSize, ranges) {
|
|
11
|
-
let targetRanges = [];
|
|
12
|
-
let requiredForFullBatch = batchSize;
|
|
13
|
-
for await (const range of ranges) {
|
|
14
|
-
const dx = range.maxX - range.minX;
|
|
15
|
-
let dy = range.maxY - range.minY;
|
|
16
|
-
if (dx === 0 || dy === 0) {
|
|
17
|
-
continue;
|
|
18
|
-
}
|
|
19
|
-
let reminderX = range.maxX;
|
|
20
|
-
while (range.minY < range.maxY) {
|
|
21
|
-
//remaining tiles in batch row row
|
|
22
|
-
if (reminderX < range.maxX) {
|
|
23
|
-
const remaining = range.maxX - reminderX;
|
|
24
|
-
if (remaining > requiredForFullBatch) {
|
|
25
|
-
targetRanges.push({
|
|
26
|
-
minX: reminderX,
|
|
27
|
-
maxX: reminderX + requiredForFullBatch,
|
|
28
|
-
minY: range.minY,
|
|
29
|
-
maxY: range.minY + 1,
|
|
30
|
-
zoom: range.zoom,
|
|
31
|
-
});
|
|
32
|
-
yield await Promise.resolve(targetRanges);
|
|
33
|
-
reminderX += requiredForFullBatch;
|
|
34
|
-
targetRanges = [];
|
|
35
|
-
requiredForFullBatch = batchSize;
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
targetRanges.push({
|
|
40
|
-
minX: reminderX,
|
|
41
|
-
maxX: reminderX + remaining,
|
|
42
|
-
minY: range.minY,
|
|
43
|
-
maxY: range.minY + 1,
|
|
44
|
-
zoom: range.zoom,
|
|
45
|
-
});
|
|
46
|
-
range.minY++;
|
|
47
|
-
reminderX += remaining;
|
|
48
|
-
requiredForFullBatch -= remaining;
|
|
49
|
-
dy--;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
//add max full lines
|
|
53
|
-
const requiredLines = Math.floor(requiredForFullBatch / dx);
|
|
54
|
-
const yRange = Math.min(requiredLines, dy);
|
|
55
|
-
if (yRange > 0) {
|
|
56
|
-
targetRanges.push({
|
|
57
|
-
minX: range.minX,
|
|
58
|
-
maxX: range.maxX,
|
|
59
|
-
minY: range.minY,
|
|
60
|
-
maxY: range.minY + yRange,
|
|
61
|
-
zoom: range.zoom,
|
|
62
|
-
});
|
|
63
|
-
range.minY += yRange;
|
|
64
|
-
dy -= yRange;
|
|
65
|
-
requiredForFullBatch -= yRange * dx;
|
|
66
|
-
}
|
|
67
|
-
//add partial lines beginning
|
|
68
|
-
if (requiredForFullBatch > 0 && range.minY < range.maxY) {
|
|
69
|
-
const endX = Math.min(range.minX + requiredForFullBatch, range.maxX);
|
|
70
|
-
targetRanges.push({
|
|
71
|
-
minX: range.minX,
|
|
72
|
-
maxX: endX,
|
|
73
|
-
minY: range.minY,
|
|
74
|
-
maxY: range.minY + 1,
|
|
75
|
-
zoom: range.zoom,
|
|
76
|
-
});
|
|
77
|
-
requiredForFullBatch -= endX - range.minX;
|
|
78
|
-
if (endX < range.maxX) {
|
|
79
|
-
reminderX = endX;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
range.minY++;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (requiredForFullBatch === 0) {
|
|
86
|
-
yield await Promise.resolve(targetRanges);
|
|
87
|
-
targetRanges = [];
|
|
88
|
-
requiredForFullBatch = batchSize;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
await (0, timeout_1.timeout)(0); // TODO: * This is a hot fix to keep work async and handle concurrency requests while handling the task batch merging, remove this when moving to the new utils package ! *
|
|
92
|
-
}
|
|
93
|
-
if (targetRanges.length > 0) {
|
|
94
|
-
yield await Promise.resolve(targetRanges);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.tileBatchGenerator = tileBatchGenerator;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tileBatchGenerator = void 0;
|
|
4
|
+
const timeout_1 = require("../utils/timeout");
|
|
5
|
+
/**
|
|
6
|
+
* split collection of tile ranges to batches based on tile count
|
|
7
|
+
* @param batchSize amount of tile per batch
|
|
8
|
+
* @param ranges iterable collection of tile ranges
|
|
9
|
+
*/
|
|
10
|
+
async function* tileBatchGenerator(batchSize, ranges) {
|
|
11
|
+
let targetRanges = [];
|
|
12
|
+
let requiredForFullBatch = batchSize;
|
|
13
|
+
for await (const range of ranges) {
|
|
14
|
+
const dx = range.maxX - range.minX;
|
|
15
|
+
let dy = range.maxY - range.minY;
|
|
16
|
+
if (dx === 0 || dy === 0) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
let reminderX = range.maxX;
|
|
20
|
+
while (range.minY < range.maxY) {
|
|
21
|
+
//remaining tiles in batch row row
|
|
22
|
+
if (reminderX < range.maxX) {
|
|
23
|
+
const remaining = range.maxX - reminderX;
|
|
24
|
+
if (remaining > requiredForFullBatch) {
|
|
25
|
+
targetRanges.push({
|
|
26
|
+
minX: reminderX,
|
|
27
|
+
maxX: reminderX + requiredForFullBatch,
|
|
28
|
+
minY: range.minY,
|
|
29
|
+
maxY: range.minY + 1,
|
|
30
|
+
zoom: range.zoom,
|
|
31
|
+
});
|
|
32
|
+
yield await Promise.resolve(targetRanges);
|
|
33
|
+
reminderX += requiredForFullBatch;
|
|
34
|
+
targetRanges = [];
|
|
35
|
+
requiredForFullBatch = batchSize;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
targetRanges.push({
|
|
40
|
+
minX: reminderX,
|
|
41
|
+
maxX: reminderX + remaining,
|
|
42
|
+
minY: range.minY,
|
|
43
|
+
maxY: range.minY + 1,
|
|
44
|
+
zoom: range.zoom,
|
|
45
|
+
});
|
|
46
|
+
range.minY++;
|
|
47
|
+
reminderX += remaining;
|
|
48
|
+
requiredForFullBatch -= remaining;
|
|
49
|
+
dy--;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//add max full lines
|
|
53
|
+
const requiredLines = Math.floor(requiredForFullBatch / dx);
|
|
54
|
+
const yRange = Math.min(requiredLines, dy);
|
|
55
|
+
if (yRange > 0) {
|
|
56
|
+
targetRanges.push({
|
|
57
|
+
minX: range.minX,
|
|
58
|
+
maxX: range.maxX,
|
|
59
|
+
minY: range.minY,
|
|
60
|
+
maxY: range.minY + yRange,
|
|
61
|
+
zoom: range.zoom,
|
|
62
|
+
});
|
|
63
|
+
range.minY += yRange;
|
|
64
|
+
dy -= yRange;
|
|
65
|
+
requiredForFullBatch -= yRange * dx;
|
|
66
|
+
}
|
|
67
|
+
//add partial lines beginning
|
|
68
|
+
if (requiredForFullBatch > 0 && range.minY < range.maxY) {
|
|
69
|
+
const endX = Math.min(range.minX + requiredForFullBatch, range.maxX);
|
|
70
|
+
targetRanges.push({
|
|
71
|
+
minX: range.minX,
|
|
72
|
+
maxX: endX,
|
|
73
|
+
minY: range.minY,
|
|
74
|
+
maxY: range.minY + 1,
|
|
75
|
+
zoom: range.zoom,
|
|
76
|
+
});
|
|
77
|
+
requiredForFullBatch -= endX - range.minX;
|
|
78
|
+
if (endX < range.maxX) {
|
|
79
|
+
reminderX = endX;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
range.minY++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (requiredForFullBatch === 0) {
|
|
86
|
+
yield await Promise.resolve(targetRanges);
|
|
87
|
+
targetRanges = [];
|
|
88
|
+
requiredForFullBatch = batchSize;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
await (0, timeout_1.timeout)(0); // TODO: * This is a hot fix to keep work async and handle concurrency requests while handling the task batch merging, remove this when moving to the new utils package ! *
|
|
92
|
+
}
|
|
93
|
+
if (targetRanges.length > 0) {
|
|
94
|
+
yield await Promise.resolve(targetRanges);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.tileBatchGenerator = tileBatchGenerator;
|
|
98
98
|
//# sourceMappingURL=tileBatcher.js.map
|
package/dist/geo/tileRanger.d.ts
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import { BBox2d } from '@turf/helpers/dist/js/lib/geojson';
|
|
2
|
-
import { Feature, MultiPolygon, Polygon } from '@turf/turf';
|
|
3
|
-
import { ITile, ITileRange } from '../models/interfaces/geo/iTile';
|
|
4
|
-
/**
|
|
5
|
-
* class for generating and decoding tile hashes
|
|
6
|
-
*/
|
|
7
|
-
export declare class TileRanger {
|
|
8
|
-
/**
|
|
9
|
-
* converts tile to tile range of specified zoom level
|
|
10
|
-
* @param tile
|
|
11
|
-
* @param zoom target tile range zoom
|
|
12
|
-
* @returns
|
|
13
|
-
*/
|
|
14
|
-
tileToRange(tile: ITile, zoom: number): ITileRange;
|
|
15
|
-
/**
|
|
16
|
-
* generate tile hashes
|
|
17
|
-
* @param footprint footprint to cover with generated tile hashes
|
|
18
|
-
* @param zoom max hash zoom
|
|
19
|
-
* @returns
|
|
20
|
-
*/
|
|
21
|
-
encodeFootprint(footprint: Polygon | Feature<Polygon | MultiPolygon>, zoom: number, verbose?: boolean): AsyncGenerator<ITileRange>;
|
|
22
|
-
/**
|
|
23
|
-
* generate tile
|
|
24
|
-
* @param bbox bbox to cover with generated tiles
|
|
25
|
-
* @param zoom target tiles zoom level
|
|
26
|
-
*/
|
|
27
|
-
generateTiles(bbox: BBox2d, zoom: number): AsyncGenerator<ITile>;
|
|
28
|
-
/**
|
|
29
|
-
* generate tile
|
|
30
|
-
* @param footprint footprint to cover with generated tiles
|
|
31
|
-
* @param zoom target tiles zoom level
|
|
32
|
-
*/
|
|
33
|
-
generateTiles(footprint: Polygon | Feature<Polygon | MultiPolygon>, zoom: number): AsyncGenerator<ITile>;
|
|
34
|
-
private generateRanges;
|
|
35
|
-
/**
|
|
36
|
-
* generate tile
|
|
37
|
-
* @param tile tile to get all intersecting tiles from
|
|
38
|
-
* @param targetZoom target tiles zoom level
|
|
39
|
-
* @param intersectionTarget original zoom level and footprint to intersect
|
|
40
|
-
* @param intersectionFunction the intersection function to be called
|
|
41
|
-
*/
|
|
42
|
-
private optimizeHash;
|
|
43
|
-
private generateSubTiles;
|
|
44
|
-
private readonly tileFootprintIntersection;
|
|
45
|
-
private isBbox;
|
|
46
|
-
}
|
|
1
|
+
import { BBox2d } from '@turf/helpers/dist/js/lib/geojson';
|
|
2
|
+
import { Feature, MultiPolygon, Polygon } from '@turf/turf';
|
|
3
|
+
import { ITile, ITileRange } from '../models/interfaces/geo/iTile';
|
|
4
|
+
/**
|
|
5
|
+
* class for generating and decoding tile hashes
|
|
6
|
+
*/
|
|
7
|
+
export declare class TileRanger {
|
|
8
|
+
/**
|
|
9
|
+
* converts tile to tile range of specified zoom level
|
|
10
|
+
* @param tile
|
|
11
|
+
* @param zoom target tile range zoom
|
|
12
|
+
* @returns
|
|
13
|
+
*/
|
|
14
|
+
tileToRange(tile: ITile, zoom: number): ITileRange;
|
|
15
|
+
/**
|
|
16
|
+
* generate tile hashes
|
|
17
|
+
* @param footprint footprint to cover with generated tile hashes
|
|
18
|
+
* @param zoom max hash zoom
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
encodeFootprint(footprint: Polygon | Feature<Polygon | MultiPolygon>, zoom: number, verbose?: boolean): AsyncGenerator<ITileRange>;
|
|
22
|
+
/**
|
|
23
|
+
* generate tile
|
|
24
|
+
* @param bbox bbox to cover with generated tiles
|
|
25
|
+
* @param zoom target tiles zoom level
|
|
26
|
+
*/
|
|
27
|
+
generateTiles(bbox: BBox2d, zoom: number): AsyncGenerator<ITile>;
|
|
28
|
+
/**
|
|
29
|
+
* generate tile
|
|
30
|
+
* @param footprint footprint to cover with generated tiles
|
|
31
|
+
* @param zoom target tiles zoom level
|
|
32
|
+
*/
|
|
33
|
+
generateTiles(footprint: Polygon | Feature<Polygon | MultiPolygon>, zoom: number): AsyncGenerator<ITile>;
|
|
34
|
+
private generateRanges;
|
|
35
|
+
/**
|
|
36
|
+
* generate tile
|
|
37
|
+
* @param tile tile to get all intersecting tiles from
|
|
38
|
+
* @param targetZoom target tiles zoom level
|
|
39
|
+
* @param intersectionTarget original zoom level and footprint to intersect
|
|
40
|
+
* @param intersectionFunction the intersection function to be called
|
|
41
|
+
*/
|
|
42
|
+
private optimizeHash;
|
|
43
|
+
private generateSubTiles;
|
|
44
|
+
private readonly tileFootprintIntersection;
|
|
45
|
+
private isBbox;
|
|
46
|
+
}
|
|
47
47
|
//# sourceMappingURL=tileRanger.d.ts.map
|