Revision: 5970 http://sourceforge.net/p/jump-pilot/code/5970 Author: ma15569 Date: 2018-10-10 09:03:45 +0000 (Wed, 10 Oct 2018) Log Message: ----------- Added real area algorithm
Modified Paths: -------------- plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/ChangeLog Added Paths: ----------- plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/ plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaCalculator.java plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaStripe.java Modified: plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/ChangeLog =================================================================== --- plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/ChangeLog 2018-10-08 06:29:45 UTC (rev 5969) +++ plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/ChangeLog 2018-10-10 09:03:45 UTC (rev 5970) @@ -3,6 +3,9 @@ # 2. make sure that lines break at 80 chars for constricted display situations #<-------------------------------- 80 chars ----------------------------------># +2018-10-10 Giuseppe Aruta. + * Added Real Area algorithm + 2018-10-04 Giuseppe Aruta. * Correction on compute hillshade according ESRI definition (http://edndoc.esri.com/arcobjects/9.2/net/shared/geoprocessing/ @@ -12,7 +15,7 @@ 2018-07-26 Giuseppe Aruta. Ricompiled the libraries: * Enabled project specific setting on Project/Java compiler/Error-Warning to deactivated some warning on compiling - * Delate class it.geomaticaambiente.klem.klemDA as creating error on compiling + * Delete class it.geomaticaambiente.klem.klemDA as creating error on compiling 2018-07-13 Giuseppe Aruta * Class: com.geomaticaeambiente.openjump.klem.slope.SlopeStripe Added: plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaCalculator.java =================================================================== --- plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaCalculator.java (rev 0) +++ plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaCalculator.java 2018-10-10 09:03:45 UTC (rev 5970) @@ -0,0 +1,95 @@ +package com.geomaticaeambiente.openjump.klem.realArea; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + +import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid; +import com.geomaticaeambiente.openjump.klem.grid.GridDestriper; +import com.geomaticaeambiente.openjump.klem.grid.GridStriper; +import com.geomaticaeambiente.openjump.klem.parallel.ExecutorBuilder; + +/** + * + * @author AdL + */ +public class RealAreaCalculator { + + /** + * Calculates the hillshade + * + * @param slopeDegsGrid + * @param aspectDegsGrid + * @param zenithDegs + * @param azimuthDegs + */ + public RealAreaCalculator(DoubleBasicGrid slopeDegsGrid, double zenithDegs, + double azimuthDegs) { + this.slopeDegsGrid = slopeDegsGrid; + + this.zenithDegs = zenithDegs; + this.azimuthDegs = azimuthDegs; + } + + /** + * Calculates the aspect (in radians). + * + * @return The aspect (radians). + * @throws InterruptedException + * @throws ExecutionException + * @throws IOException + */ + public DoubleBasicGrid calculate() throws InterruptedException, + ExecutionException, IOException { + + final int rowCount = slopeDegsGrid.getRowCount(); + final ExecutorBuilder execBuilder = new ExecutorBuilder(rowCount); + final int stripeRowCount = execBuilder.getRowPerStripeCount(); + final int stripeCount = execBuilder.getStripeCount(); + + final List<Callable<DoubleBasicGrid>> asepectToDos_l = new ArrayList<Callable<DoubleBasicGrid>>(); + + final DoubleBasicGrid[] hillshadeDegStripes = GridStriper + .stripeDoubleGrid(slopeDegsGrid, stripeRowCount); + + /* Stripe */ + for (int s = 0; s < stripeCount; s++) { + + int stripeEffectiveRows; + if (s != stripeCount - 1) { + stripeEffectiveRows = stripeRowCount; + } else { + stripeEffectiveRows = rowCount - (s * stripeRowCount); + } + + final int offset = s * stripeRowCount; + + final RealAreaStripe aspectStripe = new RealAreaStripe( + stripeEffectiveRows, slopeDegsGrid, offset, zenithDegs, + azimuthDegs); + + asepectToDos_l.add(aspectStripe); + + } + + /* Calculate */ + final List<Future<DoubleBasicGrid>> aspectFutures_l = execBuilder + .getExecutorService().invokeAll(asepectToDos_l); + final List<DoubleBasicGrid> aspectGrids_l = new ArrayList<DoubleBasicGrid>(); + for (final Future<DoubleBasicGrid> asepctFuture : aspectFutures_l) { + aspectGrids_l.add(asepctFuture.get()); + } + + return GridDestriper.assembleDoubleStrips(aspectGrids_l); + + } + + private final DoubleBasicGrid slopeDegsGrid; + + private final double zenithDegs; + private final double azimuthDegs; + +} Property changes on: plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaCalculator.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaStripe.java =================================================================== --- plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaStripe.java (rev 0) +++ plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaStripe.java 2018-10-10 09:03:45 UTC (rev 5970) @@ -0,0 +1,78 @@ +package com.geomaticaeambiente.openjump.klem.realArea; + +import java.io.IOException; +import java.util.concurrent.Callable; + +import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid; + +/** + * + * @author AdL + */ +public class RealAreaStripe implements Callable<DoubleBasicGrid> { + + public RealAreaStripe(int stripeEffectiveRows, + DoubleBasicGrid slopeDegsGrid, int yOffset, double zenithDegs, + double azimuthDegs) { + + this.stripeEffectiveRows = stripeEffectiveRows; + this.slopeDegsGrid = slopeDegsGrid; + + this.yOffset = yOffset; + + } + + @Override + public DoubleBasicGrid call() throws Exception { + return calcAspect(); + } + + private DoubleBasicGrid calcAspect() throws IOException { + + final int nRows = stripeEffectiveRows; + final int nCols = slopeDegsGrid.getColumnCount(); + + final DoubleBasicGrid realAreaGrid = new DoubleBasicGrid( + new byte[nRows][nCols], slopeDegsGrid.getCellSize(), -9999, + slopeDegsGrid.getLowerLeftCoord()); + + for (int row = 0; row < nRows; row++) { + for (int col = 0; col < nCols; col++) { + + realAreaGrid.setValue(col, row, slopeDegsGrid.getNoData()); + + final java.awt.Point cell = new java.awt.Point(col, row + + yOffset); + + if (!slopeDegsGrid.isNoData(slopeDegsGrid.getValue(cell))) { + + final double area = slopeDegsGrid.getCellSize() + * slopeDegsGrid.getCellSize(); + final double slopeRad = Math.toRadians(slopeDegsGrid + .getValue(col, row)); + + final double realArea = area / Math.cos(slopeRad); + + if (!Double.isInfinite(realArea)) { + realAreaGrid.setValue(col, row, realArea); + } else { + realAreaGrid.setValue(col, row, + slopeDegsGrid.getNoData()); + } + // hillshadeGrid.setValue(col, row, + // Math.toDegrees(hillshade)); + + } + } + } + + return realAreaGrid; + + } + + private final int stripeEffectiveRows; + private final DoubleBasicGrid slopeDegsGrid; + + private final int yOffset; + +} Property changes on: plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/realArea/RealAreaStripe.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel