Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
} = opts;
this.id = id || this.constructor.displayName || 'viewport';
// Check if we have a geospatial anchor
this.isGeospatial = Number.isFinite(latitude) && Number.isFinite(longitude);
// Silently allow apps to send in w,h = 0,0
this.x = x;
this.y = y;
this.width = width || 1;
this.height = height || 1;
this.zoom = zoom;
if (!Number.isFinite(this.zoom)) {
this.zoom = this.isGeospatial ? getMeterZoom({latitude}) : DEFAULT_ZOOM;
}
this.scale = Math.pow(2, this.zoom);
// Calculate distance scales if lng/lat/zoom are provided
this.distanceScales = this.isGeospatial
? getDistanceScales({latitude, longitude, scale: this.scale})
: distanceScales || DEFAULT_DISTANCE_SCALES;
this.focalDistance = opts.focalDistance || 1;
this.distanceScales.metersPerPixel = new Vector3(this.distanceScales.metersPerPixel);
this.distanceScales.pixelsPerMeter = new Vector3(this.distanceScales.pixelsPerMeter);
this.position = ZERO_VECTOR;
this.meterOffset = ZERO_VECTOR;
if (position) {
test('getMeterZoom', t => {
const TEST_LATITUDES = [0, 37.5, 75];
for (const latitude of TEST_LATITUDES) {
const zoom = getMeterZoom({latitude});
const {pixelsPerMeter} = getDistanceScales({latitude, longitude: 0, zoom});
t.deepEqual(toLowPrecision(pixelsPerMeter), [1, -1, 1], 'zoom yields 1 pixel per meter');
}
t.end();
});