Changeset 6913 in osm for applications/editors/josm


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

Correct rounding inaccuracy in lakewalker 0.2 and other minor fixes

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

Legend:

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

    r6910 r6913  
    103103                ArrayList<double[]> nodelist = new ArrayList<double[]>();
    104104
    105                 int[] xy = geo_to_xy(lat,lon);
     105                int[] xy = geo_to_xy(lat,lon,this.resolution);
    106106               
    107107                if(!bbox.contains(lat, lon)){
     
    112112               
    113113                while(true){
    114                         double[] geo = xy_to_geo(xy[0],xy[1]);
     114                        double[] geo = xy_to_geo(xy[0],xy[1],this.resolution);
    115115                        if(bbox.contains(geo[0],geo[1])==false){
    116116                                break;
     
    135135               
    136136                int[] startxy = new int[] {xy[0], xy[1]};
    137                 double[] startgeo = xy_to_geo(xy[0],xy[1]);
     137                double[] startgeo = xy_to_geo(xy[0],xy[1],this.resolution);
    138138                               
    139139                System.out.println("Found shore at "+startxy[0]+","+startxy[1]);
     
    158158                               
    159159                                new_dir = (last_dir + d + 4) % 8;
    160                                
    161                                 //System.out.println(last_dir+", "+d+" "+new_dir);
    162                                
     160
    163161                                test_x = xy[0] + this.dirslon[new_dir];
    164162                                test_y = xy[1] + this.dirslat[new_dir];
    165163                               
    166                                 double[] geo = xy_to_geo(xy[0],xy[1]);
     164                                double[] geo = xy_to_geo(test_x,test_y,this.resolution);
    167165                               
    168166                                if(!bbox.contains(geo[0], geo[1])){
     
    172170                               
    173171                                v = wms.getPixel(test_x, test_y,0xFF0000FF);
    174                                 //System.out.println(new_dir+" "+test_x+","+test_y+" "+v);
    175172                                if(v > this.threshold){
    176173                                        break;
     
    182179                                }
    183180                        }
    184                        
    185                         //System.out.println("Found empty space");
    186                        
     181
    187182                        // Remember this direction
    188183                        last_dir = new_dir;
     
    194189                        }
    195190                       
    196                         double[] geo = xy_to_geo(xy[0],xy[1]);
     191                        double[] geo = xy_to_geo(xy[0],xy[1],this.resolution);
    197192                        nodelist.add(geo);
    198193                        System.out.println("Adding node at "+xy[0]+","+xy[1]+" ("+geo[1]+","+geo[0]+")");
     
    298293        }
    299294       
    300         private double[] xy_to_geo(int x, int y){
     295        public double[] xy_to_geo(int x, int y, double resolution){
    301296                double[] geo = new double[2];
    302             geo[0] = y / (double)this.resolution;
    303             geo[1] = x / (double)this.resolution;
     297            geo[0] = y / resolution;
     298            geo[1] = x / resolution;
    304299            return geo;
    305300        }
    306301       
    307         private int[] geo_to_xy(double lat, double lon){
     302        public int[] geo_to_xy(double lat, double lon, double resolution){
    308303                int[] xy = new int[2];
    309304               
    310                 xy[0] = (int)Math.floor(lon * this.resolution + 0.5);
    311                 xy[1] = (int)Math.floor(lat * this.resolution + 0.5);
    312                
    313                 System.out.println("("+lon+","+lat+") maps to ("+xy[0]+","+xy[1]+")");
    314                
     305                xy[0] = (int)Math.floor(lon * resolution + 0.5);
     306                xy[1] = (int)Math.floor(lat * resolution + 0.5);
     307                               
    315308                return xy;
    316309        }
  • applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerWMS.java

    r6910 r6913  
    4242               
    4343                int[] bottom_left_xy = new int[2];
    44                 bottom_left_xy[0] = (int)(x / this.tilesize) * this.tilesize;
    45                 bottom_left_xy[1] = (int)(y / this.tilesize) * this.tilesize;
     44                bottom_left_xy[0] = floor(x,this.tilesize);
     45                bottom_left_xy[1] = floor(y,this.tilesize);
    4646               
    4747        int[] top_right_xy = new int[2];
     
    4949        top_right_xy[1] = (int)bottom_left_xy[1] + this.tilesize;
    5050       
    51         double[] topright_geo = xy_to_geo(top_right_xy[0],top_right_xy[1]);
    52         double[] bottomleft_geo = xy_to_geo(bottom_left_xy[0],bottom_left_xy[1]);
     51        double[] topright_geo = xy_to_geo(top_right_xy[0],top_right_xy[1],this.resolution);
     52        double[] bottomleft_geo = xy_to_geo(bottom_left_xy[0],bottom_left_xy[1],this.resolution);
    5353         
    5454                String filename = this.wmslayer+"/landsat_"+this.resolution+"_"+this.tilesize+
     
    129129        }
    130130       
    131        
    132        
    133131        public int getPixel(int x, int y, int pixcol){
    134132               
     
    141139                        return -1;
    142140                }
    143 
    144                 int tx = (int)(Math.floor(x / this.tilesize) * this.tilesize);
    145                 int ty = (int)(Math.floor(y / this.tilesize) * this.tilesize);
    146                
     141       
     142                int tx = floor(x,this.tilesize);
     143                int ty = floor(y,this.tilesize);
     144                               
    147145                int pixel_x = (x-tx);
    148146                int pixel_y = (this.tilesize-1)-(y-ty);
    149                                
     147                                       
     148                //System.out.println("("+x+","+y+") maps to ("+pixel_x+","+pixel_y+") by ("+tx+", "+ty+")");
     149               
    150150                int rgb = image.getRGB(pixel_x,pixel_y);
    151151               
     
    179179        }
    180180
     181        public int floor(int num, int precision){
     182                double dnum = num/(double)precision;
     183                BigDecimal val = new BigDecimal(dnum) ;
     184                val = val.setScale(0, BigDecimal.ROUND_FLOOR);
     185                return val.intValue()*precision;
     186        }
     187       
     188        public double floor(double num) {
     189                BigDecimal val = new BigDecimal(num) ;
     190                val = val.setScale(0, BigDecimal.ROUND_FLOOR);
     191                return val.doubleValue() ;
     192        }
     193
     194        public double[] xy_to_geo(int x, int y, double resolution){
     195                double[] geo = new double[2];
     196            geo[0] = y / resolution;
     197            geo[1] = x / resolution;
     198            return geo;
     199        }
     200       
     201        public int[] geo_to_xy(double lat, double lon, double resolution){
     202                int[] xy = new int[2];
     203               
     204                xy[0] = (int)Math.floor(lon * resolution + 0.5);
     205                xy[1] = (int)Math.floor(lat * resolution + 0.5);
     206                               
     207                return xy;
     208        }
     209       
    181210        private void printarr(int[] a){
    182211                for(int i = 0; i<a.length; i++){
     
    184213                }
    185214        }
     215        /*
    186216        private double[] xy_to_geo(int x, int y){
    187217                double[] geo = new double[2];
     
    199229                return xy;
    200230        }
     231        */
    201232}
Note: See TracChangeset for help on using the changeset viewer.