/*******************************************************************************
* 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 java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
import mobac.exceptions.MapCreationException;
import mobac.program.ProgramInfo;
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;
/**
* Touratech QV
*/
@AtlasCreatorName(value = "Touratech QV", type = "Ttqv")
public class TTQV extends Ozi {
@Override
public void initializeMap(MapInterface map, TileProvider mapTileProvider) {
super.initializeMap(map, mapTileProvider);
}
@Override
public void createMap() throws MapCreationException, InterruptedException {
try {
Utilities.mkDir(layerDir);
} catch (IOException e1) {
throw new MapCreationException(map, e1);
}
createTiles();
writeCalFile();
}
private void writeCalFile() throws MapCreationException {
FileOutputStream fout = null;
try {
fout = new FileOutputStream(new File(layerDir, mapName + "_png.cal"));
OutputStreamWriter mapWriter = new OutputStreamWriter(fout, TEXT_FILE_CHARSET);
MapSpace mapSpace = mapSource.getMapSpace();
//double longitudeMin = mapSpace.cXToLon(xMin * tileSize, zoom);
//double longitudeMax = mapSpace.cXToLon((xMax + 1) * tileSize, zoom);
//double latitudeMin = mapSpace.cYToLat((yMax + 1) * tileSize, zoom);
//double latitudeMax = 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);
double longitudeMin = p1.x;
double longitudeMax = p2.x;
double latitudeMin = p2.y;
double latitudeMax = p1.y;
int width = (xMax - xMin + 1) * tileSize;
int height = (yMax - yMin + 1) * tileSize;
double scale = ((latitudeMax - latitudeMin) * (longitudeMax - longitudeMin)) / (width * height);
String nsowLine = "%s = 6 = %2.6f\r\n";
String cLine = "c%d_%s = 7 = %2.6f\r\n";
mapWriter.write("; Calibration File for QV Map\r\n");
mapWriter.write("; generated by " + ProgramInfo.getCompleteTitle() + "\r\n");
mapWriter.write("name = 10 = " + mapName + ".png\r\n");
mapWriter.write("fname = 10 = " + mapName + ".png\r\n");
mapWriter.write(String.format(Locale.ENGLISH, nsowLine, "nord", latitudeMax));
mapWriter.write(String.format(Locale.ENGLISH, nsowLine, "sued", latitudeMin));
mapWriter.write(String.format(Locale.ENGLISH, nsowLine, "ost", longitudeMax));
mapWriter.write(String.format(Locale.ENGLISH, nsowLine, "west", longitudeMin));
NumberFormat nf = new DecimalFormat("0.000000E000", Utilities.DFS_ENG);
mapWriter.write("scale_area = 6 = " + nf.format(scale).toLowerCase() + "\r\n");
mapWriter.write("proj_mode = 10 = proj\r\n");
mapWriter.write("projparams = 10 = proj=merc\r\n");
mapWriter.write("datum1 = 10 = WGS 84# 6378137# 298.257223563# 0# 0# 0#\r\n");
mapWriter.write("c1_x = 7 = 0\r\n");
mapWriter.write("c1_y = 7 = 0\r\n");
mapWriter.write("c2_x = 7 = " + (width - 1) + "\r\n");
mapWriter.write("c2_y = 7 = 0\r\n");
mapWriter.write("c3_x = 7 = " + (width - 1) + "\r\n");
mapWriter.write("c3_y = 7 = " + (height - 1) + "\r\n");
mapWriter.write("c4_x = 7 = 0\r\n");
mapWriter.write("c4_y = 7 = " + (height - 1) + "\r\n");
mapWriter.write("c5_x = 7 = 0\r\n");
mapWriter.write("c5_y = 7 = 0\r\n");
mapWriter.write("c6_x = 7 = 0\r\n");
mapWriter.write("c6_y = 7 = 0\r\n");
mapWriter.write("c7_x = 7 = 0\r\n");
mapWriter.write("c7_y = 7 = 0\r\n");
mapWriter.write("c8_x = 7 = 0\r\n");
mapWriter.write("c8_y = 7 = 0\r\n");
mapWriter.write("c9_x = 7 = 0\r\n");
mapWriter.write("c9_y = 7 = 0\r\n");
mapWriter.write(String.format(Locale.ENGLISH, cLine, 1, "lat", latitudeMax));
mapWriter.write(String.format(Locale.ENGLISH, cLine, 1, "lon", longitudeMin));
mapWriter.write(String.format(Locale.ENGLISH, cLine, 2, "lat", latitudeMax));
mapWriter.write(String.format(Locale.ENGLISH, cLine, 2, "lon", longitudeMax));
mapWriter.write(String.format(Locale.ENGLISH, cLine, 3, "lat", latitudeMin));
mapWriter.write(String.format(Locale.ENGLISH, cLine, 3, "lon", longitudeMax));
mapWriter.write(String.format(Locale.ENGLISH, cLine, 4, "lat", latitudeMin));
mapWriter.write(String.format(Locale.ENGLISH, cLine, 4, "lon", longitudeMin));
mapWriter.flush();
mapWriter.close();
} catch (IOException e) {
throw new MapCreationException("Error writing cal file: " + e.getMessage(), map, e);
} finally {
Utilities.closeStream(fout);
}
}
}