Ignore:
Timestamp:
2008-02-18T14:00:37+01:00 (17 years ago)
Author:
jrreid
Message:

Update status text while running, and add a memory based cache to the lakewalker plugin

Location:
applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/Lakewalker.java

    r6913 r6914  
    111111                int v;
    112112               
     113                setStatus("Looking for shoreline...");
     114               
    113115                while(true){
    114116                        double[] geo = xy_to_geo(xy[0],xy[1],this.resolution);
     
    136138                int[] startxy = new int[] {xy[0], xy[1]};
    137139                double[] startgeo = xy_to_geo(xy[0],xy[1],this.resolution);
    138                                
    139                 System.out.println("Found shore at "+startxy[0]+","+startxy[1]);
    140                
     140
    141141                System.out.printf("Found shore at lat %.4f lon %.4f\n",lat,lon);
    142142               
     
    145145                for(int i = 0; i < this.maxnode; i++){
    146146                       
     147                        // Print a counter
    147148                        if(i % 250 == 0){
     149                                setStatus(i+" nodes so far...");
    148150                                System.out.println(i+" nodes so far...");
    149151                        }
     
    155157                        int new_dir = 0;
    156158                       
     159                        // Loop through all the directions we can go
    157160                        for(d = 1; d <= this.dirslat.length; d++){
    158161                               
     162                                // Decide which direction we want to look at from this pixel
    159163                                new_dir = (last_dir + d + 4) % 8;
    160164
     
    165169                               
    166170                                if(!bbox.contains(geo[0], geo[1])){
     171                                        /**
     172                                         * TODO: Handle this case
     173                                         */
    167174                                        System.out.println("Outside bbox");
    168175                                        break;
     
    182189                        // Remember this direction
    183190                        last_dir = new_dir;
     191                       
     192                        // Set the pixel we found as current
    184193                        xy[0] = test_x;
    185194                        xy[1] = test_y;
    186195                       
     196                        // Break the loop if we managed to get back to our starting point
    187197                        if(xy[0] == startxy[0] && xy[1] == startxy[1]){
    188198                                break;
    189199                        }
    190200                       
     201                        // Store this node
    191202                        double[] geo = xy_to_geo(xy[0],xy[1],this.resolution);
    192203                        nodelist.add(geo);
    193204                        System.out.println("Adding node at "+xy[0]+","+xy[1]+" ("+geo[1]+","+geo[0]+")");
    194205                       
     206                        // Check if we got stuck in a loop
    195207                double start_proximity = Math.pow((geo[0] - startgeo[0]),2) + Math.pow((geo[1] - startgeo[1]),2);
    196208               
  • applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerAction.java

    r6910 r6914  
    150150         */
    151151       
     152        setStatus("Running vertex reduction...");
     153       
    152154        nodelist = lw.vertex_reduce(nodelist, epsilon);
    153155       
     
    155157       
    156158        /**
    157          * And then through douglas-peucker reduction
    158          */
     159         * And then through douglas-peucker approximation
     160         */
     161       
     162        setStatus("Running Douglas-Peucker approximation...");
    159163       
    160164        nodelist = lw.douglas_peucker(nodelist, epsilon);
     
    266270  public void mouseReleased(MouseEvent e) {
    267271  }
    268  
     272  protected void setStatus(String s) {
     273          Main.pleaseWaitDlg.currentAction.setText(s);
     274          Main.pleaseWaitDlg.repaint();
     275  }
    269276}
  • applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerWMS.java

    r6913 r6914  
    1111import java.awt.image.*;
    1212import java.awt.geom.*;
     13import java.util.*;
    1314
    1415public class LakewalkerWMS {
    15        
    16         public LakewalkerWMS(){
    17                
    18         }
    1916       
    2017        private BufferedImage image;
    2118        private int imagex;
    2219        private int imagey;
     20       
     21        // Vector to cache images in memory
     22        private Vector<BufferedImage> images = new Vector<BufferedImage>();
     23        // Hashmap to hold the mapping of cached images
     24        private HashMap<String,Integer> imageindex = new HashMap<String,Integer>();
    2325       
    2426        public BufferedImage image2 = new BufferedImage(2000, 2000, BufferedImage.TYPE_INT_RGB);
     
    6365        File file = new File(this.working_dir,filename);
    6466       
     67        // Calculate the hashmap key
     68        String hashkey = Integer.toString(bottom_left_xy[0])+":"+Integer.toString(bottom_left_xy[1]);
     69       
    6570        // See if this image is already loaded
    66         if(this.image != null){
     71        if(this.image != null){ 
    6772                if(this.imagex != bottom_left_xy[0] || this.imagey != bottom_left_xy[1]){
    68                         this.image = null;
     73                       
     74                        // Check if this image exists in the hashmap
     75                        if(this.imageindex.containsKey(hashkey)){
     76                                // Store which image we have
     77                                this.imagex = bottom_left_xy[0];
     78                                this.imagey = bottom_left_xy[1];
     79                               
     80                                // Retrieve from cache
     81                                this.image = this.images.get(this.imageindex.get(hashkey));
     82                                return this.image;
     83                        } else {
     84                                this.image = null;
     85                        }
    6986                } else {
    7087                        return this.image;
     
    7390       
    7491            try {               
    75                 System.out.println("Looking for image in cache: "+filename);
     92                System.out.println("Looking for image in disk cache: "+filename);
    7693               
    7794                // Read from a file
    7895                this.image = ImageIO.read(file);
    7996           
     97                this.images.add(this.image);
     98                this.imageindex.put(hashkey,this.images.size()-1);
     99               
    80100            } catch(FileNotFoundException e){
    81101                System.out.println("Could not find cached image, downloading.");
     
    104124                    }
    105125               
     126                this.images.add(this.image);
     127                this.imageindex.put(hashkey,this.images.size()-1);
     128               
    106129                this.saveimage(file,this.image);
    107130            }
Note: See TracChangeset for help on using the changeset viewer.