/*******************************************************************************
* Copyright (c) MOBAC developers
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package mobac.program.atlascreators;
import java.io.File;
import java.io.IOException;
import mobac.exceptions.AtlasTestException;
import mobac.exceptions.MapCreationException;
import mobac.program.annotations.AtlasCreatorName;
import mobac.program.atlascreators.tileprovider.TileProvider;
import mobac.program.interfaces.LayerInterface;
import mobac.program.interfaces.MapInterface;
import mobac.program.interfaces.MapSource;
/**
* Creates a tile cache structure as used by <a href="http://www.pathaway.com/">PathAway</a> (for WindowsMobile,
* Symbian, Palm)
*/
@AtlasCreatorName("PathAway tile cache")
public class PathAway extends OSMTracker {
public PathAway() {
super();
tileFileNamePattern = "%02X/%04X/%04X.%s";
}
@Override
public void initializeMap(MapInterface map, TileProvider mapTileProvider) {
super.initializeMap(map, mapTileProvider);
MapSource mapSource = map.getMapSource();
String shortMapDir = null;
if (mapSource.getName().equals("Google Maps"))
shortMapDir = "G1";
else if (mapSource.getName().equals("Google Earth"))
shortMapDir = "G2";
else if (mapSource.getName().equals("Google Terrain"))
shortMapDir = "G3";
else if (mapSource.getName().equals("Mapnik"))
shortMapDir = "OSM1";
else if (mapSource.getName().equals("OSM Cycle Map"))
shortMapDir = "OCM1";
if (shortMapDir != null)
mapDir = new File(atlasDir, shortMapDir);
}
public void createMap() throws MapCreationException, InterruptedException {
// This means there should not be any resizing of the tiles.
if (mapTileWriter == null)
mapTileWriter = new PathAwayTileWriter();
createTiles();
}
@Override
protected void testAtlas() throws AtlasTestException {
for (LayerInterface layer : atlas) {
for (MapInterface map : layer) {
if (map.getZoom() > 17)
throw new AtlasTestException("resolution too high - " + "highest possible zoom level is 17");
}
}
}
protected class PathAwayTileWriter extends OSMTileWriter {
@Override
public void writeTile(int tilex, int tiley, String tileType, byte[] tileData) throws IOException {
File file = new File(mapDir, String.format(tileFileNamePattern, 17 - zoom, tilex, tiley, tileType));
writeTile(file, tileData);
}
}
}