Package org.mapfish.print.attribute.map

Source Code of org.mapfish.print.attribute.map.BBoxMapBoundsTest

/*
* Copyright (C) 2014  Camptocamp
*
* This file is part of MapFish Print
*
* MapFish Print 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 3 of the License, or
* (at your option) any later version.
*
* MapFish Print 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 MapFish Print.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.mapfish.print.attribute.map;

import org.geotools.geometry.jts.ReferencedEnvelope;
import org.junit.Test;
import org.mapfish.print.map.Scale;

import java.awt.Rectangle;

import static org.geotools.referencing.crs.DefaultGeographicCRS.WGS84;
import static org.junit.Assert.assertEquals;
import static org.mapfish.print.attribute.map.CenterScaleMapBoundsTest.CH1903;

/**
* @author Jesse on 3/27/14.
*/
public class BBoxMapBoundsTest {

    @Test
    public void testToReferencedEnvelope() throws Exception {
        final BBoxMapBounds bboxMapBounds = new BBoxMapBounds(WGS84, -180, -90, 180, 90);

        final ReferencedEnvelope envelope = bboxMapBounds.toReferencedEnvelope(new Rectangle(10, 5), 90);


        assertEquals(-180, envelope.getMinX(), 0.001);
        assertEquals(180, envelope.getMaxX(), 0.001);
        assertEquals(-90, envelope.getMinY(), 0.001);
        assertEquals(90, envelope.getMaxY(), 0.001);
        assertEquals(WGS84, envelope.getCoordinateReferenceSystem());
    }

    @Test
    public void testAdjustedEnvelope() throws Exception {
        final BBoxMapBounds bboxMapBounds = new BBoxMapBounds(WGS84, -10, -90, 10, 90);
        final MapBounds mapBounds = bboxMapBounds.adjustedEnvelope(new Rectangle(5, 5));
        final ReferencedEnvelope envelope = mapBounds.toReferencedEnvelope(new Rectangle(5, 5), 90);

        assertEquals(-90, envelope.getMinX(), 0.001);
        assertEquals(90, envelope.getMaxX(), 0.001);
        assertEquals(-90, envelope.getMinY(), 0.001);
        assertEquals(90, envelope.getMaxY(), 0.001);
        assertEquals(WGS84, envelope.getCoordinateReferenceSystem());
    }

    @Test
    public void testAdjustToScale() throws Exception {
        int scale = 24000;
        double dpi = 100;
        Rectangle screen = new Rectangle(100, 100);
        ZoomLevels zoomLevels = new ZoomLevels(15000, 20000, 25000, 30000, 350000);


        final CenterScaleMapBounds mapBounds = new CenterScaleMapBounds(CH1903, 50000, 50000, new Scale(scale));
        final ReferencedEnvelope originalBBox = mapBounds.toReferencedEnvelope(screen, dpi);

        BBoxMapBounds linear = new BBoxMapBounds(CH1903, originalBBox.getMinX(), originalBBox.getMinY(),
                originalBBox.getMaxX(), originalBBox.getMaxY());

        final MapBounds newMapBounds = linear.adjustBoundsToNearestScale(zoomLevels, 0.05,
                ZoomLevelSnapStrategy.CLOSEST_LOWER_SCALE_ON_TIE, screen, dpi);
        ReferencedEnvelope newBBox = newMapBounds.toReferencedEnvelope(screen, dpi);

        final double delta = 0.00001;
        assertEquals(originalBBox.getMedian(0), newBBox.getMedian(0), delta);
        assertEquals(originalBBox.getMedian(1), newBBox.getMedian(1), delta);

        double expectedScale = 25000;
        CenterScaleMapBounds expectedMapBounds = new CenterScaleMapBounds(CH1903, originalBBox.centre().x, originalBBox.centre().y,
                new Scale(expectedScale));
        assertEquals(expectedMapBounds.toReferencedEnvelope(screen, dpi), newBBox);
    }

    @Test
    public void testAdjustToScaleLatLong() throws Exception {
        int scale = 24000;
        double dpi = 100;
        Rectangle screen = new Rectangle(100, 100);
        ZoomLevels zoomLevels = new ZoomLevels(15000, 20000, 25000, 30000, 350000);


        final CenterScaleMapBounds mapBounds = new CenterScaleMapBounds(WGS84, 5, 5, new Scale(scale));
        final ReferencedEnvelope originalBBox = mapBounds.toReferencedEnvelope(screen, dpi);

        BBoxMapBounds linear = new BBoxMapBounds(WGS84, originalBBox.getMinX(), originalBBox.getMinY(),
                originalBBox.getMaxX(), originalBBox.getMaxY());

        final MapBounds newMapBounds = linear.adjustBoundsToNearestScale(zoomLevels, 0.05,
                ZoomLevelSnapStrategy.CLOSEST_LOWER_SCALE_ON_TIE, screen, dpi);
        ReferencedEnvelope newBBox = newMapBounds.toReferencedEnvelope(screen, dpi);

        final double delta = 0.00001;
        assertEquals(originalBBox.getMedian(0), newBBox.getMedian(0), delta);
        assertEquals(originalBBox.getMedian(1), newBBox.getMedian(1), delta);

        double expectedScale = 25000;
        CenterScaleMapBounds expectedMapBounds = new CenterScaleMapBounds(WGS84, originalBBox.centre().x, originalBBox.centre().y,
                new Scale(expectedScale));
        assertEquals(expectedMapBounds.toReferencedEnvelope(screen, dpi), newBBox);
    }

    @Test
    public void testZoomOut() throws Exception {
        BBoxMapBounds bboxMapBounds = new BBoxMapBounds(WGS84, -10, -10, 10, 10);
        MapBounds bounds = bboxMapBounds.zoomOut(1);
        assertEquals(bboxMapBounds, bounds);
       
        bounds = bboxMapBounds.zoomOut(2);
        ReferencedEnvelope envelope = bounds.toReferencedEnvelope(new Rectangle(5, 5), 90);

        assertEquals(-20, envelope.getMinX(), 0.001);
        assertEquals(20, envelope.getMaxX(), 0.001);
        assertEquals(-20, envelope.getMinY(), 0.001);
        assertEquals(20, envelope.getMaxY(), 0.001);
        assertEquals(WGS84, envelope.getCoordinateReferenceSystem());
       
        bboxMapBounds = new BBoxMapBounds(WGS84, -10, -5, 10, 5);
        bounds = bboxMapBounds.zoomOut(1);
        assertEquals(bboxMapBounds, bounds);
       
        bounds = bboxMapBounds.zoomOut(4);
        envelope = bounds.toReferencedEnvelope(new Rectangle(40, 20), 90);

        assertEquals(-40, envelope.getMinX(), 0.001);
        assertEquals(40, envelope.getMaxX(), 0.001);
        assertEquals(-20, envelope.getMinY(), 0.001);
        assertEquals(20, envelope.getMaxY(), 0.001);
        assertEquals(WGS84, envelope.getCoordinateReferenceSystem());
    }
}
TOP

Related Classes of org.mapfish.print.attribute.map.BBoxMapBoundsTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.