package org.geowebcache.grid;
import junit.framework.TestCase;
public class GridSetFactoryTest extends TestCase {
public void testResolutionsArrayEPSG4326() throws Exception {
BoundingBox extent = new BoundingBox(-180, -90, 180, 90);
double[] resolutions = { 180.0 / 256, 180.0 / 512, 180.0 / 1024, 180.0 / 2048 };
GridSet gridSet = GridSetFactory.createGridSet("test", SRS.getEPSG4326(), extent, false,
resolutions, null, null, 0.00028, null, 256, 256, false);
assertEquals("test", gridSet.getName());
assertEquals(-180.0, gridSet.tileOrigin()[0]);
assertEquals(-90.0, gridSet.tileOrigin()[1]);
assertEquals(resolutions.length, gridSet.getGridLevels().length);
Grid grid0 = gridSet.getGridLevels()[0];
assertEquals(180.0 / 256, grid0.getResolution());
assertEquals(2L, grid0.getNumTilesWide());
assertEquals(1L, grid0.getNumTilesHigh());
Grid grid3 = gridSet.getGridLevels()[3];
assertEquals(180.0 / 2048, grid3.getResolution());
assertEquals((long) Math.pow(2, 4), grid3.getNumTilesWide());
assertEquals((long) Math.pow(2, 3), grid3.getNumTilesHigh());
}
public void testResolutionsArrayEPSG3785() throws Exception {
BoundingBox extent = new BoundingBox(-20037508.34, -20037508.34, 20037508.34, 20037508.34);
double[] resolutions = { (20037508.34 * 2) / 256, (20037508.34 * 2) / 512,
(20037508.34 * 2) / 1024, (20037508.34 * 2) / 2048 };
GridSet gridSet = GridSetFactory.createGridSet("test", SRS.getEPSG3857(), extent, false,
resolutions, null, null, 0.00028, null, 256, 256, false);
Grid grid0 = gridSet.getGridLevels()[0];
assertEquals((20037508.34 * 2) / 256, grid0.getResolution());
assertEquals(1L, grid0.getNumTilesWide());
assertEquals(1L, grid0.getNumTilesHigh());
Grid grid3 = gridSet.getGridLevels()[3];
assertEquals((long) Math.pow(2, 3), grid3.getNumTilesWide());
assertEquals((long) Math.pow(2, 3), grid3.getNumTilesHigh());
}
public void testResolutionsArrayTricky1() throws Exception {
// This should be expanded in the X direction
BoundingBox extent = new BoundingBox(-173, -90, 180, 96);
double[] resolutions = { 180.0 / 200, 180.0 / 400, 180.0 / 800 };
GridSet gridSet = GridSetFactory.createGridSet("test", SRS.getEPSG4326(), extent, false,
resolutions, null, null, 0.00028, null, 200, 200, false);
assertEquals(-173.0, gridSet.tileOrigin()[0]);
assertEquals(-90.0, gridSet.tileOrigin()[1]);
assertEquals(resolutions.length, gridSet.getGridLevels().length);
Grid grid0 = gridSet.getGridLevels()[0];
assertEquals(180.0 / 200, grid0.getResolution());
assertEquals(2L, grid0.getNumTilesWide());
assertEquals(2L, grid0.getNumTilesHigh());
Grid grid3 = gridSet.getGridLevels()[2];
assertEquals(180.0 / 800, grid3.getResolution());
assertEquals(8L, grid3.getNumTilesWide());
assertEquals(5L, grid3.getNumTilesHigh());
}
public void testBoundingBoxEPSG4326() throws Exception {
BoundingBox extent = new BoundingBox(-180, -90, 180, 90);
GridSet gridSet = GridSetFactory.createGridSet("test", SRS.getEPSG4326(), extent, false, 4,
null, 0.00028, 256, 256, false);
assertEquals("test", gridSet.getName());
assertEquals(-180.0, gridSet.tileOrigin()[0]);
assertEquals(-90.0, gridSet.tileOrigin()[1]);
assertEquals(4, gridSet.getGridLevels().length);
Grid grid0 = gridSet.getGridLevels()[0];
assertEquals(180.0 / 256, grid0.getResolution());
assertEquals(2L, grid0.getNumTilesWide());
assertEquals(1L, grid0.getNumTilesHigh());
Grid grid3 = gridSet.getGridLevels()[3];
assertEquals(180.0 / 2048, grid3.getResolution());
assertEquals((long) Math.pow(2, 4), grid3.getNumTilesWide());
assertEquals((long) Math.pow(2, 3), grid3.getNumTilesHigh());
}
public void testBoundingBoxEPSG3785() throws Exception {
BoundingBox extent = new BoundingBox(-20037508.34, -20037508.34, 20037508.34, 20037508.34);
GridSet gridSet = GridSetFactory.createGridSet("test", SRS.getEPSG3857(), extent, false, 6,
null, 0.00028, 256, 256, false);
Grid grid0 = gridSet.getGridLevels()[0];
assertEquals((20037508.34 * 2) / 256, grid0.getResolution());
assertEquals(1L, grid0.getNumTilesWide());
assertEquals(1L, grid0.getNumTilesHigh());
Grid grid3 = gridSet.getGridLevels()[3];
assertEquals((long) Math.pow(2, 3), grid3.getNumTilesWide());
assertEquals((long) Math.pow(2, 3), grid3.getNumTilesHigh());
}
public void testBoundingBoxTricky1() throws Exception {
BoundingBox extent = new BoundingBox(-180, -90, 172, 90);
GridSet gridSet = GridSetFactory.createGridSet("test", SRS.getEPSG4326(), extent, false, 4,
null, 0.00028, 256, 256, false);
assertEquals("test", gridSet.getName());
assertEquals(-180.0, gridSet.tileOrigin()[0]);
assertEquals(-90.0, gridSet.tileOrigin()[1]);
assertEquals(4, gridSet.getGridLevels().length);
Grid grid0 = gridSet.getGridLevels()[0];
assertEquals(180.0 / 256, grid0.getResolution());
assertEquals(2L, grid0.getNumTilesWide());
assertEquals(1L, grid0.getNumTilesHigh());
}
public void testBoundingBoxTricky2() throws Exception {
BoundingBox extent = new BoundingBox(-180, -90, 180, 82);
SRS srs = SRS.getEPSG4326();
GridSet gridSet = GridSetFactory.createGridSet("test", srs, extent, false, 4, null,
0.00028, 256, 256, false);
assertEquals("test", gridSet.getName());
assertEquals(-180.0, gridSet.tileOrigin()[0]);
assertEquals(-90.0, gridSet.tileOrigin()[1]);
assertEquals(4, gridSet.getGridLevels().length);
Grid grid0 = gridSet.getGridLevels()[0];
assertEquals(180.0 / 256, grid0.getResolution());
assertEquals(2L, grid0.getNumTilesWide());
assertEquals(1L, grid0.getNumTilesHigh());
}
public void testResolutionsPreservedFlag() throws Exception {
BoundingBox extent = new BoundingBox(-180, -90, 180, 90);
double[] resolutions = { 180.0 / 256, 180.0 / 512, 180.0 / 1024, 180.0 / 2048 };
double[] scales = { 500E6, 250E6, 100E6 };
GridSet gridSet = GridSetFactory.createGridSet("test", SRS.getEPSG4326(), extent, false,
resolutions, null, null, 0.00028, null, 256, 256, false);
assertTrue(gridSet.isResolutionsPreserved());
gridSet = GridSetFactory.createGridSet("test", SRS.getEPSG4326(), extent, false, null,
scales, null, 0.00028, null, 256, 256, false);
assertFalse(gridSet.isResolutionsPreserved());
}
public void testLevels2() throws Exception {
BoundingBox extent = new BoundingBox(0, 0, 1000, 1000);
int levels = 16;
int tileW = 300, tileH = 100;
Double metersPerUnit = 1D;
double pixelSize = GridSetFactory.DEFAULT_PIXEL_SIZE_METER;
GridSet gridSet = GridSetFactory.createGridSet("test", SRS.getSRS(3005), extent, false,
levels, metersPerUnit, pixelSize, tileW, tileH, false);
assertEquals(extent, gridSet.getOriginalExtent());
Grid[] gridLevels = gridSet.getGridLevels();
assertEquals(16, gridLevels.length);
assertEquals(1, gridLevels[0].getNumTilesWide());
assertEquals(3, gridLevels[0].getNumTilesHigh());
for (int i = 1; i < gridLevels.length; i++) {
assertEquals(2 * gridLevels[i - 1].getNumTilesWide(), gridLevels[i].getNumTilesWide());
assertEquals(2 * gridLevels[i - 1].getNumTilesHigh(), gridLevels[i].getNumTilesHigh());
}
}
public void testWideBoundsTallTile() throws Exception {
BoundingBox extent = new BoundingBox(0, 0, 100, 45);
// should give 4x1 tiles, with bounds height expanded to 50
int tileWidth = 10;
int tileHeight = 20;
SRS srs = SRS.getEPSG4326();
boolean alignTopLeft = false;
GridSet gridSet = GridSetFactory.createGridSet("test", srs, extent, alignTopLeft, 4, null,
0.00028, tileWidth, tileHeight, false);
assertEquals("test", gridSet.getName());
assertEquals(0D, gridSet.tileOrigin()[0]);
assertEquals(0D, gridSet.tileOrigin()[1]);
assertEquals(new BoundingBox(0, 0, 100, 50), gridSet.getBounds());
assertEquals(4, gridSet.getGridLevels().length);
Grid grid0 = gridSet.getGridLevels()[0];
assertEquals(4L, grid0.getNumTilesWide());
assertEquals(1L, grid0.getNumTilesHigh());
assertEquals(50D / 20D, grid0.getResolution());
alignTopLeft = true;
gridSet = GridSetFactory.createGridSet("test", srs, extent, alignTopLeft, 4, null, 0.00028,
tileWidth, tileHeight, false);
assertEquals(new BoundingBox(0, -5, 100, 45), gridSet.getBounds());
assertEquals("test", gridSet.getName());
assertEquals(0D, gridSet.tileOrigin()[0]);
assertEquals(45D, gridSet.tileOrigin()[1]);
}
public void testTallBoundsWideTile() throws Exception {
BoundingBox extent = new BoundingBox(0, 0, 100, 490);
// should give 1x10 tiles, with bounds width expanded to 500
int tileWidth = 20;
int tileHeight = 10;
SRS srs = SRS.getEPSG4326();
boolean alignTopLeft = false;
GridSet gridSet = GridSetFactory.createGridSet("test", srs, extent, alignTopLeft, 4, null,
0.00028, tileWidth, tileHeight, false);
assertEquals(new BoundingBox(0, 0, 100, 500), gridSet.getBounds());
assertEquals(4, gridSet.getGridLevels().length);
Grid grid0 = gridSet.getGridLevels()[0];
long tilesWide = 1;
long tilesHigh = 10;
assertEquals(tilesWide, grid0.getNumTilesWide());
assertEquals(tilesHigh, grid0.getNumTilesHigh());
assertEquals(500D / tileHeight / tilesHigh, grid0.getResolution());
alignTopLeft = true;
gridSet = GridSetFactory.createGridSet("test", srs, extent, alignTopLeft, 4, null, 0.00028,
tileWidth, tileHeight, false);
BoundingBox bounds = gridSet.getBounds();
assertEquals(new BoundingBox(0, -10, 100, 490), bounds);
assertEquals("test", gridSet.getName());
assertEquals(0D, gridSet.tileOrigin()[0]);
assertEquals(490D, gridSet.tileOrigin()[1]);
}
}