package org.openstreetmap.josm.plugins.piclayer.layer;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.openstreetmap.josm.data.coor.EastNorth;
import org.openstreetmap.josm.data.coor.LatLon;
import org.openstreetmap.josm.plugins.piclayer.layer.kml.KMLGroundOverlay;
public class PicLayerFromKML extends PicLayerAbstract {
private KMLGroundOverlay calibration;
private File picture;
private String pictureName;
public PicLayerFromKML(File main, KMLGroundOverlay calibration) {
picture = new File(main.getParent() + File.separatorChar + calibration.getFileName());
this.calibration = calibration;
pictureName = calibration.getName();
// Set the name of the layer as the base name of the file
setName(picture.getName());
}
@Override
protected Image createImage() throws IOException {
Image image = ImageIO.read(picture);
return image;
}
@Override
protected void lookForCalibration() throws IOException {
if (calibration != null)
loadCalibration(calibration);
}
@Override
public String getPicLayerName() {
return pictureName;
}
public void loadCalibration(KMLGroundOverlay cal) {
int w = image.getWidth(null);
int h = image.getHeight(null);
LatLon coord1 = new LatLon(cal.getNorth(), cal.getEast());
LatLon coord2 = new LatLon(cal.getSouth(), cal.getWest());
EastNorth en1 = projection.latlon2eastNorth(coord1);
EastNorth en2 = projection.latlon2eastNorth(coord2);
EastNorth imagePosition = new EastNorth((en1.getX()+en2.getX())/2, (en1.getY()+en2.getY())/2);
transformer.setImagePosition(imagePosition);
initialImageScale = 100*getMetersPerEasting(imagePosition);
AffineTransform transform = AffineTransform.getScaleInstance((en1.getX()-en2.getX())/w, (en1.getY()-en2.getY())/h);
transform.rotate(cal.getRotate()/180.0*Math.PI);
transformer.resetCalibration();
transformer.getTransform().concatenate(transform);
}
}