Explorar el Código

Fix tile loading discontinuity at 180th meridian

Tiles near the viewport center should be loaded first. This commit
fixes a discontinuity in the distance function that is used to sort the
queue of requested tiles.
Johannes Hofmann hace 7 años
padre
commit
755ea56825
Se han modificado 1 ficheros con 8 adiciones y 2 borrados
  1. 8
    2
      src/tile_loader.rs

+ 8
- 2
src/tile_loader.rs Ver fichero

@@ -351,8 +351,14 @@ fn compare_tiles(a: Tile, b: Tile, view: View) -> Ordering {
351 351
             } else {
352 352
                 let map_a = a.coord.map_coord_center();
353 353
                 let map_b = b.coord.map_coord_center();
354
-                let center_diff_a = (view.center.x - map_a.x).hypot(view.center.y - map_a.y);
355
-                let center_diff_b = (view.center.x - map_b.x).hypot(view.center.y - map_b.y);
354
+                let diff_xa = (view.center.x - map_a.x).abs();
355
+                let diff_xa = if diff_xa > 0.5 { 1.0 - diff_xa } else { diff_xa };
356
+                let diff_xb = (view.center.x - map_b.x).abs();
357
+                let diff_xb = if diff_xb > 0.5 { 1.0 - diff_xb } else { diff_xb };
358
+                let diff_ya = view.center.y - map_a.y;
359
+                let diff_yb = view.center.y - map_b.y;
360
+                let center_diff_a = (diff_xa * diff_xa) + (diff_ya * diff_ya);
361
+                let center_diff_b = (diff_xb * diff_xb) + (diff_yb * diff_yb);
356 362
 
357 363
                 center_diff_b.partial_cmp(&center_diff_a).unwrap_or(Ordering::Equal)
358 364
             }