package org.syzygy.gps; import junit.framework.TestCase; public abstract class CoordinateMapperTests extends TestCase { CoordinateMapper mapper; protected abstract CoordinateMapper createMapper(); protected void setUp() { mapper = createMapper(); } private CoordinateMapper.Tile origin() { return mapper.getTile(0, 0, 0); } public void testInitial() { CoordinateMapper.Tile tile = origin(); assertEquals(-180.0, mapper.getLongitude(tile.getTileX(), 0), 0.00001); assertEquals(82.74, mapper.getLatitude(tile.getTileY(), 0), 0.001); assertEquals(0, tile.getZoom()); } public void testEquals() { CoordinateMapper.Tile tile = origin(); CoordinateMapper.Tile other = mapper.getTile(0.0, 0.0, 0); assertNotSame(other, tile); assertEquals(other, tile); } public void testCantZoomOutFromInitial() { CoordinateMapper.Tile tile = origin(); CoordinateMapper.Tile other = tile.zoomOut(); assertEquals(other, tile); } public void testCanZoomInFromInitial() { CoordinateMapper.Tile first = origin(); CoordinateMapper.Tile second = first.zoomIn(1, 0); CoordinateMapper.Tile third = first.zoomIn(0, 1); assertFalse(first.equals(second)); assertFalse(first.equals(third)); assertFalse(second.equals(third)); assertEquals(first, second.zoomOut()); assertEquals(first, third.zoomOut()); } public void testTileBoundingBoxes() { // FIXME: latitude CoordinateMapper.Tile dublin = mapper.getTile(53.33306, -6.24889, 0); assertEquals(-180.0, mapper.getLongitude(dublin.getTileX(), dublin.getZoom()), 0.0001); assertEquals(180.0, mapper.getLongitude(dublin.getTileX() + 1, dublin.getZoom()), 0.0001); CoordinateMapper.Tile dublin1 = dublin.zoomIn(0, 0); assertEquals(-180.0, mapper.getLongitude(dublin1.getTileX(), dublin1.getZoom()), 0.0001); assertEquals(0.0, mapper.getLongitude(dublin1.getTileX() + 1, dublin1.getZoom()), 0.0001); CoordinateMapper.Tile dublin2 = dublin1.zoomIn(1, 1); assertEquals(-90.0, mapper.getLongitude(dublin2.getTileX(), dublin2.getZoom()), 0.0001); assertEquals(0.0, mapper.getLongitude(dublin2.getTileX() + 1, dublin2.getZoom()), 0.0001); CoordinateMapper.Tile dublin3 = dublin2.zoomIn(1, 1); assertEquals(-45.0, mapper.getLongitude(dublin3.getTileX(), dublin3.getZoom()), 0.0001); assertEquals(0.0, mapper.getLongitude(dublin3.getTileX() + 1, dublin3.getZoom()), 0.0001); } public void testGetTileAtZoom() { double lat = Util.decimalize(5128.27), lon = -Util.decimalize(4.10); int zoom = 12; CoordinateMapper.Tile peckham = mapper.getTile(lat, lon, zoom); assertEquals(2047, peckham.getTileX()); assertEquals(1362, peckham.getTileY()); assertEquals(-0.08789, mapper.getLongitude(peckham.getTileX(), zoom), 0.001); assertEquals(51.5087, mapper.getLatitude(peckham.getTileY(), zoom), 0.001); } public void testGetScreenPosition() { double longitude = -6.250817, latitude = 53.25561; CoordinateMapper.Tile tile = mapper.getTile(latitude, longitude, 11); assertEquals(988, tile.getTileX()); assertEquals(664, tile.getTileY()); assertEquals(11, tile.getZoom()); assertEquals(112, mapper.getScreenX(tile, longitude, 256)); assertEquals(183, mapper.getScreenY(tile, latitude, 256)); } }