/*******************************************************************************
* 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.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Locale;
import mobac.program.annotations.AtlasCreatorName;
import mobac.program.interfaces.MapSpace;
import mobac.utilities.Utilities;
@AtlasCreatorName("Ublox")
public class Ublox extends Ozi {
@Override
protected void writeMapFile() {
FileOutputStream fout = null;
try {
fout = new FileOutputStream(new File(layerDir, mapName + ".mcf"));
writeMapFile(map.getName(), fout);
} catch (Exception e) {
log.error("", e);
} finally {
Utilities.closeStream(fout);
}
}
@Override
protected void writeMapFile(String imageFileName, OutputStream stream) throws IOException {
log.trace("Writing mcf file");
OutputStreamWriter mcfWriter = new OutputStreamWriter(stream, TEXT_FILE_CHARSET);
MapSpace mapSpace = mapSource.getMapSpace();
//double longitudeMin = mapSpace.cXToLon(xMin * tileSize, zoom);
//double longitudeMax = mapSpace.cXToLon((xMax + 1) * tileSize - 1, zoom);
//double latitudeMin = mapSpace.cYToLat((yMax + 1) * tileSize - 1, 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 - 1, (yMax + 1) * tileSize - 1, 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;
String refFmt = "%d = %5d, %5d, %10.6f, %10.6f\r\n";
mcfWriter.write("; I N F O\r\n");
mcfWriter.write("; ------------------------------------------------------------\r\n");
mcfWriter.write("; File: " + imageFileName + ".mcf\r\n");
mcfWriter.write("; Source: " + map.getMapSource().getName() + "\r\n");
mcfWriter.write("\r\n");
mcfWriter.write("; R E F E R E N C E\r\n");
mcfWriter.write("; ------------------------------------------------------------\r\n");
mcfWriter.write("; 3 Points must be defined to calibrate a Map\r\n");
mcfWriter.write("; Parameters:\r\n");
mcfWriter.write("; # = index of the point (1 to 3)\r\n");
mcfWriter.write("; x,y = image coordinates\r\n");
mcfWriter.write("; lat,lon = world coordinates\r\n");
mcfWriter.write("; Syntax:\r\n");
mcfWriter.write("; # = <x>, <y>, <lon>, <lat>\r\n");
mcfWriter.write("\r\n");
mcfWriter.write("[REFERENCE]\r\n");
mcfWriter.write(String.format(Locale.ENGLISH, refFmt, 1, 0, 0, longitudeMin, latitudeMax));
mcfWriter.write(String.format(Locale.ENGLISH, refFmt, 2, width, height, longitudeMax,
latitudeMin));
mcfWriter.write(String.format(Locale.ENGLISH, refFmt, 3, width, 0, longitudeMax,
latitudeMax));
mcfWriter.flush();
}
}