Revision: 6511
          http://sourceforge.net/p/jump-pilot/code/6511
Author:   ma15569
Date:     2020-09-22 10:04:12 +0000 (Tue, 22 Sep 2020)
Log Message:
-----------
Added Rasterize vector plugin

Added Paths:
-----------
    
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java

Added: 
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java
===================================================================
--- 
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java  
                            (rev 0)
+++ 
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java  
    2020-09-22 10:04:12 UTC (rev 6511)
@@ -0,0 +1,314 @@
+
+
+/** 
+ * 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
+ *     
+ */
+
+package org.openjump.core.ui.plugin.tools.generate;
+
+import java.awt.Dimension;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JFileChooser;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+import org.openjump.core.rasterimage.RasterImageLayer;
+import org.openjump.core.rasterimage.algorithms.GenericRasterAlgorithm;
+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;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
+import com.vividsolutions.jump.workbench.model.Category;
+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;
+import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck;
+import com.vividsolutions.jump.workbench.plugin.PlugInContext;
+import com.vividsolutions.jump.workbench.plugin.ThreadedPlugIn;
+import com.vividsolutions.jump.workbench.ui.AttributeTypeFilter;
+import com.vividsolutions.jump.workbench.ui.GUIUtil;
+import com.vividsolutions.jump.workbench.ui.GenericNames;
+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.images.IconLoader;
+
+import de.latlon.deejump.wfs.jump.WFSLayer;
+import it.betastudio.adbtoolbox.libs.FileOperations;
+
+ 
+ 
+public class RasterizePlugIn extends AbstractPlugIn
+        implements ThreadedPlugIn {
+
+               private Layer layer;
+           private JTextField cellYextFiels;
+           private JComboBox<Object> layerComboBox = new JComboBox<Object>();
+          
+           private JLabel cutLayerLabel;
+           private DefaultComboBoxModel<Object> sourceLayerComboBoxModel = new 
DefaultComboBoxModel<Object>();
+           private String selAttribute = null;
+           private String ATTRIBUTE = GenericNames.SELECT_ATTRIBUTE;
+           private String path;
+           double cellValue;
+           private final ImageIcon icon16 = IconLoader
+                   .icon("fugue/folder-horizontal-open_16.png");
+           JTextField jTextField_RasterOut = new JTextField();
+           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 TARGET_LAYER = I18N
+                   .get("ui.plugin.raster.CropWarpPlugIn.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 {
+               MultiInputDialog dialog = new MultiInputDialog(
+                       context.getWorkbenchFrame(), getName(), true);
+               initDialog(dialog, context);
+               dialog.setVisible(true);
+               if (!dialog.wasOKPressed()) {
+                   return false;
+               }
+               getDialogValues(dialog);
+               return true;
+           }
+         
+         
+        @Override
+       public String getName() {
+               return "Rasterize vector layer";
+           }
+
+    @Override
+    public void initialize(PlugInContext context) throws Exception {
+        context.getFeatureInstaller().addMainMenuPlugin(
+                this,
+                new String[]{MenuNames.TOOLS,MenuNames.TOOLS_GENERATE},
+                getName(), false,ICON,
+                createEnableCheck(context.getWorkbenchContext()), -1);
+    }
+
+    public static MultiEnableCheck createEnableCheck(WorkbenchContext 
workbenchContext) {
+        EnableCheckFactory checkFactory = new 
EnableCheckFactory(workbenchContext);
+        return new MultiEnableCheck()
+                .add(checkFactory.createTaskWindowMustBeActiveCheck())
+                .add(checkFactory.createAtLeastNLayersMustExistCheck(1));
+    }
+    
+    
+    private final EnableCheck[] saveCheck = new EnableCheck[] { new 
EnableCheck() {
+        @Override
+        public String check(JComponent component) {
+            return jTextField_RasterOut.getText().isEmpty() ? CHECK
+                    .concat(": ").concat(OUTPUT_FILE) : null;
+        }
+    } };
+  
+       @SuppressWarnings("unchecked")
+       private void initDialog(final MultiInputDialog dialog, PlugInContext 
context) {
+                dialog.addLayerComboBox(LAYER, context.getCandidateLayer(0),
+                       context.getLayerManager());
+
+            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,
+                       val, list, ATTRIBUTE);
+            cellYextFiels =dialog.addDoubleField(CELL_SIZE, 5, 8);
+            sourceLayerComboBoxModel.removeAllElements();
+            layerComboBox.setModel(sourceLayerComboBoxModel);
+            LayerNameRenderer 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() {
+                   @Override
+                   public void actionPerformed(ActionEvent e) {
+                       final List<String> list = 
AttributeTypeFilter.NUMERIC_FILTER
+                               .filter(dialog.getLayer(LAYER));
+                      jcb_attribute.setModel(new DefaultComboBoxModel<>(list
+                               .toArray(new String[0])));
+                   }
+             });
+            layerComboBox.addActionListener(new ActionListener() {
+                   @Override
+                   public void actionPerformed(ActionEvent e) {
+                       final Layerable slayer = (Layerable) layerComboBox
+                               .getSelectedItem();
+                       if (slayer instanceof RasterImageLayer) {
+                               cellYextFiels.setText(""+((RasterImageLayer) 
slayer).getMetadata().getOriginalCellSize());
+                       }
+                   }
+             });
+          
+         final FileNameExtensionFilter filter;
+          filter = new FileNameExtensionFilter("TIF", "tif");
+         dialog.addRow("Save", createOutputFilePanel(filter), saveCheck, null);
+         GUIUtil.centreOnWindow(dialog);
+    }
+
+       Envelope envWanted, fix;
+       
+       private void getCroppedEnvelope(Layer layer) {
+        envWanted = new Envelope();
+        final Layerable slayer = (Layerable) layerComboBox
+                    .getSelectedItem();
+            if (slayer instanceof WMSLayer) {
+                envWanted.expandToInclude(((WMSLayer) slayer).getEnvelope());
+            } else if (slayer instanceof WFSLayer) {
+                envWanted.expandToInclude(((WFSLayer) slayer)
+                        .getFeatureCollectionWrapper().getEnvelope());
+            } else if (slayer instanceof Layer) {
+                envWanted.expandToInclude(((Layer) slayer)
+                        .getFeatureCollectionWrapper().getEnvelope());
+            } else if (slayer instanceof RasterImageLayer) {
+                envWanted.expandToInclude(((RasterImageLayer) slayer)
+                        .getWholeImageEnvelope());
+            }
+          fix = 
envWanted.intersection(layer.getFeatureCollectionWrapper().getEnvelope());
+    }
+       
+       
+       
+        private void getDialogValues(MultiInputDialog dialog) {
+               layer = dialog.getLayer(LAYER);
+               cellValue = dialog.getDouble(CELL_SIZE);
+               selAttribute = dialog.getText(ATTRIBUTE);
+               path = getOutputFilePath();
+               final int i = path.lastIndexOf('.');
+               if (i > 0) {
+                   path = path.substring(0, path.length() - path.length() + i);
+               } 
+          }
+
+        
+          public String getOutputFilePath() {
+               return jTextField_RasterOut.getText();
+           }
+        
+        
+    
+    
+       @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();
+              String catName = StandardCategoryNames.WORKING;
+              try {
+                  catName = ((Category) context.getLayerNamePanel()
+                           .getSelectedCategories().toArray()[0]).getName();
+              } catch (final RuntimeException e1) {
+              }
+             IO.load(outFile, catName);
+            }
+       
+       
+       
+       
+       
+    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("");
+        jButton_Dir.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                File outputPathFile = null;
+                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);
+                chooser.setFileFilter(filter);
+                final int ret = chooser.showOpenDialog(null);
+                if (ret == JFileChooser.APPROVE_OPTION) {
+                    outputPathFile = FileUtil.removeExtensionIfAny(chooser
+                            .getSelectedFile());
+                    jTextField_RasterOut.setText(outputPathFile.getPath()
+                            .concat(".tif"));
+                    FileOperations.lastVisitedFolder = outputPathFile;
+                }
+            }
+        });
+        jLabel3.setText(OUTPUT_FILE);
+        jTextField_RasterOut.setEditable(false);
+        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);
+        return jPanel;
+    }
+       
+}


Property changes on: 
core/trunk/src/org/openjump/core/ui/plugin/tools/generate/RasterizePlugIn.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property


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

Reply via email to