/* * This file is part of JGrasstools (http://www.jgrasstools.org) * (C) HydroloGIS - www.hydrologis.com * * JGrasstools 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package org.jgrasstools.gears.modules; import java.util.List; import javax.media.jai.iterator.RandomIter; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.feature.DefaultFeatureCollection; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.geometry.Envelope2D; import org.jgrasstools.gears.modules.r.scanline.OmsScanLineRasterizer; import org.jgrasstools.gears.utils.HMTestCase; import org.jgrasstools.gears.utils.HMTestMaps; import org.jgrasstools.gears.utils.RegionMap; import org.jgrasstools.gears.utils.coverage.CoverageUtilities; import org.jgrasstools.gears.utils.features.FeatureUtilities; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Polygon; /** * Test for the {@link OmsScanLineRasterizer} * < * @author Andrea Antonello (www.hydrologis.com) */ public class TestScanLineRasterizer extends HMTestCase { private CoordinateReferenceSystem crs = HMTestMaps.getCrs(); private RegionMap ep = HMTestMaps.getEnvelopeparams(); private Polygon polygon; private GridCoverage2D elevationCoverage; private double[][] elevationData; @Override protected void setUp() throws Exception { super.setUp(); elevationData = HMTestMaps.mapData; elevationCoverage = CoverageUtilities.buildCoverage("elevation", elevationData, ep, crs, true); Envelope2D envelope = elevationCoverage.getEnvelope2D(); polygon = FeatureUtilities.envelopeToPolygon(envelope); } @SuppressWarnings("nls") public void testScanLineRasterizer() throws Exception { RegionMap ep = HMTestMaps.getEnvelopeparams(); SimpleFeatureCollection newCollection = doCollection(ep); OmsScanLineRasterizer raster = new OmsScanLineRasterizer(); raster.inVector = newCollection; raster.pCols = ep.getCols(); raster.pRows = ep.getRows(); raster.pNorth = ep.getNorth(); raster.pSouth = ep.getSouth(); raster.pEast = ep.getEast(); raster.pWest = ep.getWest(); raster.pValue = 2.0; raster.process(); GridCoverage2D outGeodata = raster.outRaster; checkMatrixEqual(outGeodata.getRenderedImage(), HMTestMaps.all2Data); raster = new OmsScanLineRasterizer(); raster.inVector = newCollection; raster.pCols = ep.getCols(); raster.pRows = ep.getRows(); raster.pNorth = ep.getNorth(); raster.pSouth = ep.getSouth(); raster.pEast = ep.getEast(); raster.pWest = ep.getWest(); raster.fCat = "cat"; raster.process(); outGeodata = raster.outRaster; checkMatrixEqual(outGeodata.getRenderedImage(), HMTestMaps.all1Data); } public void testScanLineRasterizerUtilsMethod() throws Exception { RandomIter rasterIter = CoverageUtilities.getRandomIterator(elevationCoverage); RegionMap regionMap = CoverageUtilities.getRegionParamsFromGridCoverage(elevationCoverage); List<Coordinate> coordinates = FeatureUtilities.extractPolygonOnCoverage(rasterIter, regionMap.getCols(), regionMap.getRows(), regionMap.getXres(), elevationCoverage.getGridGeometry(), polygon, 0); int index = 0; for( int r = 0; r < elevationData.length; r++ ) { for( int c = 0; c < elevationData[0].length; c++ ) { Coordinate coordinate = coordinates.get(index++); assertEquals(elevationData[r][c], coordinate.z, DELTA); } } } private SimpleFeatureCollection doCollection( RegionMap envelopeParams ) { SimpleFeatureTypeBuilder b = new SimpleFeatureTypeBuilder(); b.setName("typename"); b.setCRS(crs); b.add("the_geom", Polygon.class); b.add("cat", Double.class); SimpleFeatureType type = b.buildFeatureType(); SimpleFeatureBuilder builder = new SimpleFeatureBuilder(type); Object[] values = new Object[]{polygon, 1.0}; builder.addAll(values); SimpleFeature feature = builder.buildFeature(null); DefaultFeatureCollection newCollection = new DefaultFeatureCollection(); newCollection.add(feature); return newCollection; } }