Revision: 5936
http://sourceforge.net/p/jump-pilot/code/5936
Author: ma15569
Date: 2018-08-29 05:24:12 +0000 (Wed, 29 Aug 2018)
Log Message:
-----------
Added OpenKLEM source code to repository
Added Paths:
-----------
plug-ins/OpenKLEM/
plug-ins/OpenKLEM/OpenKLEMCore/
plug-ins/OpenKLEM/OpenKLEMCore/dist/
plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828-source.zip
plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828.jar
plug-ins/OpenKLEM/OpenKLEMCore/trunk/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/lib/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/lib/jep-2.4.0.jar
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/ChangeLog
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/Log.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/AspectCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/AspectStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/CurveNumberCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/LandUseSoilGroupTuple.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/SoilGroupLandUseTable.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/ValuesRange.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/DrainageTimeCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/DrainageTimeStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/VelocityCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/exceptions/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/exceptions/NotSpatiallyConsistentGridsException.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFiller.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFillerStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFillerStripe2.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessor.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessor2.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessorStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/flowdir/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/flowdir/BitOps.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/flowdir/FlowDirsCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/flowdir/FlowDirsStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/BasicGrid.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/BooleanBasicGrid.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/ByteBasicGrid.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/DoubleBasicGrid.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/FloatBasicGrid.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/FlowDirBasicGrid.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/GridDestriper.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/GridStriper.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/IntBasicGrid.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/grid/LongBasicGrid.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hillshade/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hillshade/HillshadeCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hillshade/HillshadeStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hydrodistance/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hydrodistance/HydroDistCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hydrodistance/HydroDistStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hydrology/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hydrology/HydrographGeo.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hydrology/Hydrology.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/hydrology/UnitHydrograph.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/lspp/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/lspp/Lspp.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/AbstractStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/DependencyAbstractStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/DependencyCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/DependencyStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/ExecutorBuilder.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/GridClipper.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/Shifter.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/UpwardAbstractStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel/Utils.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel2/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel2/AbstractStripe2.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel2/ByteStripeGrid2.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel2/DoubleStripeGrid2.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/parallel2/IntStripeGrid2.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/HistogramCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/RasterAggregator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/RasterAverager.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/RasterClipper.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/RasterComb.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/RasterReclassifier.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/Rasterizer.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/ReclassTuple.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/Utils.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/Vectorizer.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/classifiers/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/classifiers/Autoscale.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/rastertools/classifiers/ClassAlgo.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/routing/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/routing/RoutingTimeAdvancedParameters.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/routing/RoutingTimeCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/routing/RoutingTimeParameters.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/routing/RoutingTimeStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/slope/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/slope/SlopeCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/slope/SlopeStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/units/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/units/Angle.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/units/Area.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/units/Length.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/units/Speed.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/units/Time.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/upslopearea/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/upslopearea/UpslopeAreaCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/upslopearea/UpslopeAreaStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/upslopearea/UpslopeAreaStripeD8.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/upslopearea/UpslopeAreaStripeMF.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/watersheds/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/watersheds/WatershedExtractor.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/watersheds/WatershedStripe.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/gpl_2.rtf
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/BaseflowParams.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/DesignRain.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/DrainageArea.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/FlowModeller.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/FlowModellerWorker.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/Geomorphology.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/Hyetograph.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/HyetographGenerator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/InitialAbstraction.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/Klem.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/LsppCalculator.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/ParallelFlowModeller.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/RainfallRecession.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/SimulationOutput.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/TimeInterval.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/Utils.java
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/it/geomaticaeambiente/klem/Watershed.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/dist/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/dist/OpenKLEMOJ-20180828-source.zip
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/dist/OpenKLEMOJ-20180828.jar
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/lib/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/lib/commons-validator-1.4.1.jar
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/lib/java-rdfa-0.4.2.jar
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/lib/jcommon-1.0.14.jar
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/lib/jena-core-2.13.0.jar
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/lib/jena-iri-1.1.2.jar
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/lib/jfreechart-1.0.11.jar
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/lib/odfdom-java-0.8.10-incubating.jar
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/ChangeLog
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/exceptions/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/exceptions/MessageTypes.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/exceptions/WarningException.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/ExclamationMark.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/ExclamationMarkRed.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/Hydrology_01.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/OpenKlem.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/Raster.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/Raster_01.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/RoundArrow00.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/RoundArrow01.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/Wrench.gif
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/add.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/cog.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/cross.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/disk.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/folder-horizontal-open_16.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/folder_page.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/hydrograph.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/rainbow.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/weather_cloudy.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/images/wrench_orange.png
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/KlemExtension.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/StartPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/CurveNumberPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/CurveNumberTable.table6
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/DemFillerPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/FlowDirectionPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/HydroDistPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/HydrologyGroupsPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/HyetographPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/RoutingTimePlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/SlopeAspectHillshadePlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/UpslopeAreaPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/WatershedPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/HydroOutputPanel.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/HydrographGeomorphologicalPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/HydrographHortonTriangularPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/HydrographNashPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/HydrographSCSPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/HydrographTriangularPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/AdvancedParamsOutput.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/HydrographKlemPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/KlemProperties.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/KlemUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/OdsOutput.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/OutputTab.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/OutputTab2.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/ParamsTab.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/SAXParserKlem.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/VetoableSingleSelectionModel.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/WatershedInformation.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/XMLCreatorKlem.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/hydrology/hydrographs/klem/model.ods
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/AggregateRastersPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/CutRasterPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/PolygonsVectorizerPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/RasterCombPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/RasterConversionsPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/RasterConverter.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/RasterHistogramPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/RasterizeVectorLayerPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/rastertools/ReclassRasterPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/setting/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/setting/OptionPlugIn.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/plugin/setting/SetWorkspacePlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/resources/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/resources/Bundle.properties
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/resources/Bundle_en.properties
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/resources/Bundle_it.properties
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/AboutDialog.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/CommonHydroPanel.form
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/CommonHydroPanel.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/CustomComboBox.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/GUIUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/HelpDialog.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/InitialDialog.form
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/InitialDialog.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/LayerablesList.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/LayersChangedListener.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/MainPanel.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/PersonalChartPanelComponent.form
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/PersonalChartPanelComponent.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/PersonalComponentAbstract.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/PersonalRasterCombPanel.form
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/PersonalRasterCombPanel.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/PersonalTableComponents.form
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/PersonalTableComponents.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/PersonalTreeNode.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/RadioButtonsPanel.form
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/RadioButtonsPanel.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/SubPanel.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/Symbologies.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/TextStyles.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/ui/YourTableCellRenderer1.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/AbstractInputKlemPlugin.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/ActionObject.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/CombinationComponents.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/CommonHydrographData.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/ComponentEntry.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/ComponentsTreeMap.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/FileUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/GeometryUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/Header.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/HydroUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/InitialData.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PersonalChart.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PersonalChartHistogram.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PersonalChartHydrograph.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PersonalChartHyetograph.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PersonalChartKlem.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PersonalRadioButtons.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PersonalTable.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PluginGUIComponentsInterface.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/PluginUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/RasterCombinationComponent.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/RasterUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/ShapefileUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/TextUtils.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/ValueRangeGroup.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/WatershedTool.java
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/com/geomaticaeambiente/klemgui/utils/gpl_2.txt
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/gpl_2.txt
plug-ins/OpenKLEM/OpenKLEMOpenJUMP/trunk/src/workbench-properties.xml
plug-ins/OpenKLEM/doc/
plug-ins/OpenKLEM/doc/README.txt
Added: plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828-source.zip
===================================================================
(Binary files differ)
Index: plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828-source.zip
===================================================================
--- plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828-source.zip
2018-08-28 12:49:14 UTC (rev 5935)
+++ plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828-source.zip
2018-08-29 05:24:12 UTC (rev 5936)
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828-source.zip
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828.jar
===================================================================
(Binary files differ)
Index: plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828.jar
===================================================================
--- plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828.jar 2018-08-28
12:49:14 UTC (rev 5935)
+++ plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828.jar 2018-08-29
05:24:12 UTC (rev 5936)
Property changes on: plug-ins/OpenKLEM/OpenKLEMCore/dist/OpenKLEM-20180828.jar
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: plug-ins/OpenKLEM/OpenKLEMCore/trunk/lib/jep-2.4.0.jar
===================================================================
(Binary files differ)
Index: plug-ins/OpenKLEM/OpenKLEMCore/trunk/lib/jep-2.4.0.jar
===================================================================
--- plug-ins/OpenKLEM/OpenKLEMCore/trunk/lib/jep-2.4.0.jar 2018-08-28
12:49:14 UTC (rev 5935)
+++ plug-ins/OpenKLEM/OpenKLEMCore/trunk/lib/jep-2.4.0.jar 2018-08-29
05:24:12 UTC (rev 5936)
Property changes on: plug-ins/OpenKLEM/OpenKLEMCore/trunk/lib/jep-2.4.0.jar
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/ChangeLog
===================================================================
--- plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/ChangeLog
(rev 0)
+++ plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/ChangeLog 2018-08-29 05:24:12 UTC
(rev 5936)
@@ -0,0 +1,15 @@
+# NOTE: <Adopted from OpenJUMP ChangeLog file>
+# 1. for display continuity sake please use 2 spaces instead of tabs
+# 2. make sure that lines break at 80 chars for constricted display situations
+#<-------------------------------- 80 chars
---------------------------------->#
+
+2018-13-07 Giuseppe Aruta
+ * Class: com.geomaticaeambiente.openjump.klem.slope.SlopeStripe
+ Added radians output
+
+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
+
+
Added:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/Log.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/Log.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/Log.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,7 @@
+package com.geomaticaeambiente.openjump.klem;
+
+public class Log {
+
+ public static boolean log = true;
+
+}
\ No newline at end of file
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/Log.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/aspect/AspectCalculator.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/AspectCalculator.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/AspectCalculator.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,155 @@
+package com.geomaticaeambiente.openjump.klem.aspect;
+
+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;
+import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.geom.LineString;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ *
+ * @author AdL
+ */
+public class AspectCalculator {
+
+ /**
+ * Calculates the aspect
+ * @param demGrid
+ * @param bluelines Optional
+ * @param bluelinesWeight Optional
+ */
+ public AspectCalculator(DoubleBasicGrid demGrid, LineString[] bluelines,
+ Double bluelinesWeight) {
+ this.demGrid = demGrid;
+ this.bluelinesLineStrings = bluelines;
+ this.bluelinesWeight = bluelinesWeight;
+ }
+
+ /**
+ * Calculates the aspect (in radians).
+ * @return The aspect (radians).
+ * @throws InterruptedException
+ * @throws ExecutionException
+ * @throws IOException
+ */
+ public DoubleBasicGrid calculate() throws InterruptedException,
ExecutionException, IOException {
+
+ int rowCount = demGrid.getRowCount();
+ ExecutorBuilder execBuilder = new ExecutorBuilder(rowCount);
+ int stripeRowCount = execBuilder.getRowPerStripeCount();
+ int stripeCount = execBuilder.getStripeCount();
+
+ List<Callable<DoubleBasicGrid>> asepectToDos_l = new
ArrayList<Callable<DoubleBasicGrid>>();
+
+ DoubleBasicGrid[] demStripes = GridStriper.stripeDoubleGrid(demGrid,
stripeRowCount);
+
+ /* Rasterize bluelines */
+ boolean[][] bluelines = null;
+ if(bluelinesLineStrings != null && bluelinesLineStrings.length != 0) {
+ Envelope bluelinesEnvelope = new Envelope();
+ for(LineString lineString : bluelinesLineStrings) {
+
bluelinesEnvelope.expandToInclude(lineString.getEnvelopeInternal());
+ }
+
+ bluelines = rasterize(bluelinesLineStrings,
+ demGrid.getColumnCount(), demGrid.getRowCount(),
+ demGrid.getCellSize(), demGrid.getLowerLeftCoord());
+
+ }
+
+ /* Stripe flow directions */
+ for(int s=0; s<stripeCount; s++) {
+
+ int stripeEffectiveRows;
+ if(s != stripeCount -1) {
+ stripeEffectiveRows = stripeRowCount;
+ } else {
+ stripeEffectiveRows = rowCount - (s * stripeRowCount);
+ }
+
+ double[] upRow = new double[demGrid.getColumnCount()];
+ Arrays.fill(upRow, demGrid.getNoData());
+ double[] bottomRow = new double[demGrid.getColumnCount()];
+ Arrays.fill(bottomRow, demGrid.getNoData());
+
+ if(s > 0) {
+ upRow = Arrays.copyOf(
+ demGrid.getData()[s*stripeRowCount-1],
demGrid.getColumnCount());
+ }
+
+ if(s < stripeCount - 1) {
+ bottomRow = Arrays.copyOf(
+
demGrid.getData()[s*stripeRowCount+stripeEffectiveRows],
demGrid.getColumnCount());
+ }
+
+ AspectStripe aspectStripe = new AspectStripe(
+ demStripes[s], upRow, bottomRow, bluelines,
bluelinesWeight);
+
+ asepectToDos_l.add(aspectStripe);
+
+ }
+
+ /* Calculate */
+ List<Future<DoubleBasicGrid>> aspectFutures_l =
execBuilder.getExecutorService().invokeAll(asepectToDos_l);
+ List<DoubleBasicGrid> aspectGrids_l = new ArrayList<DoubleBasicGrid>();
+ for(Future<DoubleBasicGrid> asepctFuture : aspectFutures_l) {
+ aspectGrids_l.add(asepctFuture.get());
+ }
+
+ return GridDestriper.assembleDoubleStrips(aspectGrids_l);
+
+ }
+
+ public boolean[][] rasterize(LineString[] lineStrings,
+ int colCount, int rowCount, double cellSize, Coordinate llCorner) {
+
+ int n_step;
+
+ boolean[][] bluelines = new boolean[rowCount][colCount];
+ for(int r=0; r<rowCount; r++){
+ for(int c=0; c<colCount; c++){
+ bluelines[r][c] = false;
+ }
+ }
+
+ for(LineString lineString : lineStrings) {
+
+ if(lineString.getCoordinates().length > 1){
+ Coordinate coord1 = lineString.getCoordinates()[0];
+ for(int p=1; p<lineString.getCoordinates().length; p++){
+ Coordinate coord2 = lineString.getCoordinates()[p];
+
+ n_step = (int)Math.round(Math.max(
+ Math.abs(coord2.x-coord1.x) / (cellSize/2.0),
+
Math.max(Math.abs(coord2.y-coord1.y)/(cellSize/2.0), 1.0)));
+ for(int k=0; k<=n_step; k++){
+ double x = coord1.x + k * (coord2.x - coord1.x) /
n_step;
+ double y = coord1.y + k * (coord2.y - coord1.y) /
n_step;
+ int ic = (int)((x - llCorner.x) / cellSize + 0.9999 -
1);
+ int ir = rowCount - (int)((y - llCorner.y) / cellSize
+ 0.9999);
+// System.out.println(ic + "," + ir);
+ if (ic > 0 && ic < colCount && ir > 0 && ir <
rowCount) {
+ bluelines[ir][ic] = true;
+ }
+ }
+ coord1 = coord2;
+ }
+ }
+ }
+ return bluelines;
+ }
+
+ private final DoubleBasicGrid demGrid;
+ private final LineString[] bluelinesLineStrings;
+ private final Double bluelinesWeight;
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/AspectCalculator.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/aspect/AspectStripe.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/AspectStripe.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/AspectStripe.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,129 @@
+package com.geomaticaeambiente.openjump.klem.aspect;
+
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+import com.geomaticaeambiente.openjump.klem.parallel.Shifter;
+import java.io.IOException;
+import java.util.concurrent.Callable;
+
+/**
+ *
+ * @author AdL
+ */
+public class AspectStripe implements Callable<DoubleBasicGrid> {
+
+ public AspectStripe(DoubleBasicGrid demStripe, double[] upRow,
+ double[] bottomRow, boolean[][] bluelinesGrid, Double
bluelinesWeight) {
+
+ this.demStripe = demStripe;
+ this.upRow = upRow;
+ this.bottomRow = bottomRow;
+ this.bluelinesGrid = bluelinesGrid;
+ this.bluelinesWeight = bluelinesWeight;
+
+ }
+
+ @Override
+ public DoubleBasicGrid call() throws Exception {
+ return calcAspect();
+ }
+
+ private DoubleBasicGrid calcAspect() throws IOException {
+
+ int nRows = demStripe.getRowCount();
+ int nCols = demStripe.getColumnCount();
+
+ DoubleBasicGrid aspectDegsGrid = new DoubleBasicGrid(new
byte[nRows][nCols],
+ demStripe.getCellSize(), -9999, demStripe.getLowerLeftCoord());
+
+ for(int row=0; row<nRows; row++) {
+ for(int col=0; col<nCols; col++) {
+
+ aspectDegsGrid.setValue(col, row, aspectDegsGrid.getNoData());
+
+ // Bluelines
+ double[] elev = new double[8];
+ for(int i=0; i<8; i++) {
+
+ int c1 = col + Shifter.getColShift(i);
+ int r1 = row + Shifter.getRowShift(i);
+ if(c1>=0 && c1<nCols && r1>=0 && r1<nRows) {
+ if(!demStripe.isNoData(demStripe.getData()[r1][c1])) {
+ elev[i] = demStripe.getData()[r1][c1];
+ }
+ } else if(c1>=0 && c1<nCols && r1<0) {
+ if(!demStripe.isNoData(upRow[c1])) {
+ elev[i] = upRow[c1];
+ }
+ } else if(c1>=0 && c1<nCols && r1==nRows) {
+ if(!demStripe.isNoData(bottomRow[c1])) {
+ elev[i] = bottomRow[c1];
+ }
+ }
+
+ if(bluelinesGrid != null) {
+ if(c1>0 && c1<nCols && r1>0 && r1<nRows &&
bluelinesGrid[r1][c1]) {
+ if(elev[i] < demStripe.getData()[row][col] &&
!demStripe.isNoData(elev[i])) {
+ elev[i] -= bluelinesWeight;
+ }
+ }
+ }
+
+ }
+
+ if(!demStripe.isNoData(demStripe.getData()[row][col])) {
+
+ // a b c
+ // d e f
+ // g h i
+
+ // e = current cell
+
+ double a = elev[3];
+ double b = elev[2];
+ double c = elev[1];
+ double d = elev[4];
+ double f = elev[0];
+ double g = elev[5];
+ double h = elev[6];
+ double i = elev[7];
+
+ if(demStripe.isNoData(a) || demStripe.isNoData(b) ||
+ demStripe.isNoData(c) || demStripe.isNoData(d) ||
+ demStripe.isNoData(f) || demStripe.isNoData(g) ||
+ demStripe.isNoData(h) || demStripe.isNoData(i)) {
+
+ aspectDegsGrid.setValue(col, row,
demStripe.getNoData());
+ continue;
+
+ }
+
+ double dz_dx = ((c + 2*f + i) - (a + 2*d + g)) / 8;
+ double dz_dy = ((g + 2*h + i) - (a + 2*b + c)) / 8;
+
+ double aspect = Math.toDegrees(Math.atan2(dz_dy, -dz_dx));
+
+ if(aspect < 0) {
+ aspect = 90.0 - aspect;
+ } else if (aspect > 90.0) {
+ aspect = 360.0 - aspect + 90.0;
+ } else {
+ aspect = 90.0 - aspect;
+ }
+
+ aspectDegsGrid.setValue(col, row, aspect);
+
+ }
+ }
+ }
+
+ return aspectDegsGrid;
+
+ }
+
+ private final DoubleBasicGrid demStripe;
+ private final double[] upRow;
+ private final double[] bottomRow;
+ private final boolean[][] bluelinesGrid;
+ private final Double bluelinesWeight;
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/aspect/AspectStripe.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/cn/CurveNumberCalculator.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/CurveNumberCalculator.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/CurveNumberCalculator.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,54 @@
+package com.geomaticaeambiente.openjump.klem.cn;
+
+import
com.geomaticaeambiente.openjump.klem.exceptions.NotSpatiallyConsistentGridsException;
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+
+/**
+ *
+ * @author AdL
+ */
+public class CurveNumberCalculator {
+
+ /**
+ * Calculates the Curve Number grid from land use and hydrological soil
+ * group grids, with the given reclassification parameters.
+ * @param landCoverGrid
+ * @param soilGroupGrid
+ * @param soilGroupLandUseTable
+ * @return
+ * @throws NotSpatiallyConsistentGridsException
+ */
+ public DoubleBasicGrid calculateCn(
+ DoubleBasicGrid landCoverGrid, DoubleBasicGrid soilGroupGrid,
+ SoilGroupLandUseTable soilGroupLandUseTable) throws
NotSpatiallyConsistentGridsException {
+
+ if(!landCoverGrid.isSpatiallyConsistentWith(soilGroupGrid)) {
+ throw new NotSpatiallyConsistentGridsException();
+ }
+
+ int columnCount = landCoverGrid.getColumnCount();
+ int rowCount = landCoverGrid.getRowCount();
+
+ double[][] cnData = new double[rowCount][columnCount];
+
+ for (int r=0; r<rowCount; r++) {
+ for (int c=0; c<columnCount; c++) {
+ cnData[r][c] = landCoverGrid.getNoData();
+ if(!landCoverGrid.isNoData(landCoverGrid.getData()[r][c]) &&
+
!soilGroupGrid.isNoData(soilGroupGrid.getData()[r][c])) {
+
+ cnData[r][c] = soilGroupLandUseTable.getCnValue(
+ landCoverGrid.getData()[r][c],
+ soilGroupGrid.getData()[r][c]);
+
+ }
+ }
+ }
+
+ return new DoubleBasicGrid(
+ cnData, landCoverGrid.getCellSize(),
+ landCoverGrid.getNoData(), landCoverGrid.getLowerLeftCoord());
+
+ }
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/CurveNumberCalculator.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/cn/LandUseSoilGroupTuple.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/LandUseSoilGroupTuple.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/LandUseSoilGroupTuple.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,36 @@
+package com.geomaticaeambiente.openjump.klem.cn;
+
+/**
+ *
+ * @author AdL
+ */
+public class LandUseSoilGroupTuple {
+
+ public LandUseSoilGroupTuple(
+ ValuesRange landUseRange,
+ ValuesRange soilGroupRange,
+ double cnValue) {
+
+ this.landUseRange = landUseRange;
+ this.soilGroupRange = soilGroupRange;
+ this.cnValue = cnValue;
+
+ }
+
+ public ValuesRange getLandUseRange() {
+ return landUseRange;
+ }
+
+ public ValuesRange getSoilGroupRange() {
+ return soilGroupRange;
+ }
+
+ public double getCnValue() {
+ return cnValue;
+ }
+
+ private final ValuesRange landUseRange;
+ private final ValuesRange soilGroupRange;
+ private final double cnValue;
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/LandUseSoilGroupTuple.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/cn/SoilGroupLandUseTable.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/SoilGroupLandUseTable.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/SoilGroupLandUseTable.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,43 @@
+package com.geomaticaeambiente.openjump.klem.cn;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author AdL
+ */
+public class SoilGroupLandUseTable {
+
+
+ public void addTuple(LandUseSoilGroupTuple landUseSoilGroupTuple) {
+
+ tuples_l.add(landUseSoilGroupTuple);
+
+ }
+
+ public Double getCnValue(double landUseValue, double soilGroupValue) {
+
+ Double cnValue = null;
+
+ for(LandUseSoilGroupTuple tuple : tuples_l) {
+ if(tuple.getLandUseRange().getMinValue() <= landUseValue &&
+ tuple.getLandUseRange().getMaxValue() >= landUseValue) {
+
+ if(tuple.getSoilGroupRange().getMinValue() >= soilGroupValue &&
+ tuple.getSoilGroupRange().getMaxValue() <=
soilGroupValue) {
+
+ return tuple.getCnValue();
+ }
+ }
+ }
+
+
+ return cnValue;
+
+ }
+
+ private final List<LandUseSoilGroupTuple> tuples_l = new
ArrayList<LandUseSoilGroupTuple>();
+
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/SoilGroupLandUseTable.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/cn/ValuesRange.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/ValuesRange.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/ValuesRange.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,25 @@
+package com.geomaticaeambiente.openjump.klem.cn;
+
+/**
+ *
+ * @author AdL
+ */
+public class ValuesRange {
+
+ public ValuesRange(double minValue, double maxValue) {
+ this.minValue = minValue;
+ this.maxValue = maxValue;
+ }
+
+ public double getMinValue() {
+ return minValue;
+ }
+
+ public double getMaxValue() {
+ return maxValue;
+ }
+
+ private final double minValue;
+ private final double maxValue;
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/cn/ValuesRange.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/drainageTime/DrainageTimeCalculator.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/DrainageTimeCalculator.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/DrainageTimeCalculator.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,149 @@
+package com.geomaticaeambiente.openjump.klem.drainageTime;
+
+import com.geomaticaeambiente.openjump.klem.Log;
+import com.geomaticaeambiente.openjump.klem.grid.ByteBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.FlowDirBasicGrid;
+import com.geomaticaeambiente.openjump.klem.parallel.DependencyCalculator;
+import com.geomaticaeambiente.openjump.klem.parallel.DependencyStripe;
+import com.geomaticaeambiente.openjump.klem.parallel.Utils;
+import com.geomaticaeambiente.openjump.klem.parallel.ExecutorBuilder;
+import com.geomaticaeambiente.openjump.klem.parallel.GridClipper;
+import com.vividsolutions.jts.geom.Coordinate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+
+/**
+ *
+ * @author AdL
+ */
+public class DrainageTimeCalculator {
+
+ public DoubleBasicGrid calculate(DoubleBasicGrid slopeGrid,
FlowDirBasicGrid flowDirsGrid,
+ Coordinate[] outlets, double maxDrainageTime, VelocityCalculator
velCalc) throws Exception {
+
+ if(flowDirsGrid == null) {
+ throw new Exception ("The flow directions grid cannot be null.");
+ }
+
+ /* Striping */
+ int rowCount = flowDirsGrid.getRowCount();
+ ExecutorBuilder execBuilder = new ExecutorBuilder(rowCount);
+ int stripeRowCount = execBuilder.getRowPerStripeCount();
+ int stripeCount = execBuilder.getStripeCount();
+
+ /* Plug custom outlets */
+ if(outlets != null) {
+ for(int r=0; r<flowDirsGrid.getRowCount(); r++) {
+ for(int c=0; c<flowDirsGrid.getColumnCount(); c++) {
+ if(flowDirsGrid.isOutlet(c, r)) {
+ flowDirsGrid.setNoData(c, r, true);
+ }
+ }
+ }
+
+ for(Coordinate outlet : outlets) {
+ java.awt.Point outletColRow = Utils.getColRow(outlet,
flowDirsGrid);
+ flowDirsGrid.setOutlet(outletColRow);
+ }
+ }
+
+ /* Calculate dependency grid */
+ if(Log.log) System.out.println("Calc dependency grid...");
+ DependencyCalculator depGridCalculator = new DependencyCalculator(
+ DependencyStripe.Origin.OUTLET, flowDirsGrid);
+ ByteBasicGrid dependencyGrid = depGridCalculator.calculate();
+
+ /* Extract watershed */
+ if(Log.log) System.out.println("Extract watershed...");
+ double[][] watershedData = new
double[flowDirsGrid.getRowCount()][flowDirsGrid.getColumnCount()];
+ for(int r=0; r<watershedData.length; r++) {
+ for(int c=0; c<watershedData[r].length; c++) {
+ if(flowDirsGrid.isNoData(c, r)) {
+ watershedData[r][c] = -9;
+ }
+ }
+ }
+
+ /* Striping */
+ DrainageTimeStripe[] stripes = new DrainageTimeStripe[stripeCount];
+
+ for(int s=0; s<stripes.length; s++) {
+
+ int stripeEffectiveRows;
+ if(s != stripes.length -1) {
+ stripeEffectiveRows = stripeRowCount;
+ } else {
+ stripeEffectiveRows = rowCount - (s * stripeRowCount);
+ }
+
+ byte[][] dependencyStripe = new
byte[stripeEffectiveRows][flowDirsGrid.getColumnCount()];
+
+ int offset = s * stripeRowCount;
+
+ for(int r=0; r<stripeEffectiveRows; r++) {
+ dependencyStripe[r] =
Arrays.copyOf(dependencyGrid.getData()[r+offset],
flowDirsGrid.getColumnCount());
+ }
+
+ stripes[s] = new DrainageTimeStripe(
+ s, slopeGrid, flowDirsGrid, dependencyStripe,
+ watershedData, offset, maxDrainageTime, velCalc);
+
+ }
+
+ /* Process stripes */
+ if(Log.log) System.out.println("Process stripes...");
+ boolean terminate = false;
+ while(!terminate) {
+
+ // This part can be parallelized
+ List<Callable<Boolean>> todos_l = new
ArrayList<Callable<Boolean>>();
+
+ for(int s=0; s<stripes.length; s++) {
+ if(Log.log) System.out.println("Processing stripe: " + (s+1));
+ todos_l.add(stripes[s]);
+ }
+
+ List<Future<Boolean>> futures_l =
execBuilder.getExecutorService().invokeAll(todos_l);
+
+ /* Swap buffers */
+ if(stripes.length == 1) {
+ break;
+ }
+
+ terminate = true;
+ for(int s=0; s<stripes.length-1; s++) {
+
+ byte[] s2above = stripes[s+1].getAboveBuffer();
+ byte[] s1below = stripes[s].getBelowBuffer();
+
+ stripes[s].plugNewBelowBuffer(s2above);
+ stripes[s+1].plugNewAboveBuffer(s1below);
+
+ if(stripes[s].getQsCount() != 0 || stripes[s+1].getQsCount()
!= 0) {
+ terminate = false;
+ }
+
+ }
+
+ }
+
+ execBuilder.getExecutorService().shutdown();
+
+ DoubleBasicGrid watershedGrid = new DoubleBasicGrid(watershedData,
flowDirsGrid.getCellSize(),
+ -9, flowDirsGrid.getLowerLeftCoord());
+
+ /* If only one outlet specified, clip output */
+ if(outlets != null && outlets.length == 1) {
+ if(Log.log) System.out.println("Clipping output...");
+ return GridClipper.extractValues(watershedGrid, null);
+ }
+
+ return watershedGrid;
+
+ }
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/DrainageTimeCalculator.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/drainageTime/DrainageTimeStripe.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/DrainageTimeStripe.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/DrainageTimeStripe.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,110 @@
+package com.geomaticaeambiente.openjump.klem.drainageTime;
+
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.FlowDirBasicGrid;
+import com.geomaticaeambiente.openjump.klem.parallel.Shifter;
+import com.geomaticaeambiente.openjump.klem.parallel.UpwardAbstractStripe;
+import java.awt.Point;
+
+/**
+ *
+ * @author AdL
+ */
+public class DrainageTimeStripe extends UpwardAbstractStripe {
+
+ public DrainageTimeStripe(int id, DoubleBasicGrid slopeGridRads,
FlowDirBasicGrid flowDirData,
+ byte[][] dependencyStripe, double[][] outputData, int yOffset,
+ double maxDrainageTime, VelocityCalculator velCalc) {
+ super(id, flowDirData, dependencyStripe, outputData, yOffset);
+
+ this.slopeGridRads = slopeGridRads;
+ this.maxDrainageTime = maxDrainageTime;
+ this.orthoDistance = flowDirData.getCellSize();
+ this.diagDistance = orthoDistance * Math.sqrt(2);
+ this.velCalc = velCalc;
+
+ }
+
+ @Override
+ protected void findQs () {
+
+ for(int r=0; r<stripeNRows; r++) {
+ for(int c=0; c<stripeNCols; c++) {
+ if(dependencyStripe[r][c] == 1 &&
+ outputData[r + yOffset][c] == 0) {
+ Qs_l.add(new java.awt.Point(c, r));
+ }
+ }
+ }
+
+ }
+
+ @Override
+ public void process() {
+
+ while(!Qs_l.isEmpty()) {
+
+ java.awt.Point cell = Qs_l.get(Qs_l.size()-1);
+
+ Qs_l.remove(Qs_l.size()-1);
+ if(flowDirsGrid.isOutlet(cell)) {
+ outputData[cell.y][cell.x] = -9;
+ }
+
+ updateCell(cell);
+
+ // Update dependency maps
+ updateDependencyMaps(cell, 1);
+
+ }
+
+ }
+
+ @Override
+ public void updateCell(Point cell) {
+
+ java.awt.Point cellGrid = new java.awt.Point(cell.x, cell.y + yOffset);
+
+ int noData = -9;
+
+ if(flowDirsGrid.isOutlet(cellGrid)) {
+ outputData[cellGrid.y][cellGrid.x] = orthoDistance;
+ return;
+ }
+
+ /* Find the sink cell */
+ int colShift =
Shifter.getColShift(flowDirsGrid.getTarbotonianFlowDirValue(cellGrid));
+ int rowShift =
Shifter.getRowShift(flowDirsGrid.getTarbotonianFlowDirValue(cellGrid));
+
+ java.awt.Point sinkCell = new java.awt.Point(
+ cellGrid.x + colShift,
+ cellGrid.y + rowShift);
+
+ if(outputData[sinkCell.y][sinkCell.x] == noData) {
+ outputData[cellGrid.y][cellGrid.x] = noData;
+ return;
+ }
+
+ double distance = orthoDistance;
+ if(sinkCell.x - cellGrid.x != 0 && sinkCell.y - cellGrid.y != 0) {
+ distance = diagDistance;
+ }
+
+ double slope = slopeGridRads.getValue(cellGrid);
+ double cellDrainageTime = distance / velCalc.calcVelocity(slope);
+
+ double drainageTime = outputData[sinkCell.y][sinkCell.x] +
cellDrainageTime;
+
+ outputData[cellGrid.y][cellGrid.x] =
+ drainageTime <= maxDrainageTime ?
+ outputData[sinkCell.y][sinkCell.x] + cellDrainageTime :
noData;
+
+ }
+
+ private final DoubleBasicGrid slopeGridRads;
+ private final double maxDrainageTime;
+ private final double orthoDistance;
+ private final double diagDistance;
+ private final VelocityCalculator velCalc;
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/DrainageTimeStripe.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/drainageTime/VelocityCalculator.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/VelocityCalculator.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/VelocityCalculator.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,11 @@
+package com.geomaticaeambiente.openjump.klem.drainageTime;
+
+/**
+ *
+ * @author AdL
+ */
+public interface VelocityCalculator {
+
+ public abstract double calcVelocity(double slopeRads);
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/drainageTime/VelocityCalculator.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/exceptions/NotSpatiallyConsistentGridsException.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/exceptions/NotSpatiallyConsistentGridsException.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/exceptions/NotSpatiallyConsistentGridsException.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,9 @@
+package com.geomaticaeambiente.openjump.klem.exceptions;
+
+/**
+ *
+ * @author AdL
+ */
+public class NotSpatiallyConsistentGridsException extends Exception {
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/exceptions/NotSpatiallyConsistentGridsException.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/fill/DemFiller.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFiller.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFiller.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,129 @@
+package com.geomaticaeambiente.openjump.klem.fill;
+
+import com.geomaticaeambiente.openjump.klem.Log;
+import com.geomaticaeambiente.openjump.klem.grid.BooleanBasicGrid;
+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;
+import com.geomaticaeambiente.openjump.klem.parallel.Shifter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ *
+ * @author AdL
+ */
+public class DemFiller {
+
+ public DemFiller(DoubleBasicGrid demGrid) {
+ this.demGrid = demGrid;
+ }
+
+ public DoubleBasicGrid calculate() throws InterruptedException,
ExecutionException, Exception {
+
+ int rowCount = demGrid.getRowCount();
+ ExecutorBuilder execBuilder = new ExecutorBuilder(rowCount);
+ int stripeRowCount = execBuilder.getRowPerStripeCount();
+ int stripeCount = execBuilder.getStripeCount();
+
+ DoubleBasicGrid[] demGrids = GridStriper.stripeDoubleGrid(demGrid,
stripeRowCount);
+ DemFillerStripe[] demStripes = new DemFillerStripe[stripeCount];
+
+ /* Create stripes */
+ BooleanBasicGrid borderGrid = new BooleanBasicGrid(
+ new
boolean[demGrid.getRowCount()][demGrid.getColumnCount()],
+ demGrid.getCellSize(), false, demGrid.getLowerLeftCoord());
+
+ for(int s=0; s<stripeCount; s++) {
+
+ int stripeEffectiveRows;
+ if(s != stripeCount -1) {
+ stripeEffectiveRows = stripeRowCount;
+ } else {
+ stripeEffectiveRows = rowCount - (s * stripeRowCount);
+ }
+
+ double[] upRow = new double[demGrid.getColumnCount()];
+ Arrays.fill(upRow, demGrid.getNoData());
+ double[] bottomRow = new double[demGrid.getColumnCount()];
+ Arrays.fill(bottomRow, demGrid.getNoData());
+
+ if(s > 0) {
+ upRow = Arrays.copyOf(
+ demGrid.getData()[s*stripeRowCount-1],
demGrid.getColumnCount());
+ }
+
+ if(s < stripeCount - 1) {
+ bottomRow = Arrays.copyOf(
+
demGrid.getData()[s*stripeRowCount+stripeEffectiveRows],
demGrid.getColumnCount());
+ }
+
+ DemFillerStripe demFillerStripe = new DemFillerStripe(
+ s, demGrids[s], s*stripeRowCount, upRow, bottomRow,
demGrid, borderGrid);
+
+ demStripes[s] = demFillerStripe;
+
+ }
+
+ /* Process stripes */
+ if(Log.log) System.out.println("Process stripes...");
+ boolean terminate = false;
+
+ while(!terminate) {
+
+ List<Callable<DoubleBasicGrid>> demFillToDos_l = new
ArrayList<Callable<DoubleBasicGrid>>();
+ demFillToDos_l.addAll(Arrays.asList(demStripes));
+
+ List<Future<DoubleBasicGrid>> flowDirFutures_l =
execBuilder.getExecutorService().invokeAll(demFillToDos_l);
+
+ terminate = true;
+
+ for (DemFillerStripe demStripe : demStripes) {
+ if (!demStripe.isTerminated()) {
+ terminate = false;
+ }
+ }
+
+ // Swap buffers
+ for(int s=0; s<demStripes.length-1; s++) {
+
+ double[] s2above = demStripes[s+1].getAboveBuffer();
+ double[] s1below = demStripes[s].getBelowBuffer();
+
+ demStripes[s].plugNewBelowBuffer(s2above);
+ demStripes[s+1].plugNewAboveBuffer(s1below);
+
+ }
+
+ if(terminate == true) {
+
+ List<DoubleBasicGrid> demFillGrids_l = new
ArrayList<DoubleBasicGrid>();
+ for(Future<DoubleBasicGrid> demFillFuture : flowDirFutures_l) {
+ demFillGrids_l.add(demFillFuture.get());
+ }
+ DoubleBasicGrid filledDem =
GridDestriper.assembleDoubleStrips(demFillGrids_l);
+ return filledDem;
+
+// // Remove flat areas
+// // TODO: parallelise flat area remover
+// FlatAreasProcessor2 flatAreasProcessor2 = new
FlatAreasProcessor2();
+// return flatAreasProcessor2.process(filledDem);
+
+
+ }
+
+ }
+
+ return null;
+
+ }
+
+ private final DoubleBasicGrid demGrid;
+
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFiller.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/fill/DemFillerStripe.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFillerStripe.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFillerStripe.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,324 @@
+package com.geomaticaeambiente.openjump.klem.fill;
+
+import com.geomaticaeambiente.openjump.klem.Log;
+import com.geomaticaeambiente.openjump.klem.grid.BooleanBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+import com.geomaticaeambiente.openjump.klem.parallel.AbstractStripe;
+import com.geomaticaeambiente.openjump.klem.parallel.Shifter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Callable;
+
+/**
+ *
+ * @author AdL
+ */
+public class DemFillerStripe extends AbstractStripe implements
Callable<DoubleBasicGrid> {
+
+ public DemFillerStripe (
+ int stripeId, DoubleBasicGrid demStripe, int yOffset,
+ double[] aboveBuffer, double[] belowBuffer,
+ DoubleBasicGrid wholeDem,
+ BooleanBasicGrid wholeBorder) {
+ super(stripeId, demStripe, yOffset, aboveBuffer, belowBuffer);
+
+ this.wholeDem = wholeDem;
+ this.wholeBorder = wholeBorder;
+
+ this.outputGrid = demStripe;
+ this.aboveBuffer = aboveBuffer;
+ this.belowBuffer = belowBuffer;
+ stripeNCols = demStripe.getColumnCount();
+ stripeNRows = demStripe.getRowCount();
+
+ aboveOutBuffer = new double[stripeNCols];
+ belowOutBuffer = new double[stripeNCols];
+
+ gridNRows = wholeDem.getRowCount();
+
+ }
+
+ @Override
+ protected void process() {
+
+ /* Initialization is done only once */
+ if(initialize) {
+ /* Initialize output grids */
+ outputGrid = new DoubleBasicGrid(new
double[stripeNRows][stripeNCols],
+ outputGrid.getCellSize(), outputGrid.getNoData(),
outputGrid.getLowerLeftCoord());
+
+ for(int r=0; r<stripeNRows; r++) {
+ Arrays.fill(outputGrid.getData()[r], outputGrid.getNoData());
+ }
+ findBorder();
+ findPits();
+
+ initialize = false;
+ }
+
+
+ terminated = false;
+ if(!theSwitch) {
+ if(Log.log) System.out.println(stripeId + " Qs: " + Qs_l.size());
+ process(Qs_l, Qs1_l);
+ } else {
+ if(Log.log) System.out.println(stripeId + " Qs1: " + Qs1_l.size());
+ process(Qs1_l, Qs_l);
+ }
+ theSwitch = !theSwitch;
+
+ }
+
+ private void findBorder() {
+
+ // Needs to calcualte border for the buffer too
+ for (int r=0; r<stripeNRows; r++) {
+ for (int c=0; c<stripeNCols; c++) {
+
+ if(r+yOffset < 0 || r+yOffset >= gridNRows) {
+ continue;
+ }
+
+ boolean border = false;
+ double dValue;
+
+ if(!wholeDem.isNoData(wholeDem.getData()[r + yOffset][c])) {
+ for (int i = 0; i < 8; i++) {
+
+ int ic = c + Shifter.getColShift(i);
+ int ir = r + Shifter.getRowShift(i);
+
+ if(ic < 0 || ic >= stripeNCols ||
+ ir+yOffset < 0 || ir+yOffset >= gridNRows) {
+ border = true;
+ break;
+ }
+
+ dValue = wholeDem.getData()[ir+yOffset][ic];
+
+ if (wholeDem.isNoData(dValue)) {
+ border = true;
+ break;
+ }
+
+ }
+
+ wholeBorder.getData()[r+yOffset][c] = border;
+
+ if(r == 0) {
+ outputGrid.getData()[r][c] = border ?
wholeDem.getData()[r+yOffset][c] : Double.MAX_VALUE;
+ aboveOutBuffer[c] = border ? aboveBuffer[c] :
Double.MAX_VALUE;
+ } else if(r == stripeNRows-1) {
+ outputGrid.getData()[r][c] = border ?
wholeDem.getData()[r+yOffset][c] : Double.MAX_VALUE;
+ belowOutBuffer[c] = border ? belowBuffer[c] :
Double.MAX_VALUE;
+ } else {
+ outputGrid.getData()[r][c] = border ?
wholeDem.getData()[r+yOffset][c] : Double.MAX_VALUE;
+ }
+
+ }
+ }
+ }
+
+ }
+
+ private void findPits() {
+
+ for (int r=0; r<stripeNRows; r++) {
+ for (int c=0; c<stripeNCols; c++) {
+
+ if(r+yOffset < 0 || r+yOffset >= gridNRows) {
+ continue;
+ }
+
+ if(!wholeBorder.getData()[r+yOffset][c]) {
+
+ if(r < 0) {
+ if(aboveOutBuffer[c] <=
wholeDem.getData()[r+yOffset][c]) {
+ continue;
+ }
+ } else if (r >= stripeNRows) {
+ if(belowOutBuffer[c] <=
wholeDem.getData()[r+yOffset][c]) {
+ continue;
+ }
+ } else {
+ if(outputGrid.getData()[r][c] <=
wholeDem.getData()[r+yOffset][c]) {
+ continue;
+ }
+ }
+
+ if(!wholeDem.isNoData(wholeDem.getData()[r+yOffset][c])) {
+
+ double neighbourDouble = Double.MAX_VALUE;
+
+ for(int i=0; i<8; i++) {
+ int ic = c + Shifter.getColShift(i);
+ int ir = r + Shifter.getRowShift(i);
+
+ if(ir < 0) {
+
+ if(!wholeDem.isNoData(aboveOutBuffer[ic]) &&
+ aboveOutBuffer[ic] < neighbourDouble) {
+
+ neighbourDouble = aboveOutBuffer[ic];
+ }
+
+ } else if(ir >= stripeNRows) {
+
+ if(!wholeDem.isNoData(belowOutBuffer[ic]) &&
+ belowOutBuffer[ic] < neighbourDouble) {
+
+ neighbourDouble = belowOutBuffer[ic];
+ }
+
+ } else {
+
+
if(!wholeDem.isNoData(outputGrid.getData()[ir][ic]) &&
+ outputGrid.getData()[ir][ic] <
neighbourDouble) {
+
+ neighbourDouble =
outputGrid.getData()[ir][ic];
+
+ }
+
+ }
+ }
+
+ if(r == 0) {
+ if(wholeDem.getData()[r+yOffset][c] >=
neighbourDouble) {
+ outputGrid.getData()[r][c] =
wholeDem.getData()[r+yOffset][c];
+ aboveOutBuffer[c] =
wholeDem.getData()[r+yOffset][c];
+ } else {
+ Qs_l.add(new java.awt.Point(c, r));
+ outputGrid.getData()[r][c] = neighbourDouble;
+ aboveOutBuffer[c] = neighbourDouble;
+ }
+ } else if(r == stripeNRows-1) {
+ if(wholeDem.getData()[r+yOffset][c] >=
neighbourDouble) {
+ outputGrid.getData()[r][c] =
wholeDem.getData()[r+yOffset][c];
+ belowOutBuffer[c] =
wholeDem.getData()[r+yOffset][c];
+ } else {
+ Qs_l.add(new java.awt.Point(c, r));
+ outputGrid.getData()[r][c] = neighbourDouble;
+ belowOutBuffer[c] = neighbourDouble;
+ }
+ } else {
+ if(wholeDem.getData()[r+yOffset][c] >=
neighbourDouble) {
+ outputGrid.getData()[r][c] =
wholeDem.getData()[r+yOffset][c];
+ } else {
+ Qs_l.add(new java.awt.Point(c, r));
+ outputGrid.getData()[r][c] = neighbourDouble;
+ }
+ }
+ }
+
+ }
+ }
+ }
+
+ }
+
+ private void process(List<java.awt.Point> fromCue, List<java.awt.Point>
toCue) {
+
+ terminated = true;
+ while(!fromCue.isEmpty()) {
+
+ java.awt.Point cell = fromCue.get(fromCue.size()-1);
+ fromCue.remove(fromCue.size()-1);
+
+ double neighbourDouble = Double.MAX_VALUE;
+
+ int r = cell.y;
+ int c = cell.x;
+
+ for(int i=0; i<8; i++) {
+ int ic = c + Shifter.getColShift(i);
+ int ir = r + Shifter.getRowShift(i);
+
+ if(ic < 0 || ic >= stripeNCols) {
+ continue;
+ }
+
+ if(ir < 0) {
+ if(!wholeDem.isNoData(aboveOutBuffer[ic]) &&
+ aboveOutBuffer[ic] < neighbourDouble) {
+ neighbourDouble = aboveOutBuffer[ic];
+ }
+ } else if (ir == stripeNRows) {
+ if(!wholeDem.isNoData(belowOutBuffer[ic]) &&
+ belowOutBuffer[ic] < neighbourDouble) {
+ neighbourDouble = belowOutBuffer[ic];
+ }
+ } else {
+ if(!wholeDem.isNoData(outputGrid.getData()[ir][ic]) &&
+ outputGrid.getData()[ir][ic] < neighbourDouble) {
+ neighbourDouble = outputGrid.getData()[ir][ic];
+ }
+ }
+
+ }
+
+ if(wholeDem.getData()[r+yOffset][c] >= neighbourDouble) {
+ outputGrid.getData()[r][c] = wholeDem.getData()[r+yOffset][c];
+ terminated = false;
+ } else {
+ toCue.add(new java.awt.Point(c, r));
+ if(outputGrid.getData()[r][c] > neighbourDouble) {
+ outputGrid.getData()[r][c] = neighbourDouble;
+ terminated = false;
+ }
+ }
+
+ // Update buffers if on first or last row
+ if(r==0) {
+ if(!wholeDem.isNoData(aboveOutBuffer[c])) {
+ aboveOutBuffer[c] = outputGrid.getData()[r][c];
+ }
+ } else if (r==stripeNRows-1) {
+ if(!wholeDem.isNoData(belowOutBuffer[c])) {
+ belowOutBuffer[c] = outputGrid.getData()[r][c];
+ }
+ }
+
+ }
+
+ }
+
+ @Override
+ public double[] getBelowBuffer() {
+ return belowOutBuffer;
+ }
+
+ @Override
+ public double[] getAboveBuffer() {
+ return aboveOutBuffer;
+ }
+
+ @Override
+ public void plugNewBelowBuffer(double[] newBuffer) {
+ belowOutBuffer = newBuffer;
+ }
+
+ @Override
+ public void plugNewAboveBuffer(double[] newBuffer) {
+ aboveOutBuffer = newBuffer;
+ }
+
+ public boolean isTerminated() {
+ return terminated;
+ }
+
+ private boolean initialize = true;
+
+ private final DoubleBasicGrid wholeDem;
+ private final BooleanBasicGrid wholeBorder;
+
+ private final int gridNRows;
+
+ private final List<java.awt.Point> Qs1_l = new ArrayList<java.awt.Point>();
+ private boolean terminated = false;
+ private boolean theSwitch = false;
+
+ private double[] aboveOutBuffer;
+ private double[] belowOutBuffer;
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFillerStripe.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/fill/DemFillerStripe2.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFillerStripe2.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFillerStripe2.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,332 @@
+package com.geomaticaeambiente.openjump.klem.fill;
+
+import com.geomaticaeambiente.openjump.klem.Log;
+import com.geomaticaeambiente.openjump.klem.grid.BooleanBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+import com.geomaticaeambiente.openjump.klem.parallel.AbstractStripe;
+import com.geomaticaeambiente.openjump.klem.parallel.Shifter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Callable;
+
+/**
+ *
+ * @author AdL
+ */
+public class DemFillerStripe2 extends AbstractStripe implements
Callable<DoubleBasicGrid> {
+
+ public DemFillerStripe2 (
+ int stripeId, DoubleBasicGrid demStripe, int yOffset,
+ double[] aboveBuffer, double[] belowBuffer,
+ DoubleBasicGrid wholeDem,
+ BooleanBasicGrid wholeBorder) {
+ super(stripeId, demStripe, yOffset, aboveBuffer, belowBuffer);
+
+ this.wholeDem = wholeDem;
+ this.wholeBorder = wholeBorder;
+
+ this.outputGrid = demStripe;
+ this.aboveBuffer = aboveBuffer;
+ this.belowBuffer = belowBuffer;
+ stripeNCols = demStripe.getColumnCount();
+ stripeNRows = demStripe.getRowCount();
+
+ aboveOutBuffer = new double[stripeNCols];
+ belowOutBuffer = new double[stripeNCols];
+
+ gridNRows = wholeDem.getRowCount();
+
+ }
+
+ @Override
+ protected void process() {
+
+ /* Initialization is done only once */
+ if(initialize) {
+ /* Initialize output grids */
+ outputGrid = new DoubleBasicGrid(new
double[stripeNRows][stripeNCols],
+ outputGrid.getCellSize(), outputGrid.getNoData(),
outputGrid.getLowerLeftCoord());
+
+ for(int r=0; r<stripeNRows; r++) {
+ Arrays.fill(outputGrid.getData()[r], outputGrid.getNoData());
+ }
+ findBorder();
+ //findPits();
+
+ initialize = false;
+ }
+
+
+ terminated = false;
+ if(!theSwitch) {
+ if(Log.log) System.out.println(stripeId + " Qs: " + Qs_l.size());
+ process(Qs_l, Qs1_l);
+ } else {
+ if(Log.log) System.out.println(stripeId + " Qs1: " + Qs1_l.size());
+ process(Qs1_l, Qs_l);
+ }
+ theSwitch = !theSwitch;
+
+ }
+
+ private void findBorder() {
+
+ // Needs to calcualte border for the buffer too
+ for (int r=0; r<stripeNRows; r++) {
+ for (int c=0; c<stripeNCols; c++) {
+
+ if(r+yOffset < 0 || r+yOffset >= gridNRows) {
+ continue;
+ }
+
+ boolean border = false;
+ double dValue;
+
+ if(!wholeDem.isNoData(wholeDem.getData()[r + yOffset][c])) {
+ for (int i = 0; i < 8; i++) {
+
+ int ic = c + Shifter.getColShift(i);
+ int ir = r + Shifter.getRowShift(i);
+
+ if(ic < 0 || ic >= stripeNCols ||
+ ir+yOffset < 0 || ir+yOffset >= gridNRows) {
+ border = true;
+ break;
+ }
+
+ dValue = wholeDem.getData()[ir+yOffset][ic];
+
+ if (wholeDem.isNoData(dValue)) {
+ border = true;
+ break;
+ }
+
+ }
+
+ wholeBorder.getData()[r+yOffset][c] = border;
+
+ if(r == 0) {
+ outputGrid.getData()[r][c] = border ?
wholeDem.getData()[r+yOffset][c] : Double.MAX_VALUE;
+ aboveOutBuffer[c] = border ? aboveBuffer[c] :
Double.MAX_VALUE;
+ } else if(r == stripeNRows-1) {
+ outputGrid.getData()[r][c] = border ?
wholeDem.getData()[r+yOffset][c] : Double.MAX_VALUE;
+ belowOutBuffer[c] = border ? belowBuffer[c] :
Double.MAX_VALUE;
+ } else {
+ outputGrid.getData()[r][c] = border ?
wholeDem.getData()[r+yOffset][c] : Double.MAX_VALUE;
+ }
+
+ }
+ }
+ }
+
+ }
+
+ private void findPits() {
+
+ for (int r=0; r<stripeNRows; r++) {
+ for (int c=0; c<stripeNCols; c++) {
+
+ if(r+yOffset < 0 || r+yOffset >= gridNRows) {
+ continue;
+ }
+
+ if(!wholeBorder.getData()[r+yOffset][c]) {
+
+ if(r < 0) {
+ if(aboveOutBuffer[c] <=
wholeDem.getData()[r+yOffset][c]) {
+ continue;
+ }
+ } else if (r >= stripeNRows) {
+ if(belowOutBuffer[c] <=
wholeDem.getData()[r+yOffset][c]) {
+ continue;
+ }
+ } else {
+ if(outputGrid.getData()[r][c] <=
wholeDem.getData()[r+yOffset][c]) {
+ continue;
+ }
+ }
+
+ if(!wholeDem.isNoData(wholeDem.getData()[r+yOffset][c])) {
+
+ double neighbourDouble = Double.MAX_VALUE;
+
+ for(int i=0; i<8; i++) {
+ int ic = c + Shifter.getColShift(i);
+ int ir = r + Shifter.getRowShift(i);
+
+ if(ir < 0) {
+
+ if(!wholeDem.isNoData(aboveOutBuffer[ic]) &&
+ aboveOutBuffer[ic] < neighbourDouble) {
+
+ neighbourDouble = aboveOutBuffer[ic];
+ }
+
+ } else if(ir >= stripeNRows) {
+
+ if(!wholeDem.isNoData(belowOutBuffer[ic]) &&
+ belowOutBuffer[ic] < neighbourDouble) {
+
+ neighbourDouble = belowOutBuffer[ic];
+ }
+
+ } else {
+
+
if(!wholeDem.isNoData(outputGrid.getData()[ir][ic]) &&
+ outputGrid.getData()[ir][ic] <
neighbourDouble) {
+
+ neighbourDouble =
outputGrid.getData()[ir][ic];
+
+ }
+
+ }
+ }
+
+ if(r == 0) {
+ if(wholeDem.getData()[r+yOffset][c] >=
neighbourDouble) {
+ outputGrid.getData()[r][c] =
wholeDem.getData()[r+yOffset][c];
+ aboveOutBuffer[c] =
wholeDem.getData()[r+yOffset][c];
+ } else {
+ Qs_l.add(new java.awt.Point(c, r));
+ outputGrid.getData()[r][c] = neighbourDouble;
+ aboveOutBuffer[c] = neighbourDouble;
+ }
+ } else if(r == stripeNRows-1) {
+ if(wholeDem.getData()[r+yOffset][c] >=
neighbourDouble) {
+ outputGrid.getData()[r][c] =
wholeDem.getData()[r+yOffset][c];
+ belowOutBuffer[c] =
wholeDem.getData()[r+yOffset][c];
+ } else {
+ Qs_l.add(new java.awt.Point(c, r));
+ outputGrid.getData()[r][c] = neighbourDouble;
+ belowOutBuffer[c] = neighbourDouble;
+ }
+ } else {
+ if(wholeDem.getData()[r+yOffset][c] >=
neighbourDouble) {
+ outputGrid.getData()[r][c] =
wholeDem.getData()[r+yOffset][c];
+ } else {
+ Qs_l.add(new java.awt.Point(c, r));
+ outputGrid.getData()[r][c] = neighbourDouble;
+ }
+ }
+ }
+
+ }
+ }
+ }
+
+ }
+
+ private void process(List<java.awt.Point> fromCue, List<java.awt.Point>
toCue) {
+
+ long modified = 0;
+
+ terminated = true;
+ for(int r=0; r<stripeNRows; r++) {
+ for(int c=0; c<stripeNCols; c++) {
+
+ if(r+yOffset < 0 || r+yOffset >= gridNRows) {
+ continue;
+ }
+
+ if(!wholeBorder.getData()[r+yOffset][c] &&
+ !wholeDem.isNoData(wholeDem.getData()[r+yOffset][c])) {
+
+ double minNeighbour = Double.MAX_VALUE;
+
+ for(int i=0; i<8; i++) {
+ int ic = c + Shifter.getColShift(i);
+ int ir = r + Shifter.getRowShift(i);
+
+ if(ir < 0) {
+
+ if(!wholeDem.isNoData(aboveOutBuffer[ic]) &&
+ aboveOutBuffer[ic] < minNeighbour) {
+ minNeighbour = aboveOutBuffer[ic];
+ }
+
+ } else if(ir >= stripeNRows) {
+
+ if(!wholeDem.isNoData(belowOutBuffer[ic]) &&
+ belowOutBuffer[ic] < minNeighbour) {
+ minNeighbour = belowOutBuffer[ic];
+ }
+
+ } else {
+
+
if(!wholeDem.isNoData(outputGrid.getData()[ir][ic]) &&
+ outputGrid.getData()[ir][ic] <
minNeighbour) {
+ minNeighbour = outputGrid.getData()[ir][ic];
+ }
+ }
+ }
+
+ double outputAnte = outputGrid.getValue(c, r);
+ if(wholeDem.getData()[r+yOffset][c] >= minNeighbour) {
+ outputGrid.getData()[r][c] =
wholeDem.getData()[r+yOffset][c];
+ } else {
+ outputGrid.getData()[r][c] = minNeighbour;
+ }
+ if(outputGrid.getValue(c, r) != outputAnte) {
+ modified++;
+ terminated = false;
+ }
+
+ if(r == 0) {
+ if(wholeDem.getData()[r+yOffset][c] >= minNeighbour) {
+ aboveOutBuffer[c] = outputGrid.getData()[r][c];
+ } else {
+ aboveOutBuffer[c] = minNeighbour;
+ }
+ } else if(r == stripeNRows-1) {
+ if(wholeDem.getData()[r+yOffset][c] >= minNeighbour) {
+ belowOutBuffer[c] = outputGrid.getData()[r][c];
+ } else {
+ belowOutBuffer[c] = minNeighbour;
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ @Override
+ public double[] getBelowBuffer() {
+ return belowOutBuffer;
+ }
+
+ @Override
+ public double[] getAboveBuffer() {
+ return aboveOutBuffer;
+ }
+
+ @Override
+ public void plugNewBelowBuffer(double[] newBuffer) {
+ belowOutBuffer = newBuffer;
+ }
+
+ @Override
+ public void plugNewAboveBuffer(double[] newBuffer) {
+ aboveOutBuffer = newBuffer;
+ }
+
+ public boolean isTerminated() {
+ return terminated;
+ }
+
+ private boolean initialize = true;
+
+ private final DoubleBasicGrid wholeDem;
+ private final BooleanBasicGrid wholeBorder;
+
+ private final int gridNRows;
+
+ private final List<java.awt.Point> Qs1_l = new ArrayList<java.awt.Point>();
+ private boolean terminated = false;
+ private boolean theSwitch = false;
+
+ private double[] aboveOutBuffer;
+ private double[] belowOutBuffer;
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/DemFillerStripe2.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/fill/FlatAreasProcessor.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessor.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessor.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,343 @@
+package com.geomaticaeambiente.openjump.klem.fill;
+
+import com.geomaticaeambiente.openjump.klem.Log;
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.FlowDirBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.IntBasicGrid;
+import com.geomaticaeambiente.openjump.klem.parallel.Shifter;
+import java.awt.Point;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ *
+ * @author deluca
+ */
+public class FlatAreasProcessor {
+
+ public Results process(DoubleBasicGrid demGrid, FlowDirBasicGrid
flowDirGrid) throws Exception {
+
+ this.demGrid = demGrid;
+ this.flowDirGrid = flowDirGrid;
+
+ rowCount = demGrid.getRowCount();
+ colCount = demGrid.getColumnCount();
+
+ // 1 - Calculate flow directions
+ //calcFlowDirs();
+
+ // 2 - Flat edges
+ calcFlatEdges();
+
+ // 3 - Label flats
+ if(Log.log) System.out.println("Labelling flats");
+ labelFlats();
+
+// DoubleBasicGrid flatMaskGridDouble = new
DoubleBasicGrid(labelsGrid.getData(), labelsGrid.getCellSize(), -9999,
labelsGrid.getLowerLeftCoord());
+// if(1==1) return flatMaskGridDouble;
+
+ // 4 - Process away from higer
+ if(Log.log) System.out.println("Process away from higher");
+ awayFromHigher();
+
+// DoubleBasicGrid flatMaskGridDouble = new
DoubleBasicGrid(flatMaskGrid.getData(), flatMaskGrid.getCellSize(), -9999,
flatMaskGrid.getLowerLeftCoord());
+// if(1==1) return flatMaskGridDouble;
+
+ // 5 - Process towards lower
+ if(Log.log) System.out.println("Process towards lower");
+ towardsLower();
+
+// DoubleBasicGrid flatMaskGridDouble = new
DoubleBasicGrid(flatMaskGrid.getData(), flatMaskGrid.getCellSize(), -9999,
flatMaskGrid.getLowerLeftCoord());
+// if(1==1) return flatMaskGridDouble;
+
+ for(int r=0; r<flatMaskGrid.getRowCount(); r++) {
+ for(int c=0; c<flatMaskGrid.getColumnCount(); c++) {
+ if(flatMaskGrid.getValue(c, r) == 0) {
+ flatMaskGrid.setValue(c, r, flatMaskGrid.getNoData());
+ }
+ }
+ }
+
+ return new Results(flatMaskGrid, labelsGrid);
+
+ }
+
+ private void calcFlatEdges() {
+
+ for(int r=0; r<rowCount; r++) {
+ for(int c=0; c<colCount; c++) {
+
+ if(!demGrid.isNoData(demGrid.getValue(c, r))) {
+
+ for(int i=0; i<8; i++) {
+
+ int ic = c + Shifter.getColShift(i);
+ int ir = r + Shifter.getRowShift(i);
+
+ if(!flowDirGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+ if(flowDirGrid.isNoData(ic, ir)) {
+ continue;
+ }
+
+ if(!flowDirGrid.isOutlet(c, r)
+ && flowDirGrid.isOutlet(ic, ir)
+ && demGrid.getValue(c, r) ==
demGrid.getValue(ic, ir)) {
+
+ lowEdges_l.add(new java.awt.Point(c, r));
+ break;
+
+ } else if(flowDirGrid.isOutlet(c, r)
+ && demGrid.getValue(c, r) <
demGrid.getValue(ic, ir)) {
+
+ highEdges_l.add(new java.awt.Point(c, r));
+ break;
+ }
+
+ }
+
+ }
+ }
+ }
+
+ }
+
+ private void labelFlats() {
+
+ List<java.awt.Point> toFill = new ArrayList<java.awt.Point>();
+
+ labelsGrid = new IntBasicGrid(new int[rowCount][colCount],
demGrid.getCellSize(), -Integer.MAX_VALUE, demGrid.getLowerLeftCoord());
+
+ lMax = 0;
+ for(Point lowEdge : lowEdges_l) {
+
+ lMax++;
+
+ toFill.add(lowEdge);
+ double E = demGrid.getValue(lowEdge);
+ while(toFill.size() > 0) {
+
+ Point cCell = toFill.get(toFill.size()-1);
+ toFill.remove(toFill.size()-1);
+
+ if(!demGrid.belongsToGrid(cCell)) {
+ continue;
+ }
+
+ if(demGrid.isNoData(demGrid.getValue(cCell))) {
+ continue;
+ }
+
+ if(demGrid.getValue(cCell) != E) {
+ continue;
+ }
+ if(labelsGrid.getValue(cCell) != 0) {
+ continue;
+ }
+
+ labelsGrid.setValue(cCell, lMax);
+
+ for(int i=0; i<8; i++) {
+
+ int ic = cCell.x + Shifter.getColShift(i);
+ int ir = cCell.y + Shifter.getRowShift(i);
+
+ if(!flowDirGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+
+ if(demGrid.getValue(cCell) != demGrid.getValue(ic, ir)) {
+ continue;
+ }
+
+ toFill.add(new java.awt.Point(ic, ir));
+
+ }
+
+ }
+
+ }
+
+ // Purge highEdges
+ for(Iterator<Point> it = highEdges_l.iterator(); it.hasNext(); ){
+ Point highEdge = it.next();
+ if(labelsGrid.getValue(highEdge) == 0) {
+ it.remove();
+ }
+ }
+
+
+ }
+
+ public void awayFromHigher() {
+
+ flatMaskGrid = new DoubleBasicGrid(
+ new int[rowCount][colCount], demGrid.getCellSize(), -9999,
demGrid.getLowerLeftCoord());
+
+ flatHeight = new int[lMax];
+
+ int loops = 1;
+
+ List<Point> highEdges2_l = new ArrayList<Point>();
+
+ boolean somethingToDo = true;
+ while(somethingToDo) {
+
+ while(highEdges_l.size() > 0) {
+
+ Point cCell = highEdges_l.get(highEdges_l.size()-1);
+ highEdges_l.remove(highEdges_l.size()-1);
+
+ if(flatMaskGrid.getValue(cCell) > 0) {
+ continue;
+ }
+
+ flatMaskGrid.setValue(cCell.x, cCell.y, loops);
+ flatHeight[labelsGrid.getValue(cCell) - 1] = loops;
+
+ for(int i=0; i<8; i++) {
+
+ int ic = cCell.x + Shifter.getColShift(i);
+ int ir = cCell.y + Shifter.getRowShift(i);
+
+ if(!flowDirGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+
+ if(labelsGrid.getValue(ic, ir) ==
labelsGrid.getValue(cCell)
+ && flowDirGrid.isOutlet(ic, ir)
+ && flatMaskGrid.getValue(ic, ir) == 0) {
+ highEdges2_l.add(new Point(ic, ir));
+ }
+
+ }
+
+ }
+
+ // Switch cues
+ loops++;
+ highEdges_l = new ArrayList<java.awt.Point>(highEdges2_l);
+ highEdges2_l.clear();
+ if(highEdges_l.isEmpty()) {
+ somethingToDo = false;
+ }
+
+ }
+
+ // Reverse gradient values and make flatMask negative
+ for(int r=0; r<rowCount; r++) {
+ for(int c=0; c<colCount; c++) {
+
+ if(!flatMaskGrid.isNoData(flatMaskGrid.getValue(c, r))
+ && flatMaskGrid.getValue(c, r) > 0) {
+ flatMaskGrid.setValue(c, r,
-(flatHeight[labelsGrid.getValue(c, r) - 1] - flatMaskGrid.getValue(c, r)));
+ }
+
+ }
+ }
+
+
+ }
+
+ private void towardsLower() {
+
+ // flatMask already negative!
+ int loops = 1;
+
+ List<Point> lowEdges2_l = new ArrayList<Point>();
+
+ boolean somethingToDo = true;
+ while(somethingToDo) {
+
+ while(lowEdges_l.size() > 0) {
+
+ Point cCell = lowEdges_l.get(lowEdges_l.size()-1);
+ lowEdges_l.remove(lowEdges_l.size()-1);
+
+ if(flatMaskGrid.getValue(cCell) > 0) {
+ continue;
+ }
+
+ if(flatMaskGrid.getValue(cCell) < 0) {
+ flatMaskGrid.setValue(cCell.x,
cCell.y,//flatHeight[labelsGrid.getValue(cCell) - 1]
+ - flatMaskGrid.getValue(cCell) + 2 * loops);
+ } else {
+ flatMaskGrid.setValue(cCell.x, cCell.y, 2 * loops);
+ }
+
+ for(int i=0; i<8; i++) {
+
+ int ic = cCell.x + Shifter.getColShift(i);
+ int ir = cCell.y + Shifter.getRowShift(i);
+
+ if(!flowDirGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+
+ if(labelsGrid.getValue(ic, ir) ==
labelsGrid.getValue(cCell)
+ && flowDirGrid.isOutlet(ic, ir)) {
+ lowEdges2_l.add(new Point(ic, ir));
+ }
+
+ }
+
+ }
+
+ loops++;
+ lowEdges_l = new ArrayList<java.awt.Point>(lowEdges2_l);
+ lowEdges2_l.clear();
+ if(lowEdges_l.isEmpty()) {
+ somethingToDo = false;
+ }
+
+ }
+
+
+ }
+
+ public class Results {
+
+ public Results(DoubleBasicGrid flowDirGrid, IntBasicGrid labelsGrid) {
+ this.gradientGrid = flowDirGrid;
+ this.labelsGrid = labelsGrid;
+ this.flatsCount = lMax;
+ }
+
+ public DoubleBasicGrid getGradientGrid() {
+ return gradientGrid;
+ }
+
+ public IntBasicGrid getLabelsGrid() {
+ return labelsGrid;
+ }
+
+ public int getFlatsCount() {
+ return flatsCount;
+ }
+
+ private final DoubleBasicGrid gradientGrid;
+ private final IntBasicGrid labelsGrid;
+ private final int flatsCount;
+
+ }
+
+
+ private int rowCount = 0;
+ private int colCount = 0;
+ private int lMax = 0;
+
+ private DoubleBasicGrid demGrid;
+ private FlowDirBasicGrid flowDirGrid;
+ private IntBasicGrid labelsGrid;
+ private DoubleBasicGrid flatMaskGrid;
+
+ private List<java.awt.Point> lowEdges_l = new ArrayList<java.awt.Point>();
+ private List<java.awt.Point> highEdges_l = new ArrayList<java.awt.Point>();
+
+ private int[] flatHeight;
+
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessor.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/fill/FlatAreasProcessor2.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessor2.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessor2.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,461 @@
+package com.geomaticaeambiente.openjump.klem.fill;
+
+import java.awt.Point;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import com.geomaticaeambiente.openjump.klem.Log;
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.IntBasicGrid;
+import com.geomaticaeambiente.openjump.klem.parallel.Shifter;
+
+/**
+ *
+ * @author deluca
+ */
+public class FlatAreasProcessor2 {
+
+ @SuppressWarnings("unused")
+ public DoubleBasicGrid process(DoubleBasicGrid demGrid) throws Exception {
+
+ inputDemGrid = demGrid;
+
+ rowCount = demGrid.getRowCount();
+ colCount = demGrid.getColumnCount();
+
+ // 1 - Calculate flow directions
+ calcFlowDirs();
+
+ // 2 - Flat edges
+ calcFlatEdges();
+
+ // 3 - Label flats
+ if (Log.log) {
+ System.out.println("Labelling flats");
+ }
+ labelFlats();
+
+ // DoubleBasicGrid flatMaskGridDouble = new
+ // DoubleBasicGrid(labelsGrid.getData(), labelsGrid.getCellSize(),
+ // -9999, labelsGrid.getLowerLeftCoord());
+ // if(1==1) return flatMaskGridDouble;
+
+ // 4 - Process away from higer
+ if (Log.log) {
+ System.out.println("Process away from higher");
+ }
+ awayFromHigher();
+
+ // DoubleBasicGrid flatMaskGridDouble = new
+ // DoubleBasicGrid(flatMaskGrid.getData(), flatMaskGrid.getCellSize(),
+ // -9999, flatMaskGrid.getLowerLeftCoord());
+ // if(1==1) return flatMaskGridDouble;
+
+ // 5 - Process towards lower
+ if (Log.log) {
+ System.out.println("Process towards lower");
+ }
+ towardsLower();
+
+ final DoubleBasicGrid flatMaskGridDouble = new DoubleBasicGrid(
+ flatMaskGrid.getData(), flatMaskGrid.getCellSize(), -9999,
+ flatMaskGrid.getLowerLeftCoord());
+ if (1 == 1) {
+ return flatMaskGridDouble;
+ }
+
+ // 6 - Alter DEM
+ if (Log.log) {
+ System.out.println("Alter DEM");
+ }
+ alterDem();
+
+ return demGrid;
+
+ }
+
+ // TODO: replace with parallel version
+ private void calcFlowDirs() {
+
+ final int flowDirNoData = -Integer.MAX_VALUE;
+
+ flowDirGrid = new IntBasicGrid(new int[rowCount][colCount],
+ inputDemGrid.getCellSize(), flowDirNoData,
+ inputDemGrid.getLowerLeftCoord());
+
+ for (int r = 0; r < rowCount; r++) {
+ for (int c = 0; c < colCount; c++) {
+
+ if (inputDemGrid.isNoData(inputDemGrid.getValue(c, r))) {
+ flowDirGrid.setValue(c, r, flowDirGrid.getNoData());
+ } else {
+
+ double eMin = inputDemGrid.getValue(c, r);
+ int nMin = noFlow;
+
+ for (int i = 0; i < 8; i++) {
+
+ final int ic = c + Shifter.getColShift(i);
+ final int ir = r + Shifter.getRowShift(i);
+
+ if (!inputDemGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+
+ if (inputDemGrid.getValue(ic, ir) < eMin) {
+ eMin = inputDemGrid.getValue(ic, ir);
+ nMin = i;
+ }
+
+ }
+
+ flowDirGrid.setValue(c, r, nMin);
+
+ }
+
+ }
+ }
+
+ }
+
+ private void calcFlatEdges() {
+
+ for (int r = 0; r < rowCount; r++) {
+ for (int c = 0; c < colCount; c++) {
+
+ if (!flowDirGrid.isNoData(flowDirGrid.getValue(c, r))) {
+
+ for (int i = 0; i < 8; i++) {
+
+ final int ic = c + Shifter.getColShift(i);
+ final int ir = r + Shifter.getRowShift(i);
+
+ if (!flowDirGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+ if (flowDirGrid.isNoData(flowDirGrid.getValue(ic,
ir))) {
+ continue;
+ }
+
+ if (flowDirGrid.getValue(c, r) != noFlow
+ && flowDirGrid.getValue(ic, ir) == noFlow
+ && inputDemGrid.getValue(c, r) == inputDemGrid
+ .getValue(ic, ir)) {
+
+ lowEdges_l.add(new java.awt.Point(c, r));
+ break;
+
+ } else if (flowDirGrid.getValue(c, r) == noFlow
+ && inputDemGrid.getValue(c, r) < inputDemGrid
+ .getValue(ic, ir)) {
+
+ highEdges_l.add(new java.awt.Point(c, r));
+ break;
+ }
+
+ }
+
+ }
+ }
+ }
+
+ }
+
+ private void labelFlats() {
+
+ final List<java.awt.Point> toFill = new ArrayList<java.awt.Point>();
+
+ labelsGrid = new IntBasicGrid(new int[rowCount][colCount],
+ inputDemGrid.getCellSize(), -Integer.MAX_VALUE,
+ inputDemGrid.getLowerLeftCoord());
+
+ lMax = 0;
+ for (final Point lowEdge : lowEdges_l) {
+
+ lMax++;
+
+ toFill.add(lowEdge);
+ final double E = inputDemGrid.getValue(lowEdge);
+ while (toFill.size() > 0) {
+
+ final Point cCell = toFill.get(toFill.size() - 1);
+ toFill.remove(toFill.size() - 1);
+
+ if (!inputDemGrid.belongsToGrid(cCell)) {
+ continue;
+ }
+
+ if (inputDemGrid.isNoData(inputDemGrid.getValue(cCell))) {
+ continue;
+ }
+
+ if (inputDemGrid.getValue(cCell) != E) {
+ continue;
+ }
+ if (labelsGrid.getValue(cCell) != 0) {
+ continue;
+ }
+
+ labelsGrid.setValue(cCell, lMax);
+
+ for (int i = 0; i < 8; i++) {
+
+ final int ic = cCell.x + Shifter.getColShift(i);
+ final int ir = cCell.y + Shifter.getRowShift(i);
+
+ if (!flowDirGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+
+ if (inputDemGrid.getValue(cCell) != inputDemGrid.getValue(
+ ic, ir)) {
+ continue;
+ }
+
+ toFill.add(new java.awt.Point(ic, ir));
+
+ }
+
+ }
+
+ }
+
+ // Purge highEdges
+ for (final Iterator<Point> it = highEdges_l.iterator(); it.hasNext();)
{
+ final Point highEdge = it.next();
+ if (labelsGrid.getValue(highEdge) == 0) {
+ it.remove();
+ }
+ }
+
+ }
+
+ public void awayFromHigher() {
+
+ flatMaskGrid = new IntBasicGrid(new int[rowCount][colCount],
+ inputDemGrid.getCellSize(), -Integer.MAX_VALUE,
+ inputDemGrid.getLowerLeftCoord());
+ flatHeight = new int[lMax];
+
+ int loops = 1;
+
+ final List<Point> highEdges2_l = new ArrayList<Point>();
+
+ boolean somethingToDo = true;
+ while (somethingToDo) {
+
+ while (highEdges_l.size() > 0) {
+
+ final Point cCell = highEdges_l.get(highEdges_l.size() - 1);
+ highEdges_l.remove(highEdges_l.size() - 1);
+
+ if (flatMaskGrid.getValue(cCell) > 0) {
+ continue;
+ }
+
+ flatMaskGrid.setValue(cCell, loops);
+ flatHeight[labelsGrid.getValue(cCell) - 1] = loops;
+
+ for (int i = 0; i < 8; i++) {
+
+ final int ic = cCell.x + Shifter.getColShift(i);
+ final int ir = cCell.y + Shifter.getRowShift(i);
+
+ if (!flowDirGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+
+ if (labelsGrid.getValue(ic, ir) == labelsGrid
+ .getValue(cCell)
+ && flowDirGrid.getValue(ic, ir) == noFlow
+ && flatMaskGrid.getValue(ic, ir) == 0) {
+ highEdges2_l.add(new Point(ic, ir));
+ }
+
+ }
+
+ }
+
+ // Switch cues
+ loops++;
+ highEdges_l = new ArrayList<java.awt.Point>(highEdges2_l);
+ highEdges2_l.clear();
+ if (highEdges_l.isEmpty()) {
+ somethingToDo = false;
+ }
+
+ }
+
+ // Reverse gradient values and make flatMask negative
+ for (int r = 0; r < rowCount; r++) {
+ for (int c = 0; c < colCount; c++) {
+
+ if (!flatMaskGrid.isNoData(flatMaskGrid.getValue(c, r))
+ && flatMaskGrid.getValue(c, r) > 0) {
+ flatMaskGrid
+ .setValue(c, r, -(flatHeight[labelsGrid.getValue(c,
+ r) - 1] - flatMaskGrid.getValue(c, r)));
+ }
+
+ }
+ }
+
+ }
+
+ private void towardsLower() {
+
+ // flatMask already negative!
+ int loops = 1;
+
+ final List<Point> lowEdges2_l = new ArrayList<Point>();
+
+ boolean somethingToDo = true;
+ while (somethingToDo) {
+
+ while (lowEdges_l.size() > 0) {
+
+ final Point cCell = lowEdges_l.get(lowEdges_l.size() - 1);
+ lowEdges_l.remove(lowEdges_l.size() - 1);
+
+ if (flatMaskGrid.getValue(cCell) > 0) {
+ continue;
+ }
+
+ if (flatMaskGrid.getValue(cCell) < 0) {
+ flatMaskGrid.setValue(cCell, //
flatHeight[labelsGrid.getValue(cCell)
+ // - 1]
+ -flatMaskGrid.getValue(cCell) + 2 * loops);
+ } else {
+ flatMaskGrid.setValue(cCell, 2 * loops);
+ }
+
+ for (int i = 0; i < 8; i++) {
+
+ final int ic = cCell.x + Shifter.getColShift(i);
+ final int ir = cCell.y + Shifter.getRowShift(i);
+
+ if (!flowDirGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+
+ if (labelsGrid.getValue(ic, ir) == labelsGrid
+ .getValue(cCell)
+ && flowDirGrid.getValue(ic, ir) == noFlow) {
+ lowEdges2_l.add(new Point(ic, ir));
+ }
+
+ }
+
+ }
+
+ loops++;
+ lowEdges_l = new ArrayList<java.awt.Point>(lowEdges2_l);
+ lowEdges2_l.clear();
+ if (lowEdges_l.isEmpty()) {
+ somethingToDo = false;
+ }
+
+ }
+
+ }
+
+ private void alterDem() throws Exception {
+
+ for (int r = 0; r < rowCount; r++) {
+ for (int c = 0; c < colCount; c++) {
+
+ if (inputDemGrid.isNoData(inputDemGrid.getValue(c, r))
+ || labelsGrid.getValue(c, r) == 0
+ || flatMaskGrid.getValue(c, r) == 0) {
+ continue;
+ }
+
+ final boolean[] nIsLower = new boolean[8];
+ for (int i = 0; i < 8; i++) {
+
+ final int ic = c + Shifter.getColShift(i);
+ final int ir = r + Shifter.getRowShift(i);
+
+ if (!inputDemGrid.belongsToGrid(ic, ir)
+ || inputDemGrid.isNoData(inputDemGrid.getValue(ic,
+ ir))
+ || labelsGrid.getValue(c, r) == labelsGrid
+ .getValue(ic, ir)) {
+ continue;
+ }
+
+ if (inputDemGrid.getValue(c, r) > inputDemGrid.getValue(ic,
+ ir)) {
+ nIsLower[i] = true;
+ }
+
+ }
+
+ if (labelsGrid.getValue(c, r) == 8064) {
+ System.out.println("wait");
+ }
+
+ // Correction
+ for (int j = 0; j < flatMaskGrid.getValue(c, r); j++) {
+ inputDemGrid.setValue(c, r, Math.nextAfter(
+ (float) inputDemGrid.getValue(c, r),
+ Double.MAX_VALUE));
+ }
+
+ // Check
+ for (int i = 0; i < 8; i++) {
+
+ final int ic = c + Shifter.getColShift(i);
+ final int ir = r + Shifter.getRowShift(i);
+
+ if (!labelsGrid.belongsToGrid(ic, ir)) {
+ continue;
+ }
+
+ if (labelsGrid.getValue(ic, ir) == labelsGrid
+ .getValue(c, r)) {
+ continue;
+ }
+
+ if (inputDemGrid.getValue(c, r) > inputDemGrid.getValue(ic,
+ ir)) {
+ if (!nIsLower[i]) {
+ if (Log.log) {
+ System.out.println("Problem with col " + c
+ + " row " + r);
+ }
+ }
+ }
+
+ }
+
+ }
+ }
+
+ }
+
+ public IntBasicGrid getFlowDirGrid() {
+ return flowDirGrid;
+ }
+
+ public IntBasicGrid getLabelsGrid() {
+ return labelsGrid;
+ }
+
+ private int rowCount = 0;
+ private int colCount = 0;
+ private final int noFlow = -1;
+ private int lMax = 0;
+
+ private DoubleBasicGrid inputDemGrid;
+ private IntBasicGrid flowDirGrid;
+ private IntBasicGrid labelsGrid;
+ private IntBasicGrid flatMaskGrid;
+
+ private List<java.awt.Point> lowEdges_l = new ArrayList<java.awt.Point>();
+ private List<java.awt.Point> highEdges_l = new ArrayList<java.awt.Point>();
+
+ private int[] flatHeight;
+
+}
Property changes on:
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessor2.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/fill/FlatAreasProcessorStripe.java
===================================================================
---
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessorStripe.java
(rev 0)
+++
plug-ins/OpenKLEM/OpenKLEMCore/trunk/src/com/geomaticaeambiente/openjump/klem/fill/FlatAreasProcessorStripe.java
2018-08-29 05:24:12 UTC (rev 5936)
@@ -0,0 +1,389 @@
+package com.geomaticaeambiente.openjump.klem.fill;
+
+import com.geomaticaeambiente.openjump.klem.grid.DoubleBasicGrid;
+import com.geomaticaeambiente.openjump.klem.grid.IntBasicGrid;
+import com.geomaticaeambiente.openjump.klem.parallel.Shifter;
+import java.awt.Point;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ *
+ * @author AdL
+ */
+public class FlatAreasProcessorStripe {
+
+ public DoubleBasicGrid process(DoubleBasicGrid filledDem) {
+
+ columnCount = filledDem.getColumnCount();
+ rowCount = filledDem.getRowCount();
+
+ /* 0 - Convert to integer */
+ int[][] demIntData = new int[rowCount][columnCount];
+ boolean[][] flatsMap = new boolean[rowCount][columnCount];
+
+ int[][] totalGradient = new int[rowCount][columnCount];
+
+ // Initialize
+ for(int r=0; r<rowCount; r++) {
+ for(int c=0; c<columnCount; c++) {
+
+ if(filledDem.isNoData(filledDem.getValue(c, r))) {
+ demIntData[r][c] = Integer.MIN_VALUE;
+ } else {
+ demIntData[r][c] = (int) Math.round(filledDem.getValue(c,
r) * 100) * 1000;
+ }
+ totalGradient[r][c] = Integer.MIN_VALUE;
+ flatsMap[r][c] = false;
+
+ }
+ }
+
+ IntBasicGrid filledIntDem = new IntBasicGrid(demIntData,
+ filledDem.getCellSize(), Integer.MIN_VALUE,
filledDem.getLowerLeftCoord());
+
+ /* 1 - Find flat cells */
+ List<java.awt.Point> flatCells_l = findFlats(filledIntDem, flatsMap);
+
+ // Find flats outlets and uphill limit
+ Gradient[] gradients = findOutletsAndInlets(flatCells_l, filledIntDem,
flatsMap, 2);
+ Gradient gradientUpwards = gradients[0];
+ Gradient gradientDownwards = gradients[1];
+
+ /* 2 - Gradient towards lower terrain */
+ Gradient gradientUpwards1 = new
Gradient(gradientUpwards.getFlatCells_l(), gradientUpwards.getGradient());
+ Gradient gradientUpwards2 = null;
+
+ boolean terminated = false;
+ boolean theSwitch = true;
+
+ while(!terminated) {
+
+ if(theSwitch) {
+ gradientUpwards2 = processUpwards(filledIntDem,
gradientUpwards1, 2);
+ if(gradientUpwards2.getFlatCells_l().isEmpty()) {
+ terminated = true;
+ }
+ gradientUpwards = gradientUpwards2;
+ } else {
+ gradientUpwards1 = processUpwards(filledIntDem,
gradientUpwards2, 2);
+ if(gradientUpwards1.getFlatCells_l().isEmpty()) {
+ terminated = true;
+ }
+ gradientUpwards = gradientUpwards1;
+ }
+ theSwitch = !theSwitch;
+
+ }
+
+ /* 3 - Gradient away from lower terrain */
+ processDownwards(filledIntDem, gradientDownwards, 2);
+
+ /* 4 - Combine */
+ for(int r=0; r<rowCount; r++) {
+ for(int c=0; c<columnCount; c++) {
+ if(!filledIntDem.isNoData(gradientUpwards.getGradient()[r][c])
&&
+
!filledIntDem.isNoData(gradientDownwards.getGradient()[r][c])) {
+
+ totalGradient[r][c] = gradientUpwards.getGradient()[r][c]
+ + gradientDownwards.getGradient()[r][c] -
filledIntDem.getValue(c, r);
+
+ }
+ }
+ }
+
+ IntBasicGrid totalGradientGrid = new IntBasicGrid(totalGradient,
+ filledIntDem.getCellSize(), filledIntDem.getNoData(),
filledIntDem.getLowerLeftCoord());
+
+ /* 5 - Find remaining unresolved cells */
+ totalGradient = new int[rowCount][columnCount];
+
+ // Initialize
+ for(int r=0; r<rowCount; r++) {
+ for(int c=0; c<columnCount; c++) {
+
+ if(filledDem.isNoData(filledDem.getValue(c, r))) {
+ demIntData[r][c] = Integer.MIN_VALUE;
+ } else {
+ demIntData[r][c] = (int) Math.round(filledDem.getValue(c,
r) * 100);
+ }
+
+ totalGradient[r][c] = Integer.MIN_VALUE;
+ flatsMap[r][c] = false;
@@ Diff output truncated at 100000 characters. @@
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel