Bonjour à tous,
Je travaille sur un jeu de données météo qui consiste en une grille de valeurs spatiales :
# lng;lat;value
1.22;0.48;10
1.22;0.49;12
...
Je souhaite représenter sur une carte ces données spatiales, ce que j’ai fait avec Leaflet et du GeoJSON :
Seulement, le rendu n’est pas très esthétique. Je suis prêt à sacrifier un peu de précision pour plus d’esthétisme et aimerais lisser cette carte de chaleur. Pour ce faire, j’ai tenté une moyenne mobile avec scipy
:
Le résultat est déjà beaucoup mieux mais j’aimerais dépixeliser les bordures de chaque zone. J’ai tenté de le faire avec du flou mais le résultat ne me satisfait pas :
J’ai également regardé du côté d’algorithmes spécialisés (https://fr.wikipedia.org/wiki/Marching_squares, https://en.wikipedia.org/wiki/Contour_line) mais ils sont lents, le rendu semble beaucoup dépendre de la paramétrisation et ne me satisfait pas visuellement, ni en terme de proximité avec les données brutes.
J’ai pensé à l'upscaling (https://en.wikipedia.org/wiki/Image_scaling) : je double la taille de ma matrice de valeurs en insérant des zéros entre chaque élément (entre chaque ligne et chaque colonne) et remplace les zéros par la moyenne des éléments adjacents :
1 2 3
4 5 6
1 0 2 0 3
0 0 0 0 0
4 0 5 0 6
1 1.5 2 2.5 3
2.5 3 3.5 4 4.5
4 4.5 5 5.5 6
Le rendu est pas mal mais toujours pas suffisant : on peut encore observer des pixels. En plus, je fais cela à la main alors que je pressens qu’une fonction existe déjà dans numpy ou scipy :
z2 = np.zeros((2*z.shape[0]-1, 2*z.shape[1]-1), dtype=float)
z2[::2, ::2] = z
z2[::2, 1::2] = (z[:, 1:] + z[:, :-1]) / 2
z2[1::2, :] = (z2[2::2, :] + z2[:-2:2, :]) / 2
Avez-vous connaissance d’une telle fonction ? Pensez-vous qu’elle soit adaptée à mon problème ?
Par avance merci,
Vayel