mirror of
https://github.com/NASAWorldWind/WebWorldWind.git
synced 2025-12-08 19:46:18 +00:00
167 lines
7.2 KiB
JavaScript
167 lines
7.2 KiB
JavaScript
/*
|
||
* Copyright 2003-2006, 2009, 2017, 2020 United States Government, as represented
|
||
* by the Administrator of the National Aeronautics and Space Administration.
|
||
* All rights reserved.
|
||
*
|
||
* The NASAWorldWind/WebWorldWind platform is licensed under the Apache License,
|
||
* Version 2.0 (the "License"); you may not use this file except in compliance
|
||
* with the License. You may obtain a copy of the License
|
||
* at http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software distributed
|
||
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||
* specific language governing permissions and limitations under the License.
|
||
*
|
||
* NASAWorldWind/WebWorldWind also contains the following 3rd party Open Source
|
||
* software:
|
||
*
|
||
* ES6-Promise – under MIT License
|
||
* libtess.js – SGI Free Software License B
|
||
* Proj4 – under MIT License
|
||
* JSZip – under MIT License
|
||
*
|
||
* A complete listing of 3rd Party software notices and licenses included in
|
||
* WebWorldWind can be found in the WebWorldWind 3rd-party notices and licenses
|
||
* PDF found in code directory.
|
||
*/
|
||
define([
|
||
'test/CustomMatchers.test',
|
||
'src/geom/Sector',
|
||
'src/geom/TileMatrix',
|
||
'src/geom/TileMatrixSet'
|
||
|
||
], function (CustomMatchers, Sector, TileMatrix, TileMatrixSet) {
|
||
"use strict";
|
||
|
||
beforeEach(function () {
|
||
jasmine.addMatchers(CustomMatchers);
|
||
});
|
||
|
||
describe("TileMatrixSet fromTilePyramid for global coverage", function () {
|
||
var sector = Sector.FULL_SPHERE;
|
||
var matrixWidth = 4;
|
||
var matrixHeight = 2;
|
||
var tileWidth = 256;
|
||
var tileHeight = 256;
|
||
var numLevels = 10;
|
||
|
||
it("should create 10 levels", function () {
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
expect(tileMatrixSet.entries.length).toBe(10);
|
||
});
|
||
|
||
it("should divide subsequent tile matrices", function () {
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
var previousWidth = matrixWidth, previousHeight = matrixHeight;
|
||
for (var idx = 1; idx < tileMatrixSet.entries.length; idx++) {
|
||
expect(tileMatrixSet.entries[idx].matrixWidth).toBe(previousWidth * 2);
|
||
expect(tileMatrixSet.entries[idx].matrixHeight).toBe(previousHeight * 2);
|
||
previousWidth = tileMatrixSet.entries[idx].matrixWidth;
|
||
previousHeight = tileMatrixSet.entries[idx].matrixHeight;
|
||
}
|
||
});
|
||
|
||
it("should maintain the same geographic region for each TileMatrix", function () {
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
for (var idx = 1; idx < tileMatrixSet.entries.length; idx++) {
|
||
expect(tileMatrixSet.entries[idx].sector).toBeSector(sector);
|
||
}
|
||
});
|
||
|
||
it("should always keep the tileWidth and tileHeight consistent", function () {
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
for (var idx = 1; idx < tileMatrixSet.entries.length; idx++) {
|
||
expect(tileMatrixSet.entries[idx].tileWidth).toBeSector(tileWidth);
|
||
expect(tileMatrixSet.entries[idx].tileHeight).toBeSector(tileHeight);
|
||
}
|
||
});
|
||
});
|
||
|
||
describe("TileMatrixSet fromTilePyramid for regional coverage", function () {
|
||
var sector = new Sector(0, 90, 0, 90);
|
||
var matrixWidth = 2;
|
||
var matrixHeight = 2;
|
||
var tileWidth = 256;
|
||
var tileHeight = 256;
|
||
var numLevels = 10;
|
||
|
||
it("should create 10 levels", function () {
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
expect(tileMatrixSet.entries.length).toBe(10);
|
||
});
|
||
|
||
it("should divide subsequent tile matrices", function () {
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
var previousWidth = matrixWidth, previousHeight = matrixHeight;
|
||
for (var idx = 1; idx < tileMatrixSet.entries.length; idx++) {
|
||
expect(tileMatrixSet.entries[idx].matrixWidth).toBe(previousWidth * 2);
|
||
expect(tileMatrixSet.entries[idx].matrixHeight).toBe(previousHeight * 2);
|
||
previousWidth = tileMatrixSet.entries[idx].matrixWidth;
|
||
previousHeight = tileMatrixSet.entries[idx].matrixHeight;
|
||
}
|
||
});
|
||
|
||
it("should maintain the same geographic region for each TileMatrix", function () {
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
for (var idx = 1; idx < tileMatrixSet.entries.length; idx++) {
|
||
expect(tileMatrixSet.entries[idx].sector).toBeSector(sector);
|
||
}
|
||
});
|
||
|
||
it("should always keep the tileWidth and tileHeight consistent", function () {
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
for (var idx = 1; idx < tileMatrixSet.entries.length; idx++) {
|
||
expect(tileMatrixSet.entries[idx].tileWidth).toBeSector(tileWidth);
|
||
expect(tileMatrixSet.entries[idx].tileHeight).toBeSector(tileHeight);
|
||
}
|
||
});
|
||
});
|
||
|
||
describe("TileMatrixSet indexOfMatrixNearest global coverage", function () {
|
||
var sector = Sector.FULL_SPHERE;
|
||
var matrixWidth = 4;
|
||
var matrixHeight = 2;
|
||
var tileWidth = 256;
|
||
var tileHeight = 256;
|
||
var numLevels = 10;
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
it("should find the nearest resolution for level 5", function () {
|
||
var expectedLevel = 5;
|
||
var calculatedResolutionLevel5 = sector.deltaLatitude() / (tileHeight * Math.pow(matrixHeight, expectedLevel + 1));
|
||
|
||
var actualLevel = tileMatrixSet.indexOfMatrixNearest(calculatedResolutionLevel5);
|
||
|
||
expect(actualLevel).toBe(expectedLevel);
|
||
});
|
||
});
|
||
|
||
describe("TileMatrixSet indexOfMatrixNearest global coverage", function () {
|
||
var sector = new Sector(0, 90, 0, 90);
|
||
var matrixWidth = 4;
|
||
var matrixHeight = 2;
|
||
var tileWidth = 256;
|
||
var tileHeight = 256;
|
||
var numLevels = 10;
|
||
var tileMatrixSet = TileMatrixSet.fromTilePyramid(sector, matrixWidth, matrixHeight, tileWidth, tileHeight, numLevels);
|
||
|
||
it("should find the nearest resolution for level 5", function () {
|
||
var expectedLevel = 5;
|
||
var calculatedResolutionLevel5 = sector.deltaLatitude() / (tileHeight * Math.pow(matrixHeight, expectedLevel + 1));
|
||
|
||
var actualLevel = tileMatrixSet.indexOfMatrixNearest(calculatedResolutionLevel5);
|
||
|
||
expect(actualLevel).toBe(expectedLevel);
|
||
});
|
||
});
|
||
});
|