maplibre-gl
Version:
BSD licensed community fork of mapbox-gl, a WebGL interactive maps library
98 lines (84 loc) • 3.33 kB
text/typescript
import Point from '@mapbox/point-geometry';
import {LngLat} from '../geo/lng_lat';
import {Transform} from '../geo/transform';
import {smartWrap} from './smart_wrap';
const transform = new Transform();
transform.width = 100;
transform.height = 100;
transform.getHorizon = () => 0; // map center
describe('smartWrap', () => {
test('Shifts lng to -360 deg when such point is closer to the priorPos', () => {
transform.locationPoint = ((ll: LngLat) => {
if (ll.lng === -360) {
return new Point(90, 51); // close to priorPos & below horizon
} else {
return new Point(120, 51);
}
});
const result = smartWrap(
new LngLat(0, 0),
new Point(100, 51),
transform);
expect(result.lng).toBe(-360);
});
test('Shifts lng to +360 deg when such point is closer to the priorPos', () => {
transform.locationPoint = ((ll: LngLat) => {
if (ll.lng === 360) {
return new Point(90, 51); // close to priorPos & below horizon
} else {
return new Point(120, 51);
}
});
const result = smartWrap(
new LngLat(0, 0),
new Point(100, 51),
transform);
expect(result.lng).toBe(360);
});
test('Does not change lng when there are no closer points at -360 and +360 deg', () => {
transform.locationPoint = ((ll: LngLat) => {
if (ll.lng === 15) {
return new Point(90, 51); // close to priorPos & below horizon
} else {
return new Point(12000, 51);
}
});
const result = smartWrap(
new LngLat(15, 0),
new Point(100, 51),
transform);
expect(result.lng).toBe(15);
});
test('Does not change lng to -360 deg when such point is above horizon', () => {
transform.locationPoint = ((ll: LngLat) => {
if (ll.lng === -360) {
return new Point(90, 49); // close to priorPos BUT above horizon
} else {
return new Point(120, 51);
}
});
const result = smartWrap(
new LngLat(0, 0),
new Point(100, 51),
transform);
expect(result.lng).toBe(0);
});
test('Shifts lng to -360 if lng is outside viewport on the right and at least 180° from map center', () => {
transform.center.lng = 50;
transform.locationPoint = (() => { return new Point(110, 51); }); // outside viewport
const result = smartWrap(
new LngLat(250, 0), // 200 from map center
new Point(0, 0), // priorPos doesn't matter in this case
transform);
expect(result.lng).toBe(-110);
});
test('Shifts lng to +360 if lng is outside viewport on the left and at least 180° from map center', () => {
transform.center.lng = 50;
transform.locationPoint = (() => { return new Point(-10, 51); }); // outside viewport
const result = smartWrap(
new LngLat(-150, 0), // 200 from map center
new Point(0, 0), // priorPos doesn't matter in this case
transform);
expect(result.lng).toBe(210);
});
});