浏览代码

OrthograficView::move_pixel: Adjust for zoom

Johannes Hofmann 7 年前
父节点
当前提交
13af8af8dd
共有 1 个文件被更改,包括 3 次插入2 次删除
  1. 3
    2
      src/orthografic_view.rs

+ 3
- 2
src/orthografic_view.rs 查看文件

179
     pub fn from_mercator_view(merc: &MercatorView) -> Self {
179
     pub fn from_mercator_view(merc: &MercatorView) -> Self {
180
         let latlon = merc.center.to_latlon_rad();
180
         let latlon = merc.center.to_latlon_rad();
181
         let zoom_delta = (1.0 / latlon.lat.cos()).log2();
181
         let zoom_delta = (1.0 / latlon.lat.cos()).log2();
182
+
182
         OrthograficView {
183
         OrthograficView {
183
             viewport_size: merc.viewport_size,
184
             viewport_size: merc.viewport_size,
184
             tile_size: merc.tile_size,
185
             tile_size: merc.tile_size,
481
 
482
 
482
     /// Move the center of the viewport by approx. (`delta_x`, `delta_y`) in screen coordinates.
483
     /// Move the center of the viewport by approx. (`delta_x`, `delta_y`) in screen coordinates.
483
     pub fn move_pixel(&mut self, delta_x: f64, delta_y: f64) {
484
     pub fn move_pixel(&mut self, delta_x: f64, delta_y: f64) {
484
-        //TODO Do something more sophisticated
485
-        let scale = f64::powf(2.0, -self.zoom) / f64::from(self.tile_size);
485
+        let latlon = self.center.to_latlon_rad();
486
+        let scale = f64::powf(2.0, -self.zoom) / (f64::from(self.tile_size) * latlon.lat.cos());
486
         self.center.x += delta_x * scale;
487
         self.center.x += delta_x * scale;
487
         self.center.y += delta_y * scale;
488
         self.center.y += delta_y * scale;
488
         self.center.normalize_xy();
489
         self.center.normalize_xy();