Package org.geotools.arcsde.raster.info

Source Code of org.geotools.arcsde.raster.info.RasterInfoTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library 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
*    Lesser General Public License for more details.
*
*/
package org.geotools.arcsde.raster.info;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.Point2D;
import java.awt.geom.Point2D.Double;
import java.io.IOException;

import org.geotools.arcsde.raster.gce.RasterTestData;
import org.geotools.arcsde.session.Command;
import org.geotools.arcsde.session.ISession;
import org.geotools.arcsde.session.ISessionPool;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultEngineeringCRS;
import org.junit.Ignore;
import org.junit.Test;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;

import com.esri.sde.sdk.client.SeConnection;
import com.esri.sde.sdk.client.SeCoordinateReference;
import com.esri.sde.sdk.client.SeException;
import com.esri.sde.sdk.client.SeObjectId;
import com.esri.sde.sdk.client.SeQuery;
import com.esri.sde.sdk.client.SeRaster;
import com.esri.sde.sdk.client.SeRasterAttr;
import com.esri.sde.sdk.client.SeRasterColumn;
import com.esri.sde.sdk.client.SeRow;
import com.esri.sde.sdk.client.SeSqlConstruct;

/**
* Tests the functionality of the ArcSDE raster-display package to read rasters from an ArcSDE
* database
*
* @author Saul Farber, (based on ArcSDEPoolTest by Gabriel Roldan)
*
*
* @source $URL$
*         http://svn.geotools.org/geotools/trunk/gt/modules/plugin/arcsde/datastore/src/test/java
*         /org/geotools/arcsde/gce/ArcSDEPyramidTest.java $
* @version $Id$
*/
public class RasterInfoTest {

    /**
     * test case for {@link RasterInfo#pickOptimalRasterLevel(ReferencedEnvelope, Rectangle)}
     */
    @Test
    public void testPickOptimalPyramidLevel() {

    }

    /**
     * Creates a pyramid equivalent to the one created by ArcSDE: <code>
     * <pre>
     * ArcSDEPyramid[NÂș levels: 10, tile size: 63x63
     * Levels:
     *  [0 size: 1013x1021  xRes: 2.0000000000000004  yRes: 2.0  xOffset: 0  yOffset: 0  extent: ReferencedEnvelope[0.0 : 2026.0000000000002, 0.0 : 2042.0]  tilesWide: 17  tilesHigh: 17]
     *  [1 size: 507x511  xRes: 3.996055226824458  yRes: 3.996086105675147  xOffset: 0  yOffset: 0  extent: ReferencedEnvelope[0.0 : 2026.0000000000002, 0.0 : 2042.0]  tilesWide: 9  tilesHigh: 9]
     *  [2 size: 254x256  xRes: 7.976377952755906  yRes: 7.9765625  xOffset: 0  yOffset: 0  extent: ReferencedEnvelope[2.0019762845849804 : 2028.0019762845852, -2.0019607843137237 : 2039.9980392156863]  tilesWide: 5  tilesHigh: 5]
     *  [3 size: 127x128  xRes: 15.889701534343782  yRes: 15.890563725490196  xOffset: 0  yOffset: 0  extent: ReferencedEnvelope[6.005928853754941 : 2023.9980237154152, 2.0019607843137237 : 2035.9941176470588]  tilesWide: 3  tilesHigh: 3]
     *  [4 size: 64x64  xRes: 31.53112648221344  yRes: 31.530882352941177  xOffset: 0  yOffset: 0  extent: ReferencedEnvelope[14.013833992094863 : 2032.005928853755, 10.009803921568619 : 2027.986274509804]  tilesWide: 2  tilesHigh: 2]
     *  [5 size: 32x32  xRes: 62.06126482213439  yRes: 62.06078431372549  xOffset: 0  yOffset: 0  extent: ReferencedEnvelope[30.029644268774707 : 2015.9901185770752, 26.025490196078408 : 2011.9705882352941]  tilesWide: 1  tilesHigh: 1]
     *  [6 size: 16x16  xRes: 120.11857707509883  yRes: 120.11764705882354  xOffset: 0  yOffset: 0  extent: ReferencedEnvelope[62.06126482213439 : 1983.9584980237157, 58.05686274509799 : 1979.9392156862746]  tilesWide: 1  tilesHigh: 1]
     * ]
     * </pre>
     * </code>
     *
     * @return
     */
    private RasterInfo createPyramid() {

        RasterInfo pyramid = new RasterInfo(1L, 1013, 1021);

        final CoordinateReferenceSystem crs = DefaultEngineeringCRS.CARTESIAN_2D;

        final Point imageOffset = new Point(0, 0);
        final Point2D extentOffset = new Double(0, 0);

        pyramid.addPyramidLevel(0, new ReferencedEnvelope(0, 2026, 0, 2042, crs), imageOffset,
                extentOffset, 17, 17, new Dimension(1013, 1021));
        pyramid.addPyramidLevel(1, new ReferencedEnvelope(0, 2026.0000000000002, 0, 2042, crs),
                imageOffset, extentOffset, 9, 9, new Dimension(507, 511));

        pyramid.addPyramidLevel(2, new ReferencedEnvelope(2.0019762845849804, 2028.0019762845852,
                -2.0019607843137237, 2039.9980392156863, crs), imageOffset, extentOffset, 5, 5,
                new Dimension(254, 256));

        pyramid.addPyramidLevel(3, new ReferencedEnvelope(6.005928853754941, 2023.9980237154152,
                2.0019607843137237, 2035.9941176470588, crs), imageOffset, extentOffset, 3, 3,
                new Dimension(127, 128));

        pyramid.addPyramidLevel(4, new ReferencedEnvelope(4.013833992094863, 2032.005928853755,
                10.009803921568619, 2027.986274509804, crs), imageOffset, extentOffset, 2, 2,
                new Dimension(64, 64));

        pyramid.addPyramidLevel(5, new ReferencedEnvelope(30.029644268774707, 2015.9901185770752,
                26.025490196078408, 2011.9705882352941, crs), imageOffset, extentOffset, 1, 1,
                new Dimension(32, 23));

        pyramid.addPyramidLevel(6, new ReferencedEnvelope(62.06126482213439, 1983.9584980237157,
                58.05686274509799, 1979.9392156862746, crs), imageOffset, extentOffset, 1, 1,
                new Dimension(16, 16));
        return pyramid;
    }

    @Test
    @Ignore
    public void testArcSDEPyramidHypothetical() throws Exception {
        RasterInfo pyramid = createPyramid();
        System.out.println(pyramid);

        RasterTestData testData = new RasterTestData();
        testData.setUp();
        String tableName = testData.getRasterTableName(RasterCellType.TYPE_8BIT_U, 1, false);
        testData.loadTestRaster(tableName, 1, 1013, 1021, RasterCellType.TYPE_8BIT_U, null, true,
                false, SeRaster.SE_INTERPOLATION_NEAREST, 9);

        ISessionPool pool = testData.getConnectionPool();
        ISession conn = pool.getSession();

        final SeQuery q = conn.createAndExecuteQuery(new String[] { "RASTER" }, new SeSqlConstruct(
                tableName));

        try {
            pyramid = conn.issue(new Command<RasterInfo>() {
                @Override
                public RasterInfo execute(ISession session, SeConnection connection)
                        throws SeException, IOException {
                    SeRow r = q.fetch();
                    SeRasterAttr rAttr = r.getRaster(0);

                    SeObjectId rasterColumnId = rAttr.getRasterColumnId();
                    SeRasterColumn rasterColumn = new SeRasterColumn(connection, rasterColumnId);
                    SeCoordinateReference coordRef = rasterColumn.getCoordRef();
                    String coordRefWKT = coordRef.getCoordSysDescription();
                    CoordinateReferenceSystem crs;
                    try {
                        crs = CRS.parseWKT(coordRefWKT);
                    } catch (FactoryException e) {
                        throw new RuntimeException(e);
                    }

                    RasterInfo pyramid = new RasterInfo(rAttr, crs);
                    return pyramid;
                }
            });
        } finally {
            conn.dispose();
        }

        System.out.println(pyramid);

        /*
         * ArcSDEPyramid pyramid = new ArcSDEPyramid(10, 10); pyramid.addPyramidLevel(0, new
         * SeExtent(0, 0, 100, 100), null, null, 10, 10, new Dimension( 100, 100));
         * pyramid.addPyramidLevel(1, new SeExtent(0, 0, 100, 100), null, null, 5, 5, new Dimension(
         * 50, 50));
         *
         * RasterQueryInfo ret = pyramid.fitExtentToRasterPixelGrid(new ReferencedEnvelope(0, 10, 0,
         * 10, null), 0); assertTrue(ret.envelope.equals(new ReferencedEnvelope(0, 10, 0, 10,
         * null))); assertTrue(ret.image.width == 10 && ret.image.height == 10);
         *
         * ret = pyramid.fitExtentToRasterPixelGrid(new ReferencedEnvelope(0, 9, 0, 9, null), 0);
         * assertTrue(ret.envelope.intersects((BoundingBox) new ReferencedEnvelope(0, 9, 0, 9,
         * null))); assertTrue(ret.image.width == 9 && ret.image.height == 9);
         *
         * ret = pyramid.fitExtentToRasterPixelGrid(new ReferencedEnvelope(15, 300, 15, 300, null),
         * 1); assertTrue(ret.envelope.equals(new ReferencedEnvelope(14, 300, 14, 300, null)));
         * assertTrue(ret.image.width == 143 && ret.image.height == 143);
         *
         * ret = pyramid.fitExtentToRasterPixelGrid( new ReferencedEnvelope(-100, 200, -100, 200,
         * null), 1); assertTrue(ret.envelope.equals(new ReferencedEnvelope(-100, 200, -100, 200,
         * null))); assertTrue(ret.image.width == 150 && ret.image.height == 150);
         */
    }

}
TOP

Related Classes of org.geotools.arcsde.raster.info.RasterInfoTest

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.