Revision: 6532
          http://sourceforge.net/p/jump-pilot/code/6532
Author:   ma15569
Date:     2020-09-26 05:36:27 +0000 (Sat, 26 Sep 2020)
Log Message:
-----------
Updated RasterizePlugIn

Modified Paths:
--------------
    
core/trunk/src/org/openjump/core/rasterimage/algorithms/RasterizeAlgorithm.java
    
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java

Modified: 
core/trunk/src/org/openjump/core/rasterimage/algorithms/RasterizeAlgorithm.java
===================================================================
--- 
core/trunk/src/org/openjump/core/rasterimage/algorithms/RasterizeAlgorithm.java 
    2020-09-25 07:57:37 UTC (rev 6531)
+++ 
core/trunk/src/org/openjump/core/rasterimage/algorithms/RasterizeAlgorithm.java 
    2020-09-26 05:36:27 UTC (rev 6532)
@@ -6,9 +6,13 @@
 import java.awt.image.WritableRaster;
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.openjump.core.rasterimage.RasterImageIO;
 import org.openjump.core.rasterimage.sextante.rasterWrappers.GridCell;
@@ -22,6 +26,9 @@
 import com.vividsolutions.jts.geom.GeometryFactory;
 import com.vividsolutions.jts.geom.LinearRing;
 import com.vividsolutions.jts.geom.Polygon;
+import com.vividsolutions.jts.operation.union.UnaryUnionOp;
+import com.vividsolutions.jump.feature.AttributeType;
+import com.vividsolutions.jump.feature.BasicFeature;
 import com.vividsolutions.jump.feature.Feature;
 import com.vividsolutions.jump.feature.FeatureCollection;
 import com.vividsolutions.jump.feature.FeatureDataset;
@@ -39,7 +46,7 @@
 
 public class RasterizeAlgorithm {
 
-       private static Double NO_DATA;
+       private static Double noData= -99999.0D;
        private static Double cellSize;
        private static double dValue;
        private static int m_iNX;
@@ -65,8 +72,8 @@
 
            */
           
-          public static void Rasterize_AdbToolbox(File file, Envelope 
limitEnvelope, FeatureCollection fCollection, String attributeName, double 
CellSize, double NoData) throws IOException  {
-                NO_DATA=NoData;
+          public static void RasterizeAdbToolbox(File file, Envelope 
limitEnvelope, FeatureCollection fCollection, String attributeName, double 
CellSize) throws IOException  {
+                        
                 cellSize=CellSize;
                 m_Extent=  new GridExtent();
                   m_Extent.setCellSize(CellSize, CellSize);
@@ -79,7 +86,7 @@
                          
              for (int x = 0; x < m_iNX; x++){
                        for (int y = 0; y < m_iNY; y++){
-                               valori[x][y]=NoData;
+                               valori[x][y]=noData;
                                                 
                                }
                        }
@@ -118,11 +125,7 @@
              FeatureDataset inputFC = new FeatureDataset(inputC, schema);
              for (Iterator<Feature> it = inputFC.iterator() ; it.hasNext() ; ) 
{
                    Feature f = it.next();
-                   try {
-                           dValue = 
Double.parseDouble(f.getAttribute(attributeName).toString());
-                          } catch (Exception e) {
-                               dValue = NoData;
-                          }
+                   dValue = 
Double.parseDouble(f.getAttribute(attributeName).toString());
                    final Geometry geom = f.getGeometry();
              
                 if (geom.intersects(extent)) {     
@@ -218,7 +221,7 @@
               
               RasterImageIO rasterImageIO = new RasterImageIO();
              rasterImageIO.writeImage(file, raster, limitEnvelope,
-                       rasterImageIO.new CellSizeXY(CellSize, CellSize), 
NoData);
+                       rasterImageIO.new CellSizeXY(CellSize, CellSize), 
noData);
              
           }
  
@@ -246,36 +249,35 @@
            * @param double NoData
            * @throws IOException
            */
-          public static void Rasterize_Sextante(File file, Envelope 
limitEnvelope, FeatureCollection fCollection, 
-                          String attributeName, double CellSize, double 
NoData) throws IOException  {
-                  NO_DATA=NoData;
+          public static void RasterizeSextante(File file, Envelope 
limitEnvelope, FeatureCollection fCollection, 
+                          String attributeName, double CellSize ) throws 
IOException  {
+                  
                   cellSize=CellSize;
                   m_Extent=  new GridExtent();
                   m_Extent.setCellSize(CellSize, CellSize);
-                  m_Extent.setXRange(limitEnvelope.getMinX(), 
limitEnvelope.getMaxX());
-                  m_Extent.setYRange(limitEnvelope.getMinY(), 
limitEnvelope.getMaxY()); 
-        
-                 m_iNX = m_Extent.getNX();
-                m_iNY = m_Extent.getNY();
-                 double[][] valori= new double[m_iNX][m_iNY];
+                  double minX = limitEnvelope.getMinX();
+                  double minY = limitEnvelope.getMinY();
+                  double maxX = limitEnvelope.getMaxX();
+                  double maxY = limitEnvelope.getMaxY();
+                  m_Extent.setXRange(minX, maxX);//limitEnvelope.getMaxX());
+                  m_Extent.setYRange(minY, maxY);//limitEnvelope.getMaxY()); 
+                  m_iNX = m_Extent.getNX()+1;
+              m_iNY = m_Extent.getNY()+1; 
+             double[][] valori= new double[m_iNX][m_iNY];
                  
                  for (int x = 0; x < m_iNX; x++){
                                for (int y = 0; y < m_iNY; y++){
-                                       valori[x][y]=NoData;
+                                       valori[x][y]=noData;
                                         
                                }
                        }
-                 
                  raster = GridRasterWrapper.matrixToRaster(valori);
-
-                   
-               
-             final Coordinate[] coords = new Coordinate[5];
-             coords[0] = new Coordinate(limitEnvelope.getMinX(), 
limitEnvelope.getMinY());
-             coords[1] = new Coordinate(limitEnvelope.getMinX(), 
limitEnvelope.getMaxY());
-             coords[2] = new 
Coordinate(limitEnvelope.getMaxX(),limitEnvelope.getMaxY());
-             coords[3] = new 
Coordinate(limitEnvelope.getMaxX(),limitEnvelope.getMinY());
-             coords[4] = new Coordinate(limitEnvelope.getMinX(), 
limitEnvelope.getMinY());
+                 final Coordinate[] coords = new Coordinate[5];
+             coords[0] = new Coordinate(minX, minY);
+             coords[1] = new Coordinate(minX, maxY);
+             coords[2] = new Coordinate(maxX, maxY);
+             coords[3] = new Coordinate(maxX, minY);
+             coords[4] = new Coordinate(minX, minY);
               
              
              final GeometryFactory gf = new GeometryFactory();
@@ -288,7 +290,12 @@
              FeatureDataset inputFC = new FeatureDataset(inputC, schema);
              for (Iterator<Feature> it = inputFC.iterator() ; it.hasNext() ; ) 
{
                    Feature f = it.next();
+                   try {
                    dValue = 
Double.parseDouble(f.getAttribute(attributeName).toString());
+                  } catch (Exception e) {
+                          dValue = noData;
+                  }
+                 
                    final Geometry geometry = f.getGeometry();
                    
                    
@@ -297,12 +304,11 @@
                        doGeometry(geometry);
                    }
             }
-           //   Raster raster = sRasterLayer.getRaster();
-              
-              RasterImageIO rasterImageIO = new RasterImageIO();
-             rasterImageIO.writeImage(file, raster, limitEnvelope,
-                       rasterImageIO.new CellSizeXY(CellSize, CellSize), 
NoData);
+             RasterImageIO rasterImageIO = new RasterImageIO();
+             rasterImageIO.writeImage(file, raster, 
extent.getEnvelopeInternal(),
+                       rasterImageIO.new CellSizeXY(CellSize, CellSize),noData 
);
 
+                 
           }
 
 
@@ -385,12 +391,12 @@
                          final double dPrevValue =raster.getSampleDouble(x, 
y,0);// sRasterLayer.getCellValueAsDouble(x, y);
                          if (bIsHole) {
                             if (dPrevValue == dValue) {
-                                raster.setSample(x, y, 0, NO_DATA);
+                                raster.setSample(x, y, 0, noData);
                                 
                             }
                          }
                          else {
-                            if (dPrevValue == NO_DATA) {
+                            if (dPrevValue == noData) {
                                 raster.setSample(x, y, 0, dValue);
                                 
                             }
@@ -530,7 +536,83 @@
                          }
                      }
        
-
+                public static FeatureCollection 
unionByAttributeValue(FeatureCollection featureCollection, String value) throws 
Exception {
+                         FeatureDataset outputFC = new 
FeatureDataset(featureCollection.getFeatureSchema());
+                       
+                           Map<Object, FeatureCollection> map = new 
HashMap<Object, FeatureCollection>();
+                           Iterator<Feature> itFeat= 
featureCollection.getFeatures().iterator();
+                            while (itFeat.hasNext()) {
+                                Feature feature = itFeat.next();
+                                Object key = feature.getAttribute(value);
+                            if (!map.containsKey(key)) {
+                                FeatureCollection fd = new 
FeatureDataset(featureCollection.getFeatureSchema());
+                                fd.add(feature);
+                                map.put(key, fd);
+                            }  else {
+                                map.get(key).add(feature);
+                            } 
+                            }
+               
+                       Iterator<Object>  iter = map.keySet().iterator();
+                       while (iter.hasNext()) {
+                                  Object key = iter.next();
+                               FeatureCollection fca = map.get(key);
+                               if (fca.size() > 0) {
+                                 Feature feature = union(fca);
+                                 feature.setAttribute(value, key);
+                                 outputFC.add(feature);
+                               }
+                       }
+                       
+                     
+                       return  outputFC;
+                    }
+                
+                
+                
+                
+                    private static Feature union(FeatureCollection fc) {
+                        GeometryFactory factory = new  GeometryFactory();
+                        Collection<Geometry> geometries  = new 
ArrayList<Geometry>();
+                        for (Feature f :  fc.getFeatures()) {
+                            Geometry g = f.getGeometry();
+                            geometries.add(g);
+                        }
+                        Geometry unioned = UnaryUnionOp.union(geometries);
+                         FeatureSchema schema = fc.getFeatureSchema();
+                        Feature feature = new BasicFeature(schema);
+                        if (geometries.size()==0) {
+                            
feature.setGeometry(factory.createGeometryCollection(new Geometry[]{}));
+                        }
+                        else {
+                            feature.setGeometry(unioned);
+                        }
+                        return feature;
+                    }
+                   
+                     
+                    
+         public static FeatureCollection 
getFeaturesOverlappingEnvelope(FeatureCollection featureCollection, 
+                               Envelope env, String attributeName) throws 
Exception {
+                               Collection<Feature> inputC = 
featureCollection.getFeatures();
+                       FeatureSchema schema1 = 
featureCollection.getFeatureSchema();
+                       FeatureDataset inputFC = new FeatureDataset(inputC, 
schema1);    
+                 
+                 
+                        FeatureSchema schema = new FeatureSchema();
+                        schema.addAttribute("GEOMETRY", 
AttributeType.GEOMETRY);
+                        schema.addAttribute(attributeName, 
AttributeType.DOUBLE);
+                        FeatureDataset outputFC = new FeatureDataset(schema);
+                            GeometryFactory factory = new GeometryFactory();
+                        Geometry geom = factory.toGeometry(env);
+                        
+                        for (Feature f : inputFC.getFeatures()) {
+                            Geometry g = f.getGeometry();
+                            if (!geom.disjoint(g)){
+                          outputFC.add(f);}
+                        }
+                        return outputFC;
+                    }
        
 }
 

Modified: 
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java
===================================================================
--- 
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java  
    2020-09-25 07:57:37 UTC (rev 6531)
+++ 
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java  
    2020-09-26 05:36:27 UTC (rev 6532)
@@ -4,14 +4,9 @@
  * created:            21. Sept.2020
  * 
  * @author Giuseppe Aruta
- * @TODO clip the vectors to the envelope before
- * validating them. THis can make the process faster
  * 
  * 
  * @description: A tool to rasterize a vector layer.
- * - make valid the layer
- * - union by the value selected for rasterizing
- * - rasterize the vectors limiting into an envelope
  *     
  */
 
@@ -19,11 +14,12 @@
 
 import java.awt.Dimension;
 import java.awt.GridBagLayout;
+import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.geom.NoninvertibleTransformException;
 import java.io.File;
-import java.util.Collection;
-import java.util.Iterator;
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.swing.DefaultComboBoxModel;
@@ -30,6 +26,7 @@
 import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
+import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JComponent;
 import javax.swing.JFileChooser;
@@ -37,19 +34,18 @@
 import javax.swing.JPanel;
 import javax.swing.JTextField;
 
+import org.openjump.core.rasterimage.ImageAndMetadata;
+import org.openjump.core.rasterimage.RasterImageIO;
 import org.openjump.core.rasterimage.RasterImageLayer;
-import org.openjump.core.rasterimage.algorithms.GenericRasterAlgorithm;
+import org.openjump.core.rasterimage.Resolution;
+import org.openjump.core.rasterimage.TiffTags.TiffReadingException;
 import org.openjump.core.rasterimage.algorithms.RasterizeAlgorithm;
 import org.openjump.core.ui.io.file.FileNameExtensionFilter;
-import org.openjump.sigle.utilities.geom.FeatureCollectionUtil;
 import org.saig.core.gui.swing.sldeditor.util.FormUtils;
 
 import com.vividsolutions.jts.geom.Envelope;
 import com.vividsolutions.jump.I18N;
-import com.vividsolutions.jump.feature.Feature;
 import com.vividsolutions.jump.feature.FeatureCollection;
-import com.vividsolutions.jump.feature.FeatureDataset;
-import com.vividsolutions.jump.feature.FeatureSchema;
 import com.vividsolutions.jump.task.TaskMonitor;
 import com.vividsolutions.jump.util.FileUtil;
 import com.vividsolutions.jump.workbench.JUMPWorkbench;
@@ -58,7 +54,6 @@
 import com.vividsolutions.jump.workbench.model.Layer;
 import com.vividsolutions.jump.workbench.model.Layerable;
 import com.vividsolutions.jump.workbench.model.StandardCategoryNames;
-import com.vividsolutions.jump.workbench.model.WMSLayer;
 import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn;
 import com.vividsolutions.jump.workbench.plugin.EnableCheck;
 import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory;
@@ -71,6 +66,7 @@
 import com.vividsolutions.jump.workbench.ui.LayerNameRenderer;
 import com.vividsolutions.jump.workbench.ui.MenuNames;
 import com.vividsolutions.jump.workbench.ui.MultiInputDialog;
+import com.vividsolutions.jump.workbench.ui.Viewport;
 import com.vividsolutions.jump.workbench.ui.images.IconLoader;
 
 import de.latlon.deejump.wfs.jump.WFSLayer;
@@ -81,13 +77,15 @@
 public class RasterizePlugIn extends AbstractPlugIn
         implements ThreadedPlugIn {
 
-               private Layer layer;
+               private Layer sourceLayer;
            private JTextField cellYextFiels;
-           private JComboBox<Object> layerComboBox = new JComboBox<Object>();
+           private JCheckBox externalLayerCheck;
+           private JComboBox<Layerable> layerableComboBox;
+           private JComboBox<Layer>   selectLayerComboBox;
+            private JComboBox<String> jcb_attribute;
+            private LayerNameRenderer layerListCellRenderer = new 
LayerNameRenderer();
           
-           private JLabel cutLayerLabel;
-           private DefaultComboBoxModel<Object> sourceLayerComboBoxModel = new 
DefaultComboBoxModel<Object>();
-           private String selAttribute = null;
+         private static String selAttribute = null;
            private String ATTRIBUTE = GenericNames.SELECT_ATTRIBUTE;
            private String path;
            double cellValue;
@@ -97,14 +95,21 @@
            private final String OUTPUT_FILE = I18N
                    .get("driver.DriverManager.file-to-save");
            private final String CHECK = 
I18N.get("ui.GenericNames.chech-field");
-           private final static String LAYER             = 
I18N.get("ui.plugin.analysis.DissolvePlugIn.source-layer");
+           private final static String SOURCE_LAYER= 
I18N.get("ui.GenericNames.Source-Layer");
            private final static String TARGET_LAYER = I18N
-                   .get("ui.plugin.raster.CropWarpPlugIn.target-layer");
+                   .get("ui.GenericNames.Target-Layer");
            private final static String  CELL_SIZE = I18N
                    
.get("org.openjump.core.ui.plugin.raster.RasterImageLayerPropertiesPlugIn.dimension_cell");
            public static final Icon ICON = IconLoader.icon("rasterize.png");   
-         @Override
-        public boolean execute(PlugInContext context) throws Exception {
+           
+           private final static String RASTERIZE_VECTOR = "Rasterize vector 
layer";
+           private final static String RASTERIZING_VECTOR = "Rasterizing 
vector layer";
+           private final static String PREPARING_VECTOR = "Preparing vector 
layer";
+           private final static String USE_EXTERNAL_EXTENT = "Use extent for 
layer";
+           private final static String DESCRIPTION = "Rasterize a vector layer 
selecting an attribute value and defining a cell size. Optionally the extent of 
rasterized area can be defined from another vector or image layer";
+        
+           @Override
+          public boolean execute(PlugInContext context) throws Exception {
                MultiInputDialog dialog = new MultiInputDialog(
                        context.getWorkbenchFrame(), getName(), true);
                initDialog(dialog, context);
@@ -119,7 +124,7 @@
          
         @Override
        public String getName() {
-               return "Rasterize vector layer";
+               return RASTERIZE_VECTOR;
            }
 
     @Override
@@ -147,48 +152,61 @@
         }
     } };
   
+ 
        @SuppressWarnings("unchecked")
        private void initDialog(final MultiInputDialog dialog, PlugInContext 
context) {
-                dialog.addLayerComboBox(LAYER, context.getCandidateLayer(0),
+                dialog.setSideBarDescription(DESCRIPTION);
+               selectLayerComboBox= dialog.addLayerComboBox(SOURCE_LAYER, 
context.getCandidateLayer(0),
                        context.getLayerManager());
-
+               selectLayerComboBox.setSize(240,
+                                selectLayerComboBox.getPreferredSize().height);
             final List<String> list = AttributeTypeFilter.NUMERIC_FILTER
                     .filter(context.getCandidateLayer(0));
             final String val = list.size() > 0 ? list.get(0) : null;
-            final JComboBox<String> jcb_attribute = 
dialog.addComboBox(ATTRIBUTE,
+            jcb_attribute = dialog.addComboBox(ATTRIBUTE,
                        val, list, ATTRIBUTE);
-            cellYextFiels =dialog.addDoubleField(CELL_SIZE, 5, 8);
-            sourceLayerComboBoxModel.removeAllElements();
-            layerComboBox.setModel(sourceLayerComboBoxModel);
-            LayerNameRenderer layerListCellRenderer = new LayerNameRenderer();
+            
+            cellYextFiels =dialog.addDoubleField(CELL_SIZE, 5, 10);
+            cellYextFiels.setSize(jcb_attribute.getWidth(),
+                        jcb_attribute.getPreferredSize().height);
+            externalLayerCheck =dialog.addCheckBox(USE_EXTERNAL_EXTENT, false);
+            
+            List<Layerable> layerables = new ArrayList<>();
+            for (Layerable layerable : JUMPWorkbench.getInstance()
+                       
.getContext().getLayerManager().getLayerables(Layerable.class)) {
+                if (layerable instanceof Layer  || layerable instanceof 
RasterImageLayer) {
+                        layerables.add(layerable);
+                } 
+                
+            } 
+            layerableComboBox=  dialog.addLayerableComboBox(TARGET_LAYER, 
context.getCandidateLayer(0),
+                        null, layerables);
+            layerListCellRenderer = new LayerNameRenderer();
             layerListCellRenderer.setCheckBoxVisible(false);
             layerListCellRenderer.setProgressIconLabelVisible(false);
-            layerComboBox.setRenderer(layerListCellRenderer);
-            final List<Layerable> layerables = JUMPWorkbench.getInstance()
-                       
.getContext().getLayerManager().getLayerables(Layerable.class);
-            for (Iterator<Layerable> i = layerables.iterator(); i.hasNext();) {
-                       Layerable layer = i.next();
-                sourceLayerComboBoxModel.addElement(layer);
-            }
-            layerComboBox.setSelectedItem(layerables.get(0));
-            layerComboBox.setSize(200, 
layerComboBox.getPreferredSize().height);
-            cutLayerLabel = new JLabel(TARGET_LAYER);
-            JPanel pan = new JPanel(new GridBagLayout());
-            FormUtils.addRowInGBL(pan, 0, 0, cutLayerLabel, layerComboBox);
-            dialog.addRow("base", pan, null, null);
-            dialog.getComboBox(LAYER).addActionListener(new ActionListener() {
+            layerableComboBox.setRenderer(layerListCellRenderer);
+            layerableComboBox.setEnabled(false);
+            layerableComboBox.setSize(240,
+                        layerableComboBox.getPreferredSize().height);
+            selectLayerComboBox.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        final List<String> list = 
AttributeTypeFilter.NUMERIC_FILTER
-                               .filter(dialog.getLayer(LAYER));
+                               .filter(dialog.getLayer(SOURCE_LAYER));
                       jcb_attribute.setModel(new DefaultComboBoxModel<>(list
                                .toArray(new String[0])));
                    }
              });
-            layerComboBox.addActionListener(new ActionListener() {
+            externalLayerCheck.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
-                       final Layerable slayer = (Layerable) layerComboBox
+                       
layerableComboBox.setEnabled(externalLayerCheck.isSelected());
+                                           }
+             });
+            layerableComboBox.addActionListener(new ActionListener() {
+                   @Override
+                   public void actionPerformed(ActionEvent e) {
+                       final Layerable slayer = (Layerable) layerableComboBox
                                .getSelectedItem();
                        if (slayer instanceof RasterImageLayer) {
                                cellYextFiels.setText(""+((RasterImageLayer) 
slayer).getMetadata().getOriginalCellSize());
@@ -198,7 +216,9 @@
           
          final FileNameExtensionFilter filter;
           filter = new FileNameExtensionFilter("TIF", "tif");
-         dialog.addRow("Save", createOutputFilePanel(filter), saveCheck, null);
+          dialog.addRow("Save", new JLabel(OUTPUT_FILE + ":"),
+                  createOutputFilePanel(filter), saveCheck, null);
+        // dialog.addRow("Save", createOutputFilePanel(filter), saveCheck, 
null);
          GUIUtil.centreOnWindow(dialog);
     }
 
@@ -205,12 +225,11 @@
        Envelope envWanted, fix;
        
        private void getCroppedEnvelope(Layer layer) {
+               if (externalLayerCheck.isSelected()) {
         envWanted = new Envelope();
-        final Layerable slayer = (Layerable) layerComboBox
+        final Layerable slayer = (Layerable) layerableComboBox
                     .getSelectedItem();
-            if (slayer instanceof WMSLayer) {
-                envWanted.expandToInclude(((WMSLayer) slayer).getEnvelope());
-            } else if (slayer instanceof WFSLayer) {
+           if (slayer instanceof WFSLayer) {
                 envWanted.expandToInclude(((WFSLayer) slayer)
                         .getFeatureCollectionWrapper().getEnvelope());
             } else if (slayer instanceof Layer) {
@@ -221,12 +240,16 @@
                         .getWholeImageEnvelope());
             }
           fix = 
envWanted.intersection(layer.getFeatureCollectionWrapper().getEnvelope());
-    }
+               }
+               else { 
+                       
fix=sourceLayer.getFeatureCollectionWrapper().getEnvelope();
+               }
+       }
        
        
        
         private void getDialogValues(MultiInputDialog dialog) {
-               layer = dialog.getLayer(LAYER);
+                   sourceLayer = dialog.getLayer(SOURCE_LAYER);
                cellValue = dialog.getDouble(CELL_SIZE);
                selAttribute = dialog.getText(ATTRIBUTE);
                path = getOutputFilePath();
@@ -234,6 +257,7 @@
                if (i > 0) {
                    path = path.substring(0, path.length() - path.length() + i);
                } 
+               getCroppedEnvelope(sourceLayer);
           }
 
         
@@ -246,20 +270,17 @@
     
        @Override
        public void run(TaskMonitor monitor, PlugInContext context) throws 
Exception {
+               
                   monitor.allowCancellationRequests();
-           getCroppedEnvelope(layer);
-              final File outFile = FileUtil.addExtensionIfNone(new File(path), 
"tif");  
-              FeatureCollection fCollection = 
layer.getFeatureCollectionWrapper();
-              Collection<Feature> inputC = fCollection.getFeatures();
-              FeatureSchema schema = fCollection.getFeatureSchema();
-                  FeatureDataset inputFC = new FeatureDataset(inputC, schema);
-              
monitor.report(I18N.get("org.openjump.core.ui.plugin.tools.MakeValidPlugIn")+"...");
-              FeatureCollectionUtil.validFeatureCollection(inputFC) ;
-              
monitor.report(I18N.get("ui.plugin.analysis.DissolvePlugIn")+"...");
-              FeatureCollectionUtil.unionByAttributeValue(inputFC, 
selAttribute);
-              monitor.report("Rasterize...");
-              RasterizeAlgorithm.Rasterize_Sextante(outFile, fix, inputFC, 
selAttribute, cellValue, -99999.0D);
-                  GenericRasterAlgorithm IO = new GenericRasterAlgorithm();
+                  FeatureCollection fc = 
sourceLayer.getFeatureCollectionWrapper();
+                  final File outFile = FileUtil.addExtensionIfNone(new 
File(path), "tif");  
+              monitor.report(PREPARING_VECTOR+"...");
+              FeatureCollection fc2 = 
RasterizeAlgorithm.getFeaturesOverlappingEnvelope(fc, fix, selAttribute);
+              FeatureCollection fc3 = 
RasterizeAlgorithm.unionByAttributeValue(fc2, selAttribute);
+              monitor.report(RASTERIZING_VECTOR+"...");
+              RasterizeAlgorithm.RasterizeSextante(outFile, fix, fc3, 
selAttribute, cellValue);
+              
+               
               String catName = StandardCategoryNames.WORKING;
               try {
                   catName = ((Category) context.getLayerNamePanel()
@@ -266,17 +287,13 @@
                            .getSelectedCategories().toArray()[0]).getName();
               } catch (final RuntimeException e1) {
               }
-             IO.load(outFile, catName);
+              load(outFile, context, catName);
+           
             }
        
-       
-       
-       
-       
-    public JPanel createOutputFilePanel(FileNameExtensionFilter filter) {
+       public JPanel createOutputFilePanel(FileNameExtensionFilter filter) {
         JPanel jPanel = new JPanel(new GridBagLayout());
         jPanel = new javax.swing.JPanel();
-        final JLabel jLabel3 = new javax.swing.JLabel();
         jTextField_RasterOut = new JTextField();
         final JButton jButton_Dir = new JButton();
         jTextField_RasterOut.setText("");
@@ -287,7 +304,6 @@
                 final JFileChooser chooser = new 
GUIUtil.FileChooserWithOverwritePrompting();
                 chooser.setDialogTitle(getName());
                 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
-
                 chooser.setSelectedFile(FileOperations.lastVisitedFolder);
                 chooser.setDialogType(JFileChooser.SAVE_DIALOG);
                 GUIUtil.removeChoosableFileFilters(chooser);
@@ -302,13 +318,43 @@
                 }
             }
         });
-        jLabel3.setText(OUTPUT_FILE);
-        jTextField_RasterOut.setEditable(false);
+        jTextField_RasterOut.setEditable(true);
         jButton_Dir.setIcon(icon16);
-        jTextField_RasterOut.setPreferredSize(new Dimension(250, 20));
-        FormUtils.addRowInGBL(jPanel, 3, 0, OUTPUT_FILE, jTextField_RasterOut);
-        FormUtils.addRowInGBL(jPanel, 3, 2, jButton_Dir);
+        jTextField_RasterOut.setPreferredSize(new Dimension(200, 20));
+        
+       FormUtils.addRowInGBL(jPanel, 3, 0, jTextField_RasterOut);
+       FormUtils.addRowInGBL(jPanel, 3, 1, jButton_Dir, true, true);
         return jPanel;
     }
-       
+    
+        public static void load(File file, PlugInContext context, String 
category)
+                   throws NoninvertibleTransformException, 
TiffReadingException,
+                   Exception {
+
+               RasterImageIO rasterImageIO = new RasterImageIO();
+               Viewport viewport = 
context.getWorkbenchContext().getLayerViewPanel()
+                       .getViewport();
+               Resolution requestedRes = RasterImageIO
+                       .calcRequestedResolution(viewport);
+               ImageAndMetadata imageAndMetadata = rasterImageIO.loadImage(
+                       context.getWorkbenchContext(), file.getAbsolutePath(), 
null,
+                       viewport.getEnvelopeInModelCoordinates(), requestedRes);
+                Point point = 
RasterImageIO.getImageDimensions(file.getAbsolutePath());
+              Envelope env = 
RasterImageIO.getGeoReferencing(file.getAbsolutePath(),
+                     true, point);
+            
+               RasterImageLayer ril = new RasterImageLayer(file.getName(), 
context
+                       .getWorkbenchContext().getLayerManager(),
+                       file.getAbsolutePath(), imageAndMetadata.getImage(), 
env);
+               // String catName = StandardCategoryNames.RESULT;
+               try {
+                   category = ((Category) context.getLayerNamePanel()
+                           .getSelectedCategories().toArray()[0]).getName();
+               } catch (RuntimeException e1) {
+               }
+               context.getLayerManager().addLayerable(category, ril);
+               ril.setName(selAttribute);
+           }
+   
+    
 }



_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to