Ignore:
Timestamp:
2007-11-05T02:51:55+01:00 (17 years ago)
Author:
frederik
Message:

added very simple capability of loading and saving wms layers to WMSPlugin; requires at least JOSM v456 to work

Location:
applications/editors/josm/plugins/wmsplugin/src/wmsplugin
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/DownloadWMSTask.java

    r5114 r5319  
    2121       
    2222        public DownloadWMSTask(String name, String wmsurl) {
    23                
    2423                super(tr("Downloading " + name));
    25                
     24
    2625                // simply check if we already have a layer created. if not, create; if yes, reuse.
    27                
    2826                if (wmsLayer == null) {
    29                        
    3027                        if (wmsurl.matches("(?i).*layers=npeoocmap.*") || wmsurl.matches("(?i).*layers=npe.*") ){
    3128                                //then we use the OSGBLayer
    3229                                this.wmsLayer= new OSGBLayer(name, wmsurl);
    33                         } else {                       
     30                        } else {
    3431                                this.wmsLayer = new WMSLayer(name, wmsurl);
    35                                
    3632                        }
    3733                }
     34       
    3835        }
    3936       
     
    5047                layerAdded = false;
    5148                for (Iterator it = Main.map.mapView.getAllLayers().iterator(); it.hasNext(); ) {
    52         Object  element = it.next();
    53        
    54         if (element.equals(wmsLayer)) layerAdded = true;
    55        
     49                        Object  element = it.next();
     50                        if (element.equals(wmsLayer)) layerAdded = true;
    5651                }
    57                  
    5852                               
    5953                if ((wmsLayer != null) && (!layerAdded))
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSDownloadAction.java

    r2121 r5319  
    2121                // download task here every time, then different layers are displayed even
    2222                // for images from the same server, and we don't want that.
    23                
     23                System.out.println(info.url);
    2424                if (info.downloadTask == null)
    2525                        info.downloadTask = new DownloadWMSTask(info.name, info.url);
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSImage.java

    r5245 r5319  
    44import java.awt.Image;
    55import java.awt.Point;
     6import java.awt.image.BufferedImage;
     7import java.awt.image.RenderedImage;
     8import java.io.Externalizable;
    69import java.io.IOException;
    710import java.io.InputStream;
     11import java.io.ObjectInput;
     12import java.io.ObjectInputStream;
     13import java.io.ObjectOutput;
     14import java.io.ObjectOutputStream;
     15import java.io.OutputStream;
     16import java.io.Serializable;
    817import java.net.MalformedURLException;
    918import java.net.URL;
    1019
    1120import javax.imageio.ImageIO;
     21import javax.swing.ImageIcon;
    1222
    1323import org.openstreetmap.josm.Main;
     
    1727import org.openstreetmap.josm.io.ProgressInputStream;
    1828
    19 public class WMSImage
     29public class WMSImage implements Serializable
    2030{
    2131        String constURL;
    22         protected Image theImage;
     32        protected BufferedImage theImage;
    2333        protected double grabbedScale;
    2434        protected EastNorth topLeft, bottomRight;
     
    2939                this.constURL = constURL;
    3040        }
     41       
     42        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
     43                constURL = (String) in.readObject();
     44                topLeft = (EastNorth) in.readObject();
     45                bottomRight = (EastNorth) in.readObject();
     46                dEast = in.readDouble();
     47                dNorth = in.readDouble();
     48                grabbedScale = in.readDouble();
     49                theImage = (BufferedImage) ImageIO.read(ImageIO.createImageInputStream(in));
     50        }
     51       
     52        private void writeObject(ObjectOutputStream out) throws IOException {
     53                System.out.println("writ" + theImage.getWidth(null));
     54                out.writeObject(constURL);
     55                out.writeObject(topLeft);
     56                out.writeObject(bottomRight);
     57                out.writeDouble(dEast);
     58                out.writeDouble(dNorth);
     59                out.writeDouble(grabbedScale);
     60                ImageIO.write(theImage, "png", ImageIO.createImageOutputStream(out));
     61        }
    3162
    3263        public void grab(NavigatableComponent nc) throws IOException
    3364        {
    34 
    35                 EastNorth topLeft  = nc.getEastNorth(0,0);
    36                 grabbedScale =  nc.getScale();  // scale is enPerPixel
     65                EastNorth topLeft = nc.getEastNorth(0,0);
     66                grabbedScale = nc.getScale();  // scale is enPerPixel
    3767
    3868                this.topLeft = topLeft;
     
    101131                InputStream is = new ProgressInputStream(
    102132                        url.openConnection(), Main.pleaseWaitDlg);
    103                 theImage = ImageIO.read(is) ;
     133                theImage = ImageIO.read(is);
    104134                is.close();
    105135                Main.map.repaint();
     
    126156        public void paint(Graphics g,NavigatableComponent nc)
    127157        {
    128                 if(theImage!=null)
     158                if (theImage != null)
    129159                {
    130160                        double zoomInFactor = grabbedScale / nc.getScale();
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java

    r2121 r5319  
    66import java.awt.Graphics;
    77import java.awt.Toolkit;
     8import java.awt.event.ActionEvent;
     9import java.io.File;
     10import java.io.FileInputStream;
     11import java.io.FileOutputStream;
    812import java.io.IOException;
     13import java.io.ObjectInputStream;
     14import java.io.ObjectOutputStream;
    915import java.util.ArrayList;
    1016
     17import javax.swing.AbstractAction;
    1118import javax.swing.Icon;
    1219import javax.swing.ImageIcon;
     20import javax.swing.JFileChooser;
    1321import javax.swing.JMenuItem;
     22import javax.swing.JOptionPane;
    1423import javax.swing.JSeparator;
     24import javax.swing.filechooser.FileFilter;
    1525
    1626import org.openstreetmap.josm.Main;
     27import org.openstreetmap.josm.actions.ExtensionFileFilter;
     28import org.openstreetmap.josm.actions.SaveActionBase;
    1729import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    1830import org.openstreetmap.josm.data.projection.Projection;
     
    2133import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
    2234import org.openstreetmap.josm.gui.layer.Layer;
     35import org.openstreetmap.josm.tools.ImageProvider;
    2336import org.openstreetmap.josm.data.coor.EastNorth;
    2437
     
    2942public class WMSLayer extends Layer {
    3043
    31         protected static Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(WMSPlugin.class.getResource("/images/wms.png")));
    32 
     44        protected static Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(WMSPlugin.class.getResource("/images/wms_small.png")));
    3345        protected final ArrayList<WMSImage> wmsImages;
    34 
    3546        protected final String url;
    36 
     47        protected final int serializeFormatVersion = 1;
     48 
     49        public WMSLayer() {
     50                super("Blank Layer");
     51                wmsImages = new ArrayList<WMSImage>();
     52                url = "";
     53        }
    3754        public WMSLayer(String name, String url) {
    3855                super(name);
     
    100117                return new Component[]{
    101118                                new JMenuItem(new LayerListDialog.ShowHideLayerAction(this)),
    102                                 new JMenuItem(new LayerListDialog.DeleteLayerAction(this)),
     119                                new JMenuItem(new LayerListDialog.DeleteLayerAction(this)),                             
     120                                new JMenuItem(new LoadWmsAction()),
     121                                new JMenuItem(new SaveWmsAction()),
    103122                                new JSeparator(),
    104123                                new JMenuItem(new LayerListPopup.InfoAction(this))};
     
    117136        //to enable the removal of the images when the layer is removed.
    118137        public void destroy() {
    119        
    120138                wmsImages.clear();
     139        }
     140       
     141        public class SaveWmsAction extends AbstractAction {
     142                public SaveWmsAction() {
     143                        super(tr("Save WMS layer to file"), ImageProvider.get("save"));
     144                }
     145                public void actionPerformed(ActionEvent ev) {
     146                        File f = openFileDialog(false);
     147                        try {
     148                                FileOutputStream fos = new FileOutputStream(f);
     149                                ObjectOutputStream oos = new ObjectOutputStream(fos);
     150                                oos.writeInt(serializeFormatVersion);
     151                                oos.writeInt(wmsImages.size());
     152                                for (WMSImage w : wmsImages) {
     153                                        oos.writeObject(w);
     154                                }
     155                                oos.close();
     156                                fos.close();
     157                        } catch (Exception ex) {
     158                                ex.printStackTrace(System.out);
     159                        }
     160                }
     161        }
     162       
     163        public class LoadWmsAction extends AbstractAction {
     164                public LoadWmsAction() {
     165                        super(tr("Load WMS layer from file"), ImageProvider.get("load"));
     166                }
     167                public void actionPerformed(ActionEvent ev) {
     168                        File f = openFileDialog(true);
     169                        try {
     170                                FileInputStream fis = new FileInputStream(f);
     171                                ObjectInputStream ois = new ObjectInputStream(fis);
     172                                int sfv = ois.readInt();
     173                                if (sfv != serializeFormatVersion) {
     174                                        JOptionPane.showMessageDialog(Main.parent,
     175                                                tr("Unsupported WMS file version; found {0}, expected {1}", sfv, serializeFormatVersion),
     176                                                tr("File Format Error"),
     177                                                JOptionPane.ERROR_MESSAGE);
     178                                        return;
     179                                }
     180                                int numImg = ois.readInt();
     181                                for (int i=0; i< numImg; i++) {
     182                                        WMSImage img = (WMSImage) ois.readObject();
     183                                        wmsImages.add(img);
     184                                }
     185                                ois.close();
     186                                fis.close();
     187                        } catch (Exception ex) {
     188                                // FIXME be more specific
     189                                ex.printStackTrace(System.out);
     190                                JOptionPane.showMessageDialog(Main.parent,
     191                                                tr("Error loading file"),
     192                                                tr("Error"),
     193                                                JOptionPane.ERROR_MESSAGE);
     194                                        return;
     195                        }
     196                }
     197        }
     198       
     199        protected static JFileChooser createAndOpenFileChooser(boolean open, boolean multiple) {
     200                String curDir = Main.pref.get("lastDirectory");
     201                if (curDir.equals(""))
     202                        curDir = ".";
     203                JFileChooser fc = new JFileChooser(new File(curDir));
     204                fc.setMultiSelectionEnabled(multiple);
     205                for (int i = 0; i < ExtensionFileFilter.filters.length; ++i)
     206                        fc.addChoosableFileFilter(ExtensionFileFilter.filters[i]);
     207                fc.setAcceptAllFileFilterUsed(true);
     208       
     209                int answer = open ? fc.showOpenDialog(Main.parent) : fc.showSaveDialog(Main.parent);
     210                if (answer != JFileChooser.APPROVE_OPTION)
     211                        return null;
    121212               
     213                if (!fc.getCurrentDirectory().getAbsolutePath().equals(curDir))
     214                        Main.pref.put("lastDirectory", fc.getCurrentDirectory().getAbsolutePath());
     215
     216                if (!open) {
     217                        File file = fc.getSelectedFile();
     218                        if (file == null || (file.exists() && JOptionPane.YES_OPTION !=
     219                                        JOptionPane.showConfirmDialog(Main.parent, tr("File exists. Overwrite?"), tr("Overwrite"), JOptionPane.YES_NO_OPTION)))
     220                                return null;
     221                }
    122222               
     223                return fc;
     224        }
     225       
     226        public static File openFileDialog(boolean open) {
     227                JFileChooser fc = createAndOpenFileChooser(open, false);
     228                if (fc == null)
     229                        return null;
     230
     231                File file = fc.getSelectedFile();
     232
     233                String fn = file.getPath();
     234                if (fn.indexOf('.') == -1) {
     235                        FileFilter ff = fc.getFileFilter();
     236                        if (ff instanceof ExtensionFileFilter)
     237                                fn = "." + ((ExtensionFileFilter)ff).defaultExtension;
     238                        else
     239                                fn += ".osm";
     240                        file = new File(fn);
     241                }
     242                return file;
    123243        }
    124244}
  • applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPlugin.java

    r2121 r5319  
    44
    55
     6import java.awt.event.ActionEvent;
    67import java.util.ArrayList;
    78import java.util.Map;
    89import java.util.TreeSet;
     10
     11import javax.swing.AbstractAction;
    912import javax.swing.JMenu;
    1013import javax.swing.JMenuBar;
     
    3134        static ArrayList<WMSInfo> wmsList = new ArrayList<WMSInfo>();
    3235       
    33 
    34        
    3536        public WMSPlugin() {
    36                
    3737                refreshMenu();
    38                
    3938        }
    4039
     
    110109               
    111110                wmsJMenu.addSeparator();
     111                wmsJMenu.add(new JMenuItem(new AbstractAction("Blank Layer") {
     112                        public void actionPerformed(ActionEvent ev) {
     113                                Main.main.addLayer(new WMSLayer());
     114                        }
     115                }));
     116                wmsJMenu.addSeparator();
    112117                wmsJMenu.add(new JMenuItem(new Help_WMSmenuAction()));
    113                
    114                
    115        
    116118        }
    117119       
    118120        public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
    119                 if(oldFrame==null && newFrame!=null) {
     121                if (oldFrame==null && newFrame!=null) {
    120122                        wmsJMenu.setEnabled(true);
    121123                        Main.map.toolBarActions.addSeparator();
Note: See TracChangeset for help on using the changeset viewer.