68 lines
2.2 KiB
Java
68 lines
2.2 KiB
Java
package org.insa.graphics.drawing;
|
|
|
|
import org.insa.graph.GraphStatistics.BoundingBox;
|
|
|
|
public class PlateCarreProjection implements Projection {
|
|
|
|
// Bounding box
|
|
private final float minLatitude, minLongitude, maxLatitude, maxLongitude;
|
|
|
|
// Dimension of the image
|
|
private final double width, height;
|
|
|
|
/**
|
|
* Create a new PlateCarreProjection corresponding to the given BoundingBox and
|
|
* maxSize.
|
|
*
|
|
* @param boundingBox Box for this projection.
|
|
* @param maxSize Maximum size of any side (width / height) of the image to
|
|
* which this projection should draw.
|
|
*/
|
|
public PlateCarreProjection(BoundingBox boundingBox, int maxSize) {
|
|
// Find minimum/maximum longitude and latitude.
|
|
this.minLongitude = boundingBox.getTopLeftPoint().getLongitude();
|
|
this.maxLongitude = boundingBox.getBottomRightPoint().getLongitude();
|
|
this.minLatitude = boundingBox.getBottomRightPoint().getLatitude();
|
|
this.maxLatitude = boundingBox.getTopLeftPoint().getLatitude();
|
|
|
|
float diffLon = maxLongitude - minLongitude, diffLat = maxLatitude - minLatitude;
|
|
|
|
this.width = diffLon < diffLat ? (int) (maxSize * diffLon / diffLat) : maxSize;
|
|
this.height = diffLon < diffLat ? maxSize : (int) (maxSize * diffLat / diffLon);
|
|
}
|
|
|
|
@Override
|
|
public double getImageWidth() {
|
|
return this.width;
|
|
}
|
|
|
|
@Override
|
|
public double getImageHeight() {
|
|
return this.height;
|
|
}
|
|
|
|
@Override
|
|
public int latitudeToPixelY(float latitude) {
|
|
return (int) (this.height * (this.maxLatitude - latitude)
|
|
/ (this.maxLatitude - this.minLatitude));
|
|
}
|
|
|
|
@Override
|
|
public int longitudeToPixelX(float longitude) {
|
|
return (int) (this.width * (longitude - this.minLongitude)
|
|
/ (this.maxLongitude - this.minLongitude));
|
|
}
|
|
|
|
@Override
|
|
public float pixelYToLatitude(double py) {
|
|
return (float) (this.maxLatitude
|
|
- py / this.height * (this.maxLatitude - this.minLatitude));
|
|
}
|
|
|
|
@Override
|
|
public float pixelXToLongitude(double px) {
|
|
return (float) (px / this.width * (this.maxLongitude - this.minLongitude)
|
|
+ this.minLongitude);
|
|
}
|
|
|
|
}
|