Diff of /trunk/src/converter.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 32 by harbaum, Tue Jul 28 13:21:22 2009 UTC revision 120 by harbaum, Sat Sep 19 19:19:42 2009 UTC
# Line 65  lon2pixel(  int zoom, Line 65  lon2pixel(  int zoom,
65              float lon)              float lon)
66  {  {
67      int pixel_x;      int pixel_x;
68        int zoom_p = (1<<zoom) * TILESIZE/2;
69    
70      /* the formula is      /* the formula is
71       *       *
72       * pixel_x = (2^zoom * TILESIZE * lon) / 2PI + (2^zoom * TILESIZE) / 2       * pixel_x = (2^zoom * TILESIZE * lon) / 2PI + (2^zoom * TILESIZE) / 2
73       */       */
74      pixel_x = (int)(( lon * TILESIZE * (1 << zoom) ) / (2*M_PI)) +      pixel_x = (int)(lon * (zoom_p / M_PI)) + zoom_p;
75          ( (1 << zoom) * (TILESIZE/2) );  
76      return pixel_x;      return pixel_x;
77  }  }
78    
79  float  float
80  pixel2lon(  float zoom,  pixel2lon(  int zoom,
81              int pixel_x)              int pixel_x)
82  {  {
83      float lon;      float lon;
84        int zoom_p = (1<<zoom) * TILESIZE/2;
85    
86      lon = ((pixel_x - ( exp(zoom * M_LN2) * (TILESIZE/2) ) ) *2*M_PI) /      lon = (pixel_x - zoom_p) / (zoom_p / M_PI) ;
         (TILESIZE * exp(zoom * M_LN2) );  
87    
88      return lon;      return lon;
89  }  }
90    
91  float  float
92  pixel2lat(  float zoom,  pixel2lat(  int zoom,
93              int pixel_y)              int pixel_y)
94  {  {
95      float lat, lat_m;      float lat, lat_m;
96    
97      lat_m = (-( pixel_y - ( exp(zoom * M_LN2) * (TILESIZE/2) ) ) * (2*M_PI)) /      lat_m = (-( pixel_y - ( (1<<zoom) * (TILESIZE/2) ) ) * (2*M_PI)) /
98          (TILESIZE * exp(zoom * M_LN2));          (TILESIZE * (1<<zoom));
99    
100      lat = asin(tanh(lat_m));      lat = asin(tanh(lat_m));
101    

Legend:
Removed from v.32  
changed lines
  Added in v.120