global-mercator
Version:
145 lines • 7.06 kB
JavaScript
const ava_1 = require('ava');
const lodash_1 = require('lodash');
const mercator = require('./index');
const TILE = { tx: 2389, ty: 5245, zoom: 13 };
const GOOGLE = { x: 2389, y: 2946, zoom: 13 };
const QUADKEY = '0302321010121';
const QUADKEY_BAD = '030486861';
const LATLNG = { lat: 44.99988840247, lng: -75.00005722045897, zoom: 13 };
const METERS = { mx: -8348968.179247875, my: 5621503.917462073, zoom: 13 };
const PIXELS = { px: 611669, py: 1342753, zoom: 13 };
const BOUNDS = [-8350592.466098936, 5620873.311978721, -8345700.496288682, 5625765.281788976];
const BOUNDS_LATLNG = [-75.01464843750001, 44.99588261816546, -74.97070312499999, 45.02695045318546];
ava_1.default('latLngToMeters', t => {
const meters = mercator.latLngToMeters(LATLNG);
t.deepEqual(meters.mx.toFixed(2), METERS.mx.toFixed(2));
t.deepEqual(meters.my.toFixed(2), METERS.my.toFixed(2));
});
ava_1.default('metersToLatLng', t => {
const latlng = mercator.metersToLatLng(METERS);
const { lat, lng, zoom } = latlng;
t.deepEqual({ lat: lat, lng: lng, zoom: zoom }, LATLNG);
});
ava_1.default('metersToPixels', t => {
const pixels = mercator.metersToPixels(METERS);
const { px, py, zoom } = pixels;
t.deepEqual(px, PIXELS.px);
t.deepEqual(py, PIXELS.py);
t.deepEqual(zoom, PIXELS.zoom);
});
ava_1.default('pixelsToTile', t => {
const tile = mercator.pixelsToTile(PIXELS);
t.deepEqual(tile, lodash_1.pick(TILE, ['tx', 'ty', 'zoom']));
});
ava_1.default('metersToTile', t => {
const tile = mercator.metersToTile(METERS);
t.deepEqual(tile, lodash_1.pick(TILE, ['tx', 'ty', 'zoom']));
});
ava_1.default('pixelsToMeters', t => {
const meters = mercator.pixelsToMeters(PIXELS);
t.deepEqual(meters.mx.toFixed(2), METERS.mx.toFixed(2));
t.deepEqual(meters.my.toFixed(2), METERS.my.toFixed(2));
});
ava_1.default('tileBounds', t => {
const bounds = mercator.tileBounds(TILE);
t.deepEqual(bounds.map(i => i.toFixed(2)), BOUNDS.map(i => i.toFixed(2)));
});
ava_1.default('tileLatLonBounds', t => {
const bounds = mercator.tileLatLonBounds(TILE);
t.deepEqual(bounds, BOUNDS_LATLNG);
});
ava_1.default('tileGoogle', t => {
const google = mercator.tileGoogle(TILE);
t.deepEqual(google, lodash_1.pick(GOOGLE, ['x', 'y', 'zoom']));
});
ava_1.default('tileQuadKey', t => {
const quadkey = mercator.tileQuadKey(TILE);
t.deepEqual(quadkey, QUADKEY);
});
ava_1.default('quadKeyGoogle', t => {
const google = mercator.quadKeyGoogle(QUADKEY);
t.deepEqual(google, lodash_1.pick(GOOGLE, ['x', 'y', 'zoom']));
});
ava_1.default('quadKeyTile', t => {
const tile = mercator.quadKeyTile(QUADKEY);
t.deepEqual(tile, lodash_1.pick(TILE, ['tx', 'ty', 'zoom']));
});
ava_1.default('Throws Error quadKeyTile', t => {
t.throws(() => mercator.quadKeyTile(QUADKEY_BAD), 'Invalid QuadKey digit sequence');
});
ava_1.default('googleBounds', t => {
const bounds = mercator.googleBounds(GOOGLE);
t.deepEqual(bounds.map(i => i.toFixed(2)), BOUNDS.map(i => i.toFixed(2)));
});
ava_1.default('googleLatLonBounds', t => {
const bounds = mercator.googleLatLonBounds(GOOGLE);
t.deepEqual(bounds, BOUNDS_LATLNG);
});
ava_1.default('latLngToGoogle', t => {
const google = mercator.latLngToGoogle(LATLNG);
t.deepEqual(google, lodash_1.pick(GOOGLE, ['x', 'y', 'zoom']));
});
ava_1.default('googleQuadKey', t => {
const quadkey = mercator.googleQuadKey(GOOGLE);
t.deepEqual(quadkey, QUADKEY);
});
ava_1.default('Throws Error Bad Bounds', t => {
t.throws(() => mercator.validateBounds([1]), '[bounds] must be an Array of 4 numbers');
t.throws(() => mercator.validateBounds([1, 2]), '[bounds] must be an Array of 4 numbers');
t.throws(() => mercator.validateBounds([1, 2, 3]), '[bounds] must be an Array of 4 numbers');
t.throws(() => mercator.validateBounds([1, 2, 3, 4, 5]), '[bounds] must be an Array of 4 numbers');
});
ava_1.default('Throws Error Bad LngLat', t => {
t.throws(() => new mercator.LatLng({ lat: -220, lng: 120 }), 'LatLng [lat] must be within -90 to 90 degrees');
t.throws(() => new mercator.LatLng({ lat: 220, lng: 120 }), 'LatLng [lat] must be within -90 to 90 degrees');
t.throws(() => new mercator.LatLng({ lat: 45, lng: -220 }), 'LatLng [lng] must be within -180 to 180 degrees');
t.throws(() => new mercator.LatLng({ lat: 45, lng: 220 }), 'LatLng [lng] must be within -180 to 180 degrees');
});
ava_1.default('boundsLatLngToMeters', t => {
const bounds = mercator.boundsLatLngToMeters(BOUNDS_LATLNG);
t.deepEqual(bounds.map(i => i.toFixed(2)), BOUNDS.map(i => i.toFixed(2)));
});
ava_1.default('googleTile', t => {
const tile = mercator.googleTile(GOOGLE);
t.deepEqual(tile, TILE);
});
ava_1.default('latLngToTile', t => {
const tile = mercator.latLngToTile(LATLNG);
t.deepEqual(tile, TILE);
});
ava_1.default('validateLatLng', t => {
t.deepEqual(mercator.validateLatLng([85, -120]), [85, -120]);
});
ava_1.default('validateLngLat', t => {
t.throws(() => mercator.validateLngLat([-120, 45, 1]), 'LatLng must be an Array of 2 numbers');
t.throws(() => mercator.validateLngLat([-120, 190]), 'LatLng [lat] must be within -90 to 90 degrees');
t.throws(() => mercator.validateLngLat([-220, 45]), 'LatLng [lng] must be within -180 to 180 degrees');
t.deepEqual(mercator.validateLngLat([-120, 85.5]), [-120, 85]);
t.deepEqual(mercator.validateLngLat([-120, -85.5]), [-120, -85]);
});
ava_1.default('validateMeters', t => {
t.throws(() => mercator.validateMeters([200000, 150000, 1]), 'Meters must be an Array of 2 numbers');
t.throws(() => mercator.validateMeters([200000, 999150000]), 'Meters [my] cannot be greater than 20037508.342789244');
t.throws(() => mercator.validateMeters([200000, -999150000]), 'Meters [my] cannot be less than -20037508.342789244');
t.throws(() => mercator.validateMeters([999200000, 150000]), 'Meters [mx] cannot be greater than 20037508.342789244');
t.throws(() => mercator.validateMeters([-999200000, -150000]), 'Meters [mx] cannot be less than -20037508.342789244');
});
ava_1.default('validatePixels', t => {
t.throws(() => mercator.validatePixels([200000, 150000, 1]), 'Pixels must be an Array of 2 numbers');
});
ava_1.default('validateZoom', t => {
t.throws(() => mercator.validateZoom(-2), '<zoom> cannot be less than 1');
t.throws(() => mercator.validateZoom(25), '<zoom> cannot be greater than 23');
});
ava_1.default('validateTile', t => {
t.throws(() => mercator.validateTile({ tx: -10, ty: 30, zoom: 5 }), 'Tile <tx> must not be less than 0');
t.throws(() => mercator.validateTile({ tx: 30, ty: -10, zoom: 5 }), 'Tile <ty> must not be less than 0');
});
ava_1.default('validateUndefined', t => {
t.throws(() => mercator.validateUndefined({ x: undefined }), '<x> is required');
});
ava_1.default('metersToPixels missing zoom', t => {
t.throws(() => mercator.metersToPixels({ mx: -8348968.179247875, my: 5621503.917462073 }), '<zoom> is required');
});
//# sourceMappingURL=test.js.map
;