Rendre les tuiles jointives sur la carte et supprimer le cadre blanc au dézoom
Les sous-tuiles voisines ne partageaient pas leurs bords (interpolation bilinéaire évaluée deux fois sur des fractions différentes), créant une ligne claire entre images au zoom moyen. Les points de bord sont désormais calculés une fois par dalle et partagés entre sous-tuiles adjacentes. Le cadre blanc autour des tuiles au dézoom venait du outline CSS dessiné par-dessus les bords d'images non jointives : supprimé (le survol garde son halo). La bascule overview ↔ vignettes oscillait d'un cran de zoom, d'où une hystérésis. Les seuils de paliers sont revus pour ne jamais étirer la vignette intermédiaire au-delà de 1:1.
This commit is contained in:
@ -770,6 +770,50 @@ def test_overview_skipped_for_small_grids(tmp_path):
|
||||
assert data['overview'] == {}
|
||||
|
||||
|
||||
def test_subtile_corners_shared_edges_exact():
|
||||
"""Bords partagés : deux sous-tuiles voisines reçoivent le MÊME point.
|
||||
|
||||
Sans partage, l'interpolation bilinéaire est évaluée deux fois sur des
|
||||
fractions différentes et les bords ne coïncident plus à moins d'un pixel
|
||||
— jointure cassée (ligne blanche) au zoom moyen.
|
||||
"""
|
||||
from lidar_pipeline.index import _subtile_corners
|
||||
corners = [[10.0, 2.0], [10.0, 3.0], [11.0, 3.0], [11.0, 2.0]]
|
||||
k = 4
|
||||
a = _subtile_corners(corners, 0, 0, k)
|
||||
b = _subtile_corners(corners, 1, 0, k)
|
||||
assert a[1] == b[0] # bord est de (0,0) = bord ouest de (1,0)
|
||||
assert a[2] == b[3]
|
||||
c = _subtile_corners(corners, 0, 1, k)
|
||||
assert a[3] == c[0] # bord nord de (0,0) = bord sud de (0,1)
|
||||
d = _subtile_corners(corners, 3, 3, k)
|
||||
assert d[2] == corners[2] # coin NE de la dalle partagé tel quel
|
||||
|
||||
|
||||
def test_overview_corners_shared_between_tiles(tmp_path):
|
||||
"""Le coin d'une dalle est aussi celui de sa voisine (même point).
|
||||
|
||||
Deux dalles adjacentes E-O partagent un bord vertical : le NE de la dalle
|
||||
ouest = le NW de la dalle est. Sans partage, les interpolations bilinéaires
|
||||
des sous-tuiles voisines ne coïncident plus à moins d'un pixel — jointure
|
||||
cassée au zoom moyen.
|
||||
"""
|
||||
from lidar_pipeline.index import build_index
|
||||
|
||||
output_dir = tmp_path / "output"
|
||||
vis_dir = output_dir / "visualisations"
|
||||
vis_dir.mkdir(parents=True)
|
||||
for col in (1000, 1001):
|
||||
_make_fake_viz_dir(vis_dir, "a", col, 6881, ('hillshade_multi',))
|
||||
|
||||
assert build_index(output_dir) is not None
|
||||
data = json.loads((output_dir / "index_tiles.json").read_text(encoding='utf-8'))
|
||||
tiles = {t['col']: t for t in data['tiles']}
|
||||
a_ne = tiles[1000]['corners'][2] # NE de la dalle ouest
|
||||
b_nw = tiles[1001]['corners'][3] # NW de la dalle est
|
||||
assert a_ne == b_nw, f"coins partagés divergents : {a_ne} != {b_nw}"
|
||||
|
||||
|
||||
def test_urls_versioned_by_served_file_mtime(tmp_path):
|
||||
"""?v= suit la mtime du fichier SERVI — prérequis du cache immutable.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user