Ignore:
Timestamp:
2009-01-28T21:44:10+01:00 (16 years ago)
Author:
pieren
Message:

add municipality bbox in grab and cache

Location:
applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheControl.java

    r13382 r13426  
    1818import javax.swing.JOptionPane;
    1919import org.openstreetmap.josm.Main;
    20 import org.openstreetmap.josm.data.coor.EastNorth;
    2120
    2221public class CacheControl implements Runnable {
     
    112111            FileInputStream fis = new FileInputStream(file);
    113112            ObjectInputStream ois = new ObjectInputStream(fis);
    114             int sfv = ois.readInt();
    115             if (sfv != wmsLayer.serializeFormatVersion) {
    116                 JOptionPane.showMessageDialog(Main.parent, tr("Unsupported WMS file version; found {0}, expected {1}",
    117                         sfv, wmsLayer.serializeFormatVersion), tr("Cache Format Error"), JOptionPane.ERROR_MESSAGE);
     113            if (wmsLayer.read(ois, currentLambertZone) == false)
    118114                return false;
    119             }
    120             wmsLayer.setLocation((String) ois.readObject());
    121             wmsLayer.setCodeCommune((String) ois.readObject());
    122             wmsLayer.lambertZone = ois.readInt();
    123             wmsLayer.setRaster(ois.readBoolean());
    124             wmsLayer.setRasterMin((EastNorth) ois.readObject());
    125             wmsLayer.setRasterCenter((EastNorth) ois.readObject());
    126             wmsLayer.setRasterRatio(ois.readDouble());
    127             if (wmsLayer.lambertZone != currentLambertZone) {
    128                 JOptionPane.showMessageDialog(Main.parent, tr("Lambert zone {0} in cache "+
    129                         " incompatible with current Lambert zone {1}",
    130                         wmsLayer.lambertZone+1, currentLambertZone), tr("Cache Lambert Zone Error"), JOptionPane.ERROR_MESSAGE);
    131                 return false;
    132             }
    133             boolean EOF = false;
    134             try {
    135                 while (!EOF) {
    136                     GeorefImage newImage = (GeorefImage) ois.readObject();
    137                     for (GeorefImage img : wmsLayer.images) {
    138                         if (CadastrePlugin.backgroundTransparent) {
    139                             if (img.overlap(newImage))
    140                                 // mask overlapping zone in already grabbed image
    141                                 img.withdraw(newImage);
    142                             else
    143                                 // mask overlapping zone in new image only when
    144                                 // new image covers completely the existing image
    145                                 newImage.withdraw(img);
    146                         }
    147                     }
    148                     wmsLayer.images.add(newImage);
    149                 }
    150             } catch (EOFException e) {}
    151115            ois.close();
    152116            fis.close();
     
    155119            JOptionPane
    156120                    .showMessageDialog(Main.parent, tr("Error loading file"), tr("Error"), JOptionPane.ERROR_MESSAGE);
     121            return false;
    157122        }
    158123        return true;
     
    205170                        ObjectOutputStream oos = new ObjectOutputStream(
    206171                                new BufferedOutputStream(new FileOutputStream(file)));
    207                         oos.writeInt(wmsLayer.serializeFormatVersion);
    208                         oos.writeObject(wmsLayer.getLocation());
    209                         oos.writeObject(wmsLayer.getCodeCommune());
    210                         oos.writeInt(wmsLayer.lambertZone);
    211                         oos.writeBoolean(wmsLayer.isRaster());
    212                         oos.writeObject(wmsLayer.getRasterMin());
    213                         oos.writeObject(wmsLayer.getRasterCenter());
    214                         oos.writeDouble(wmsLayer.getRasterRatio());
    215                         for (GeorefImage img : images) {
    216                             oos.writeObject(img);
    217                         }
     172                        wmsLayer.write(oos, images);
    218173                        oos.close();
    219174                    }
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastreInterface.java

    r13382 r13426  
    1818
    1919import org.openstreetmap.josm.Main;
     20import org.openstreetmap.josm.data.coor.EastNorth;
    2021import org.openstreetmap.josm.gui.layer.Layer;
    2122import org.openstreetmap.josm.tools.GBC;
     
    3839    final String c0ptionListStart = "<option value=\"";
    3940    final String cOptionListEnd = "</option>";
     41    final String cBBoxCommunStart = "new GeoBox(";
     42    final String cBBoxCommunEnd = ")";
    4043   
    4144    final String cInterfaceVector = "afficherCarteCommune.do";
     
    310313    }
    311314   
     315    public EastNorthBound retrieveCommuneBBox() throws IOException {
     316        if (interfaceRef == null)
     317            return null;
     318        String ln = null;
     319        String line = null;
     320        // send GET opening normally the small window with the commune overview
     321        String content = baseURL + "/scpc/" + interfaceRef;
     322        content += "&dontSaveLastForward&keepVolatileSession=";
     323        searchFormURL = new URL(content);
     324        System.out.println("HEAD:"+content);
     325        urlConn = (HttpURLConnection)searchFormURL.openConnection();
     326        urlConn.setRequestMethod("GET");
     327        setCookie();
     328        urlConn.connect();
     329        if (urlConn.getResponseCode() != HttpURLConnection.HTTP_OK) {
     330            throw (IOException) new IOException("Cannot get Cadastre response.");
     331        }
     332        BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
     333        while ((ln = in.readLine()) != null) {
     334            line += ln;
     335        }
     336        in.close();
     337        urlConn.disconnect();
     338        return parseBBoxCommune(line);
     339    }
     340   
     341    private EastNorthBound parseBBoxCommune(String input) {
     342        if (input.indexOf(cBBoxCommunStart) != -1) {
     343            input = input.substring(input.indexOf(cBBoxCommunStart));
     344            int i = input.indexOf(",");
     345            double minx = Double.parseDouble(input.substring(cBBoxCommunStart.length(), i));
     346            int j = input.indexOf(",", i+1);
     347            double miny = Double.parseDouble(input.substring(i+1, j));
     348            int k = input.indexOf(",", j+1);
     349            double maxx = Double.parseDouble(input.substring(j+1, k));
     350            int l = input.indexOf(cBBoxCommunEnd, k+1);
     351            double maxy = Double.parseDouble(input.substring(k+1, l));
     352            return new EastNorthBound(new EastNorth(minx,miny), new EastNorth(maxx,maxy));
     353        }
     354        return null;
     355    }
     356   
    312357    private void checkLayerDuplicates(WMSLayer wmsLayer) throws DuplicateLayerException {
    313358        if (Main.map != null) {
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastrePlugin.java

    r13417 r13426  
    6464 *                 - minor fixes due to changes in JOSM core classes
    6565 *                 - first draft of raster image support
     66 * 0.9 draft       - grab vectorized full commune bbox and save it in cache
    6667 */
    6768public class CadastrePlugin extends Plugin {
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/DownloadWMSTask.java

    r13382 r13426  
    2929        try {
    3030            if (grabber.getWmsInterface().retrieveInterface(wmsLayer)) {
    31                 if (wmsLayer.isRaster() && wmsLayer.images.isEmpty())
    32                     wmsLayer.setRasterBounds(bounds);
    33                 if (CacheControl.cacheEnabled && wmsLayer.images.isEmpty()) {
    34                     // images loaded from cache
    35                     if (wmsLayer.getCacheControl().loadCacheIfExist()) {
    36                         Main.map.mapView.repaint();
    37                         return;
     31                if (wmsLayer.images.isEmpty()) {
     32                    // first time we grab an image for this layer
     33                    if (CacheControl.cacheEnabled) {
     34                        if (wmsLayer.getCacheControl().loadCacheIfExist()) {
     35                            Main.map.mapView.repaint();
     36                            return;
     37                        }
    3838                    }
     39                    if (wmsLayer.isRaster())
     40                        // set raster image commune bounding box based on current view (before adjustment)
     41                        wmsLayer.setRasterBounds(bounds);
     42                    else
     43                        // set vectorized commune bounding box by opening the standard web window
     44                        wmsLayer.setCommuneBBox( grabber.getWmsInterface().retrieveCommuneBBox());
    3945                }
    4046                // grab new images from wms server into active layer
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionLoadFromCache.java

    r13382 r13426  
    6060            // create layer and load cache
    6161            WMSLayer wmsLayer = new WMSLayer("", "", Integer.parseInt(ext)-1);
    62             wmsLayer.getCacheControl().loadCache(file, Lambert.layoutZone);
    63             Main.main.addLayer(wmsLayer);
     62            if (wmsLayer.getCacheControl().loadCache(file, Lambert.layoutZone))
     63                Main.main.addLayer(wmsLayer);
    6464        }
    6565       
  • applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java

    r13382 r13426  
    99import java.awt.event.ActionEvent;
    1010import java.awt.image.BufferedImage;
     11import java.io.EOFException;
    1112import java.io.File;
    1213import java.io.FileInputStream;
     
    4546public class WMSLayer extends Layer {
    4647
    47     public class EastNorthBound {
    48         public EastNorth min, max;
    49         public EastNorthBound(EastNorth min, EastNorth max) {
    50             this.min = min;
    51             this.max = max;
    52         }
    53         @Override public String toString() {
    54             return "EastNorthBound[" + min.east() + "," + min.north() + "," + max.east() + "," + max.north() + "]";
    55         }
    56     }
    57    
    5848    Component[] component = null; 
    5949
     
    6555    protected ArrayList<GeorefImage> images = new ArrayList<GeorefImage>();
    6656   
    67     protected final int serializeFormatVersion = 1;
     57    protected final int serializeFormatVersion = 2;
    6858   
    6959    private ArrayList<EastNorthBound> dividedBbox = new ArrayList<EastNorthBound>();
     
    7464
    7565    private String codeCommune = "";
     66   
     67    private EastNorthBound communeBBox = new EastNorthBound(new EastNorth(0,0), new EastNorth(0,0));
    7668   
    7769    private boolean isRaster = false;
     
    492484        }
    493485    }
     486   
     487    /**
     488     * Called by CacheControl when a new cache file is created on disk
     489     * @param oos
     490     * @throws IOException
     491     */
     492    public void write(ObjectOutputStream oos, ArrayList<GeorefImage> imgs) throws IOException {
     493        oos.writeInt(this.serializeFormatVersion);
     494        oos.writeObject(this.location);
     495        oos.writeObject(this.codeCommune);
     496        oos.writeInt(this.lambertZone);
     497        oos.writeBoolean(this.isRaster);
     498        if (this.isRaster) {
     499            oos.writeObject(this.rasterMin);
     500            oos.writeObject(this.rasterCenter);
     501            oos.writeDouble(this.rasterRatio);
     502        } else {
     503            oos.writeObject(this.communeBBox);
     504        }
     505        for (GeorefImage img : imgs) {
     506            oos.writeObject(img);
     507        }
     508    }
     509   
     510    /**
     511     * Called by CacheControl when a cache file is read from disk
     512     * @param ois
     513     * @throws IOException
     514     * @throws ClassNotFoundException
     515     */
     516    public boolean read(ObjectInputStream ois, int currentLambertZone) throws IOException, ClassNotFoundException {
     517        int sfv = ois.readInt();
     518        if (sfv != this.serializeFormatVersion) {
     519            JOptionPane.showMessageDialog(Main.parent, tr("Unsupported cache file version; found {0}, expected {1}\nCreate a new one.",
     520                    sfv, this.serializeFormatVersion), tr("Cache Format Error"), JOptionPane.ERROR_MESSAGE);
     521            return false;
     522        }
     523        this.setLocation((String) ois.readObject());
     524        this.setCodeCommune((String) ois.readObject());
     525        this.lambertZone = ois.readInt();
     526        this.isRaster = ois.readBoolean();
     527        if (this.isRaster) {
     528            this.rasterMin = (EastNorth) ois.readObject();
     529            this.rasterCenter = (EastNorth) ois.readObject();
     530            this.rasterRatio = ois.readDouble();
     531        } else {
     532            this.communeBBox = (EastNorthBound) ois.readObject();
     533        }
     534        if (this.lambertZone != currentLambertZone) {
     535            JOptionPane.showMessageDialog(Main.parent, tr("Lambert zone {0} in cache "+
     536                    " incompatible with current Lambert zone {1}",
     537                    this.lambertZone+1, currentLambertZone), tr("Cache Lambert Zone Error"), JOptionPane.ERROR_MESSAGE);
     538            return false;
     539        }
     540        boolean EOF = false;
     541        try {
     542            while (!EOF) {
     543                GeorefImage newImage = (GeorefImage) ois.readObject();
     544                for (GeorefImage img : this.images) {
     545                    if (CadastrePlugin.backgroundTransparent) {
     546                        if (img.overlap(newImage))
     547                            // mask overlapping zone in already grabbed image
     548                            img.withdraw(newImage);
     549                        else
     550                            // mask overlapping zone in new image only when
     551                            // new image covers completely the existing image
     552                            newImage.withdraw(img);
     553                    }
     554                }
     555                this.images.add(newImage);
     556            }
     557        } catch (EOFException ex) {
     558            // expected exception when all images are read
     559        }
     560        return true;
     561    }
    494562
    495563    public double getRasterRatio() {
     
    509577    }
    510578
     579    public EastNorthBound getCommuneBBox() {
     580        return communeBBox;
     581    }
     582
     583    public void setCommuneBBox(EastNorthBound entireCommune) {
     584        this.communeBBox = entireCommune;
     585    }
     586
    511587}
Note: See TracChangeset for help on using the changeset viewer.