001// License: GPL. For details, see Readme.txt file.
002package org.openstreetmap.gui.jmapviewer;
003
004/**
005 * This is a rectangular range of tiles.
006 */
007public class TileRange {
008    protected int minX;
009    protected int maxX;
010    protected int minY;
011    protected int maxY;
012    protected int zoom;
013
014    protected TileRange() {
015    }
016
017    /**
018     * Constructs a new {@code TileRange}.
019     * @param t1 first tile
020     * @param t2 second tile
021     * @param zoom zoom level
022     */
023    public TileRange(TileXY t1, TileXY t2, int zoom) {
024        minX = (int) Math.floor(Math.min(t1.getX(), t2.getX()));
025        minY = (int) Math.floor(Math.min(t1.getY(), t2.getY()));
026        maxX = (int) Math.ceil(Math.max(t1.getX(), t2.getX()));
027        maxY = (int) Math.ceil(Math.max(t1.getY(), t2.getY()));
028        this.zoom = zoom;
029    }
030
031    /**
032     * Constructs a new {@code TileRange}.
033     * @param r existing tile range to copy
034     */
035    public TileRange(TileRange r) {
036        minX = r.minX;
037        minY = r.minY;
038        maxX = r.maxX;
039        maxY = r.maxY;
040        zoom = r.zoom;
041    }
042
043    protected double tilesSpanned() {
044        return Math.sqrt(1.0 * this.size());
045    }
046
047    /**
048     * Returns size
049     * @return size
050     */
051    public int size() {
052        int xSpan = maxX - minX + 1;
053        int ySpan = maxY - minY + 1;
054        return xSpan * ySpan;
055    }
056}
057