/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.core.gis.map.transforms;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import com.opendoorlogistics.api.geometry.LatLong;
import com.opendoorlogistics.api.geometry.LatLongToScreen;
import com.opendoorlogistics.core.utils.Pair;
public final class UpscalerLatLongToPixelPosition implements LatLongToScreen{
private final LatLongToScreen original;
private final double scalingFactor;
public UpscalerLatLongToPixelPosition(LatLongToScreen original, double scalingFactor) {
this.original = original;
this.scalingFactor = scalingFactor;
}
@Override
public Point2D getOnScreenPixelPosition(LatLong latLong) {
Point2D ret = original.getOnScreenPixelPosition(latLong);
scalePosition(ret);
return ret;
}
private void scalePosition(Point2D ret) {
ret.setLocation(ret.getX() * scalingFactor, ret.getY() * scalingFactor);
}
@Override
public LatLong getLongLat(double pixelX, double pixelY) {
pixelX = (int)Math.round(pixelX / scalingFactor);
pixelY = (int)Math.round(pixelY / scalingFactor);
return original.getLongLat(pixelX, pixelY);
}
@Override
public Object getZoomHashmapKey() {
return new Pair<Object,Object>(original.getZoomHashmapKey(), new Double(scalingFactor));
}
@Override
public Point2D getWorldBitmapPixelPosition(LatLong latLong) {
Point2D ret = original.getWorldBitmapPixelPosition(latLong);
scalePosition(ret);
return ret;
}
@Override
public Rectangle2D getViewportWorldBitmapScreenPosition() {
Rectangle2D rect = original.getViewportWorldBitmapScreenPosition();
Rectangle2D.Double ret = new Rectangle2D.Double(rect.getX() * scalingFactor, rect.getY()*scalingFactor, rect.getWidth()*scalingFactor, rect.getHeight()*scalingFactor);
return ret;
}
@Override
public int getZoomForObjectFiltering() {
return original.getZoomForObjectFiltering();
}
}