|
1 | 1 | import {describe, test, expect} from 'vitest'; |
2 | 2 | import Point from '@mapbox/point-geometry'; |
3 | 3 | import {LngLat} from '../lng_lat'; |
4 | | -import {CanonicalTileID, UnwrappedTileID} from '../../tile/tile_id'; |
| 4 | +import {CanonicalTileID, OverscaledTileID, UnwrappedTileID} from '../../tile/tile_id'; |
5 | 5 | import {fixedLngLat, fixedCoord} from '../../../test/unit/lib/fixed'; |
6 | 6 | import type {Terrain} from '../../render/terrain'; |
7 | 7 | import {MercatorTransform} from './mercator_transform'; |
8 | 8 | import {LngLatBounds} from '../lng_lat_bounds'; |
9 | 9 | import {getMercatorHorizon} from './mercator_utils'; |
10 | 10 | import {mat4} from 'gl-matrix'; |
11 | 11 | import {expectToBeCloseToArray} from '../../util/test/util'; |
| 12 | +import {EXTENT} from '../../data/extent'; |
12 | 13 |
|
13 | 14 | describe('transform', () => { |
14 | 15 | test('creates a transform', () => { |
@@ -616,4 +617,49 @@ describe('transform', () => { |
616 | 617 | expect(transform.getCameraLngLat().lng).toBeCloseTo(camLngLat.lng, 10); |
617 | 618 | expect(transform.getCameraLngLat().lat).toBeCloseTo(camLngLat.lat, 10); |
618 | 619 | }); |
| 620 | + |
| 621 | + describe('getProjectionData', () => { |
| 622 | + const transform = new MercatorTransform({minZoom: 0, maxZoom: 22, minPitch: 0, maxPitch: 180, renderWorldCopies: true}); |
| 623 | + transform.resize(512, 512); |
| 624 | + test('parses a custom object', () => { |
| 625 | + const projectionData = transform.getProjectionData({overscaledTileID: { |
| 626 | + canonical: { |
| 627 | + x: 1, |
| 628 | + y: 0, |
| 629 | + z: 1, |
| 630 | + }, |
| 631 | + }}); |
| 632 | + expectToBeCloseToArray(projectionData.tileMercatorCoords, [0.5, 0, 0.5 / EXTENT, 0.5 / EXTENT]); |
| 633 | + expectToBeCloseToArray([...projectionData.mainMatrix], [ |
| 634 | + 0.09375, |
| 635 | + 0, |
| 636 | + 0, |
| 637 | + 0, |
| 638 | + 0, |
| 639 | + -0.09375, |
| 640 | + 0, |
| 641 | + 0, |
| 642 | + 0, |
| 643 | + 0, |
| 644 | + -0.000013132550520822406, |
| 645 | + -0.000012790334039891604, |
| 646 | + 0, |
| 647 | + 768, |
| 648 | + 767.7944946289062, |
| 649 | + 768 |
| 650 | + ]); |
| 651 | + }); |
| 652 | + test('parses OverscaledTileID', () => { |
| 653 | + const transform = new MercatorTransform({minZoom: 0, maxZoom: 22, minPitch: 0, maxPitch: 180, renderWorldCopies: true}); |
| 654 | + transform.resize(512, 512); |
| 655 | + const projectionData = transform.getProjectionData({overscaledTileID: new OverscaledTileID(1, 0, 1, 1, 0)}); |
| 656 | + expectToBeCloseToArray(projectionData.tileMercatorCoords, [0.5, 0, 0.5 / EXTENT, 0.5 / EXTENT]); |
| 657 | + }); |
| 658 | + test('parses null', () => { |
| 659 | + const transform = new MercatorTransform({minZoom: 0, maxZoom: 22, minPitch: 0, maxPitch: 180, renderWorldCopies: true}); |
| 660 | + transform.resize(512, 512); |
| 661 | + const projectionData = transform.getProjectionData({overscaledTileID: null}); |
| 662 | + expectToBeCloseToArray(projectionData.tileMercatorCoords, [0, 0, 1, 1]); |
| 663 | + }); |
| 664 | + }); |
619 | 665 | }); |
0 commit comments