biommap/sandbox/lines-polygons/leaflet/Proj4Leaflet-1.0.1/test/specs.js

185 lines
5.3 KiB
JavaScript
Raw Permalink Normal View History

describe('L.Proj.Projection', function() {
it('can create an instance from a SRS code and proj4 def', function() {
new L.Proj.Projection(
'EPSG:2400',
'+lon_0=15.808277777799999 +lat_0=0.0 +k=1.0 +x_0=1500000.0 ' +
'+y_0=0.0 +proj=tmerc +ellps=bessel +units=m ' +
'+towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs');
});
});
describe('L.Proj.CRS', function() {
it('can create an instance from a SRS code and proj4 def', function() {
var crs = new L.Proj.CRS(
'EPSG:2400',
'+lon_0=15.808277777799999 +lat_0=0.0 +k=1.0 +x_0=1500000.0 ' +
'+y_0=0.0 +proj=tmerc +ellps=bessel +units=m ' +
'+towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs');
expect(crs.code).to.be('EPSG:2400');
});
it('can project a coordinate to a point in the defined SRS', function() {
var crs = new L.Proj.CRS(
'EPSG:2400',
'+lon_0=15.808277777799999 +lat_0=0.0 +k=1.0 +x_0=1500000.0 ' +
'+y_0=0.0 +proj=tmerc +ellps=bessel +units=m ' +
'+towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs');
var pp = crs.project(new L.LatLng(55.723337, 14.194313));
expect(pp.x).to.be.within(1398775, 1398777);
expect(pp.y).to.be.within(6178303, 6178305);
});
it('has a default transformation that is [1, 0, -1, 0]', function() {
var crs = new L.Proj.CRS('EPSG:4326', '', {
resolutions: [1]
});
var ll = new L.LatLng(1, 1),
pp = crs.latLngToPoint(ll, 0),
up = crs.pointToLatLng(pp, 0);
expect(pp.x).to.be(ll.lng);
expect(pp.y).to.be(-ll.lat);
expect(up.lat).to.be(ll.lng);
expect(up.lng).to.be(ll.lat);
});
it('uses provided zoom level scales', function() {
var crs = new L.Proj.CRS('EPSG:4326', '', {
scales: [1, 2, 3]
});
var ll = new L.LatLng(1, 1);
for (var i = 0; i < 3; i++) {
var pp = crs.latLngToPoint(ll, i),
up = crs.pointToLatLng(pp, i),
s = i + 1;
expect(pp.x).to.be(ll.lng * s);
expect(pp.y).to.be(-ll.lat * s);
expect(up.lat).to.be(ll.lng);
expect(up.lng).to.be(ll.lat);
}
});
it('uses provided zoom level resolutions', function() {
var crs = new L.Proj.CRS('EPSG:4326', '', {
resolutions: [1, 0.5, 1 / 3]
});
var ll = new L.LatLng(1, 1);
for (var i = 0; i < 3; i++) {
var pp = crs.latLngToPoint(ll, i),
up = crs.pointToLatLng(pp, i),
s = i + 1;
expect(pp.x).to.be(ll.lng * s);
expect(pp.y).to.be(-ll.lat * s);
expect(up.lat).to.be(ll.lng);
expect(up.lng).to.be(ll.lat);
}
});
it('uses provided origin', function() {
var crs = new L.Proj.CRS('EPSG:4326', '', {
resolutions: [1],
origin: [10, 10]
});
var ll = new L.LatLng(12, 12),
pp = crs.latLngToPoint(ll, 0),
up = crs.pointToLatLng(pp, 0);
expect(pp.x.toPrecision(6)).to.be((ll.lng - 10).toPrecision(6));
expect(pp.y.toPrecision(6)).to.be((-ll.lat + 10).toPrecision(6));
expect(up.lat.toPrecision(6)).to.be(ll.lng.toPrecision(6));
expect(up.lng.toPrecision(6)).to.be(ll.lat.toPrecision(6));
});
it('accepts custom transformation', function() {
var crs = new L.Proj.CRS('EPSG:4326', '', {
resolutions: [1],
transformation: new L.Transformation(3, 0, 1, -5)
});
var ll = new L.LatLng(10, 10),
pp = crs.latLngToPoint(ll, 0),
up = crs.pointToLatLng(pp, 0);
expect(pp.x).to.be(ll.lng * 3);
expect(pp.y).to.be(ll.lat - 5);
expect(up.lat).to.be(ll.lng);
expect(up.lng).to.be(ll.lat);
});
it('size from bounds', function() {
var resolutions = [2, 1, 0.5],
crs = new L.Proj.CRS(
'EPSG:2400',
'+lon_0=15.808277777799999 +lat_0=0.0 +k=1.0 +x_0=1500000.0 ' +
'+y_0=0.0 +proj=tmerc +ellps=bessel +units=m ' +
'+towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs', {
bounds: L.bounds([0, 0], [4000, 5000]),
resolutions: resolutions,
origin: [0, 5000]
}),
worldSize = 256,
i,
bounds;
for (i = 0; i < resolutions.length; i++) {
bounds = crs.getProjectedBounds(i);
expect(bounds.max.x).to.be(4000 / resolutions[i]);
expect(bounds.max.y).to.be(5000 / resolutions[i]);
worldSize *= 2;
}
});
it('converts zoom to scale and vice versa and returns the same values', function () {
var crs = new L.Proj.CRS('EPSG:3006',
'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',
{
resolutions: [
8192, 4096, 2048, 1024, 512, 256, 128,
64, 32, 16, 8, 4, 2, 1, 0.5
]
});
expect(crs.zoom(crs.scale(8.9578457485))).to.be(8.9578457485);
expect(crs.zoom(crs.scale(8))).to.be(8);
expect(crs.zoom(crs.scale(1/8191)).toPrecision(6)).to.be((1/8191).toPrecision(6));
expect(crs.zoom(crs.scale(0.5))).to.be(0.5);
expect(crs.zoom(crs.scale(0.51))).to.be(0.51);
});
it('converts scale to zoom and returns Infinity if the scale passed in is bigger than maximum scale', function () {
var crs = new L.Proj.CRS('EPSG:3006', '', {
scales: [1, 2, 3]
});
expect(crs.zoom(4)).to.be(Infinity);
expect(crs.zoom(Infinity)).to.be(Infinity);
});
it('tests that distance works (L.CRS.Earth.Distance)', function testDistance() {
var crs = new L.Proj.CRS('EPSG:3006', '+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs', {
scales: [1, 2, 3]
});
expect(
crs.distance(
crs.unproject(new L.Point(218128, 6126002)),
crs.unproject(new L.Point(218128, 6126003))))
.to.be.within(0.9, 1);
expect(
crs.distance(new L.LatLng(57.777, 11.9), new L.LatLng(57.778, 11.9)))
.to.be.within(111.194, 111.195);
});
});