/******************************************************************************* * 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.awt.geom.Point2D; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import mobac.exceptions.MapCreationException; import mobac.program.annotations.AtlasCreatorName; import mobac.program.atlascreators.tileprovider.TileProvider; import mobac.program.interfaces.MapInterface; import mobac.program.interfaces.MapSpace; import mobac.utilities.Utilities; @AtlasCreatorName("Glopus (PNG & KAL)") public class Glopus extends Ozi { @Override public void initializeMap(MapInterface map, TileProvider mapTileProvider) { super.initializeMap(map, mapTileProvider); String layerName = map.getLayer().getName().replaceAll(" ", "_"); mapName = map.getName().replaceAll(" ", "_"); layerDir = new File(atlasDir, layerName); } @Override public void createMap() throws MapCreationException, InterruptedException { try { Utilities.mkDir(layerDir); } catch (IOException e) { throw new MapCreationException(map, e); } createTiles(); writeKalFile(); } private void writeKalFile() throws MapCreationException { FileOutputStream fout = null; try { fout = new FileOutputStream(new File(layerDir, mapName + ".kal")); OutputStreamWriter mapWriter = new OutputStreamWriter(fout, TEXT_FILE_CHARSET); MapSpace mapSpace = mapSource.getMapSpace(); //String longitudeMin = Double.toString(mapSpace.cXToLon(xMin * tileSize, zoom)); //String longitudeMax = Double.toString(mapSpace.cXToLon((xMax + 1) * tileSize, zoom)); //String latitudeMin = Double.toString(mapSpace.cYToLat((yMax + 1) * tileSize, zoom)); //String latitudeMax = Double.toString(mapSpace.cYToLat(yMin * tileSize, zoom)); Point2D.Double p1 = mapSpace.cXYToLonLat(xMin * tileSize, yMin * tileSize, zoom); Point2D.Double p2 = mapSpace.cXYToLonLat((xMax + 1) * tileSize, (yMax + 1) * tileSize, zoom); String longitudeMin = Double.toString(p1.x); String longitudeMax = Double.toString(p2.x); String latitudeMin = Double.toString(p2.y); String latitudeMax = Double.toString(p1.y); int width = (xMax - xMin + 1) * tileSize; int height = (yMax - yMin + 1) * tileSize; mapWriter.write("[Calibration Point 1]\n"); mapWriter.write(String.format("Longitude = %s\n", longitudeMin)); mapWriter.write(String.format("Latitude = %s\n", latitudeMax)); mapWriter.write("Pixel = POINT(0,0)\n"); mapWriter.write("[Calibration Point 2]\n"); mapWriter.write(String.format("Longitude = %s\n", longitudeMax)); mapWriter.write(String.format("Latitude = %s\n", latitudeMin)); mapWriter.write(String.format("Pixel = POINT(%d,%d)\n", width, height)); mapWriter.write("[Calibration Point 3]\n"); mapWriter.write(String.format("Longitude = %s\n", longitudeMax)); mapWriter.write(String.format("Latitude = %s\n", latitudeMax)); mapWriter.write(String.format("Pixel = POINT(%d,%d)\n", width, 0)); mapWriter.write("[Calibration Point 4]\n"); mapWriter.write(String.format("Longitude = %s\n", longitudeMin)); mapWriter.write(String.format("Latitude = %s\n", latitudeMin)); mapWriter.write(String.format("Pixel = POINT(%d,%d)\n", 0, height)); mapWriter.write("[Map]\n"); mapWriter.write(String.format("Bitmap = %s.png\n", mapName)); mapWriter.write(String.format("Size = SIZE(%d,%d)\n", width, height)); mapWriter.flush(); mapWriter.close(); } catch (IOException e) { throw new MapCreationException(map, e); } finally { Utilities.closeStream(fout); } } }