Listen to the article

0:00
0:00

Le puissant ouragan Melissa, qui a touché Cuba tôt mercredi 29 octobre après avoir durement frappé la Jamaïque, a été rétrogradé en catégorie 3, a annoncé le Centre national américain des ouragans (NHC). La tempête évolue depuis quelques jours entre les catégories 3 et 5, la plus élevée sur l’échelle de Saffir-Simpson ; à Cuba les vents atteignent 195 km/h.

« Melissa devrait rester un ouragan puissant lorsqu’il traversera Cuba, les Bahamas et les environs des Bermudes », a déclaré le NHC dans son dernier bulletin mardi soir.
Les habitants de Cuba fuient les côtes à l’approche de l’ouragan. Les autorités locales ont déclaré « l’état d’alerte » dans six provinces de l’est du pays et les habitants tentent de stocker vivres, bougies et piles depuis lundi.

En Haïti, à l’est de Cuba, les autorités ont ordonné la fermeture des écoles, des commerces et des administrations mercredi. Avant même de toucher terre mardi en Jamaïque, l’ouragan y a fait trois morts, ainsi que trois autres en Haïti et un en République dominicaine.

${key}

`;
}
}

async function initMap(isDark) {
// GEOJSONtpulouse
const data = await d3.json(
« https://assets-decodeurs.lemonde.fr/hurricane_tracker/last.json »
);
//console.log(data);
let xMin;
let xMax;
let yMin;
let yMax;

function bbox(data){
//Filtrer les données sur lesquelles on veux cadrer (bounding box)
let filteredData = data.features.filter((d) => {
return d.properties.file_path.endsWith(« _lin.json ») || d.properties.file_path.endsWith(« 5day_pgn.json »)
});
let filteredDatabbox = data.features.filter((d) => {
return d.properties.file_path.endsWith(« _lin.json »)
});
console.log(filteredData);
for (let feature of filteredDatabbox){
console.log(feature.geometry.coordinates);
long_min = d3.min(feature.geometry.coordinates[0], (elt) => elt[0])
long_max =d3.max(feature.geometry.coordinates[0], (elt) => elt[0])
lat_min = d3.min(feature.geometry.coordinates[0], (elt) => elt[1])
lat_max = d3.max(feature.geometry.coordinates[0], (elt) => elt[1])

if ((xMin == undefined) || (long_min < xMin)){
xMin = long_min;
}
if ((xMax == undefined) || (long_max < xMax)){
xMax = long_max;
}
if ((yMin == undefined) || (lat_min < yMin)){
yMin = lat_min;
}
if ((yMax == undefined) || (lat_max < yMax)){
yMax = lat_max;
}
console.log(xMin, xMax, yMin, yMax)
return xMin, xMax, yMin, yMax;

}
}

let centerX;
let centerY;
let filteredData = data.features.filter((d) => {
return d.properties.STORMNAME == « Melissa » ;
});

console.log(filteredData, data)

function centerToday(filteredData) {
// Déterminer le centre de la carte en fonction des coordonnées du dernier point du jour
centerX = -76.43457;
centerY = 19.47071;
}

bbox(data);
centerToday(filteredData);

if (data) {
hideSpinner();
fillLegend(isDark);

let tooltip = d3.select(« .map_example_tooltip »);

function fillTooltip({ x, y, object }) {
document.querySelector(« canvas »).style.cursor = « pointer »;

if (object === undefined) return;

let content = «  »;
// LE tooltip à afficher quand on est sur un point past track
if (object.properties.file_path.endsWith(« _pts.json ») && !object.properties.file_path.endsWith(« 5day_pts.json »)) {
content += `

${object.properties.STORMNAME}
– ${object.properties.DAY}/${
object.properties.MONTH
}/${object.properties.YEAR} – ${object.properties.HHMM.slice(0, 2)}:${object.properties.HHMM.slice(2)}

`;

if (object.properties.STORMTYPE == « HU ») {
content += `

Ouragan de catégorie ${object.properties.SS}

`;
}

if (object.properties.STORMTYPE != « HU ») {
content += `

Tempète ou dépression tropicale

`;
}
} else

// LE tooltip à afficher quand on est sur un point prevision 5day
if (object.properties.file_path.endsWith(« 5day_pts.json »)) {
determinerLaDate(object.properties.FLDATELBL)

content += `

${object.properties.STORMNAME.replace(« Hurricane « , » »).toUpperCase()} – ${dateAffichee}

`;

if (object.properties.SSNUM > 0) {
content += `

Ouragan de catégorie ${object.properties.SSNUM}

`;
}

if (object.properties.SSNUM == 0) {
content += `

Tempète ou dépression tropicale

`;
}
}
// Fill tooltip
tooltip
.select(« .tooltipcontent »)
.attr(« aria-label », « Zone inondée »)
.html(content);

// Display and translate tooltip
if (isMobile) {
tooltip
.style(« display », « block »)
.transition()
.duration(200)
.style(« transform », « translate(0, -100px) »);
} else {
tooltip.style(« display », « block »);
}

if (!isMobile) {
tooltip.style(
« transform »,
`translate(` +
`calc(-50% + ${x}px),` +
`calc(-100% + ${y – 6}px))`
);
}
}

// Hide tooltip

function onMouseOut() {
document.querySelector(« canvas »).style.cursor = « unset »;

if (isMobile) {
tooltip
.transition()
.duration(200)
.style(« transform », « translate(0, 100px) »)
.transition()
.delay(200)
.style(« display », « none »);
} else {
tooltip.style(« display », « none »);
}
}
//–> A FAIRE
//Définir le bounding box et le centre en fonction de l’emprise des tracés

let mapSettings;
if (isMobile) {
mapSettings = {
center: [centerX,centerY],
zoom: 3.5,
minZoom: 1,
maxZoom: 5,
bearing: 0,
pitch: 0,
//bounds: [[xMin,yMin],[xMax,yMax]]
};
} else {
mapSettings = {
center: [centerX,centerY],
zoom: 3.5,
minZoom: 2,
maxZoom: 7,
bearing: 0,
pitch: 0,
//bounds: [[xMin,yMin],[xMax,yMax]]
};

}

//Darkmap

theme = await d3.json(isDark? »https://assets-decodeurs.lemonde.fr/decodeurs/assets/protomaps/contrast_daltoniens_darkmode_fr_v0.0.5.json »
: »https://assets-decodeurs.lemonde.fr/decodeurs/assets/protomaps/contrast_daltoniens_fr_v0.0.5.json »
);

const hurricane2024ProtoMap = new maplibregl.Map({
container: « map_example »,
style: {
version: 8,
glyphs:
« https://assets-decodeurs.lemonde.fr/decodeurs/assets/protomaps_fonts/{fontstack}/{range}.pbf »,
sources: {
protomaps: {
type: « vector »,
maxzoom: 15,
//
tiles: [
« https://stg-protomap.8080.lemonde.io/20240111/{z}/{x}/{y}.mvt »,
],
//tiles: [« https://prd-protomap.8084.lemonde.io/20240111/{z}/{x}/{y}.mvt »],
},
},
layers: theme,
},
center: mapSettings.center,
zoom: mapSettings.zoom,
minZoom: mapSettings.minZoom,
maxZoom: mapSettings.maxZoom,
pitch: mapSettings.pitch,
bearing: mapSettings.bearing,
//maxBounds: mapSettings.bounds,
minBounds: mapSettings.bounds,
});

const deckOverlay = new deck.MapboxOverlay({
onHover: ({ x, y, object }) => {
if (object == undefined) return onMouseOut();
return object && fillTooltip({ x, y, object });
},
pickingRadius: isMobile ? 20 : 5,
});

// Add deck layer
hurricane2024ProtoMap.addControl(deckOverlay);

let scale = new maplibregl.ScaleControl({
maxWidth: 80,
unit: « metric »,
});

hurricane2024ProtoMap.addControl(scale);

// Enable exploration

hurricane2024ProtoMap.boxZoom.disable();
hurricane2024ProtoMap.keyboard.disable();
hurricane2024ProtoMap.doubleClickZoom.disable();
hurricane2024ProtoMap.touchZoomRotate.disable();
hurricane2024ProtoMap.dragRotate.disable();
hurricane2024ProtoMap.touchPitch.disable();
hurricane2024ProtoMap.scrollZoom.enable();
hurricane2024ProtoMap.boxZoom.enable();
hurricane2024ProtoMap.touchZoomRotate.enable();
hurricane2024ProtoMap.dragPan.enable();

hurricane2024ProtoMap.flyTo({
center: mapSettings.center,
zoom: mapSettings.zoom + 0.2,
speed: 0.2,
curve: 0.2,
});

hurricane2024ProtoMap.addControl(
new maplibregl.NavigationControl({ showCompass: false }),
« top-left »
);

const layerVisibility = {
all: true,
};

// Render layers function
// –> filtrer en fonction des noms de file_path
function hurricaneRender() {
//filtrer le geojson des lignes de position des ouragans // Past_track
let filteredFeaturesLinesPastTrack = data.features.filter((d) => {
return d.properties.file_path.endsWith(« _lin.json ») && !d.properties.file_path.endsWith(« 5day_lin.json »)
});
let filteredFeaturesLines5Day = data.features.filter((d) => {
return d.properties.file_path.endsWith(« 5day_lin.json »)
});

//filtrer le geojson des points de position des ouragans
let filteredFeaturesPointsPastTrack = data.features.filter((d) => {
return d.properties.file_path.endsWith(« _pts.json ») && !d.properties.file_path.endsWith(« 5day_pts.json »)
});
let filteredFeaturesPoints5Day = data.features.filter((d) => {
return d.properties.file_path.endsWith(« 5day_pts.json »)
});

let filteredFeaturesPolygon5Day = data.features.filter((d) => {
return d.properties.file_path.endsWith(« 5day_pgn.json »)
});
//console.log(filteredFeaturesPoints5Day);

//préparer le dessin du cône
const layerPolygonHurricane = new deck.GeoJsonLayer({
id: « layer-polygon-hurricane »,
data: filteredFeaturesPolygon5Day,
pickable: false,
stroked: true,
filled: true,
extruded: false,
getFillColor: isDark?[255,255,255, 50]:[0, 0, 0, 50],
autoHighlight: true,
highlightColor: [225, 225, 225, 128],
getLineWidth: 1,
lineWidthUnits: « pixels »,
getLineColor: isDark?[255,255,255, 100]:[0, 0, 0, 100],
getLineWidth:1,
lineWidthUnits: « pixels »,
getElevation: 0,

});
//préparer le dessin des lignes passés
const layerLinesHurricanePastTrack = new deck.GeoJsonLayer({
id: « layer-lines-hurricane »,
data: filteredFeaturesLinesPastTrack,
pickable: false,
stroked: true,
filled: true,
extruded: false,
autoHighlight: true,
highlightColor: [225, 225, 225, 128],
getLineWidth: 1.5,
lineWidthUnits: « pixels »,
getLineColor: (d) => {
const SS_scale = d.properties.SS;
return COLORS_ALL[SS_scale];
},

});

//préparer le dessin des points passés
const layerPointsHurricanePastTrack = new deck.GeoJsonLayer({
id: « layer-points-hurricane »,
data: filteredFeaturesPointsPastTrack,
pickable: true,
stroked: true,
filled: true,
extruded: false,
getFillColor: (d) => {
const SS_scale = d.properties.SS;
return COLORS_ALL[SS_scale];
},
autoHighlight: true,
highlightColor: [225, 225, 225, 128],
getLineWidth: 1,
lineWidthUnits: « pixels »,
getLineColor: (d) => {
const SS_scale = d.properties.SS;
return COLORS_ALL[SS_scale];
},
getElevation: 0,
pointRadiusUnits: « pixels »,
getPointRadius: (d) => {
const SS_scale = d.properties.SS;
return SCALE_PAST_POINTS[SS_scale];
},
});
//préparer le dessin des lignes à 5 jours
const layerLinesHurricane5Day = new deck.GeoJsonLayer({
id: « layer-lines-5day-hurricane »,
data: filteredFeaturesLines5Day,
pickable: false,
stroked: true,
filled: true,
extruded: false,
autoHighlight: true,
highlightColor: [225, 225, 225, 128],
getLineWidth: 1.5,
lineWidthUnits: « pixels »,
getLineColor:isDark?[255,255,255, 100]:[0, 0, 0, 100],

});

//préparer le dessin des points à 5 jours
const layerPointsHurricane5Day = new deck.GeoJsonLayer({
id: « layer-points-hurricane-5day »,
data: filteredFeaturesPoints5Day,
pickable: true,
stroked: true,
filled: true,
extruded: false,
getFillColor: (d) => {
const SS_scale = d.properties.SSNUM;
return COLORS_ALL[SS_scale];
},
autoHighlight: true,
highlightColor: [225, 225, 225, 128],
getLineWidth: 1,
lineWidthUnits: « pixels »,
getLineColor: (d) => {
const SS_scale = d.properties.SSNUM;
return COLORS_ALL[SS_scale];
},
getElevation: 0,
//getPointRadius: 1,
pointRadiusUnits: « pixels »,
getPointRadius: (d) => {
const SS_scale = d.properties.SSNUM;
return SCALE_5DAY_POINTS[SS_scale];
},
});

// const layers = [layerPolygonHurricane, layerLinesHurricane5Day, layerPointsHurricane5Day];
const layers = [layerPolygonHurricane, layerLinesHurricanePastTrack, layerLinesHurricane5Day, layerPointsHurricanePastTrack, layerPointsHurricane5Day
];

deckOverlay.setProps({ layers });
}

hurricaneRender();
//console.log(hurricane2024ProtoMap._easeOptions.zoom);
}
}

window.onload = () => {
//isDark?
const isDark = document.querySelector(‘html’).dataset.colorMode == « dark »;
initMap(isDark);
setTimeout(function () {
isMobile =
document.querySelector(« .hurricane_map_2024 »).offsetWidth <= 600
? true
: false;
}, 1000);
};

window.onresize = () => {
isMobile =
document.querySelector(« .hurricane_map_2024 »).offsetWidth <= 600
? true
: false;
};

Clôtures et toits arrachés

Melissa a frappé mardi de plein fouet l’ouest de la Jamaïque alors qu’il se trouvait en catégorie 5. Ses vents soutenus soufflaient alors à près de 300 km/h. Il s’agit du pire ouragan ayant touché la Jamaïque depuis le début des relevés météorologiques.

Le premier ministre jamaïcain, Andrew Holmes, a déclaré que l’île était une « zone sinistrée ». Selon Desmond McKenzie, ministre des collectivités locales, « plus de 530 000 Jamaïcains (…) sont privés d’électricité. Des travaux sont actuellement en cours pour rétablir notre service et donner la priorité aux infrastructures essentielles telles que les hôpitaux, les stations de pompage et les stations de traitement des eaux ».

Saint-Elizabeth, paroisse située dans le sud-ouest de l’île peuplée par 150 000 personnes et « grenier à blé » de la Jamaïque, a été submergée, a expliqué Desmond McKenzie, lors d’une conférence de presse. « Les dégâts à Saint-Elizabeth sont considérables (…) toute la Jamaïque a subi les effets dévastateurs de Melissa », a-t-il ajouté, précisant que plusieurs hôpitaux avaient été endommagés.

A Saint-Catherine, au centre de la Jamaïque, la rivière Rio Cobre est sortie de son lit et les vents puissants ont arraché des clôtures et des toits, a constaté un photographe de l’Agence France-Presse. Kingston, la capitale, a été relativement épargnée, selon Mathue Tapper, un habitant de 31 ans. « J’ai l’impression que le pire est passé », a-t-il confié, disant toutefois être très inquiet pour les zones rurales.

Le Rio Cobre déborde près de Saint-Catherine, en Jamaïque, le 28 octobre 2025.

Inondations et pluies diluviennes

Des bourrasques extrêmement violentes ainsi que des inondations côtières sévères et des pluies diluviennes pouvant provoquer des glissements de terrain catastrophiques étaient attendues à travers le pays. Les autorités avaient appelé la population à faire preuve de vigilance vis-à-vis des crocodiles, qui, du fait des inondations, pourraient être une menace.

Dans ce type de catastrophe, « l’eau tue beaucoup plus de personnes que le vent », avait rappelé en amont le météorologue Kerry Emanuel, insistant sur le rôle joué par le changement climatique. En réchauffant les mers, ce dernier entraîne l’intensification rapide d’un plus grand nombre de tempêtes, comme ce fut le cas pour l’ouragan Melissa.

Le dernier ouragan majeur à avoir touché terre en Jamaïque était l’ouragan Gilbert, en septembre 1988, qui avait tué quarante personnes et fait d’énormes dégâts. Depuis, l’île avait été frappée par plusieurs ouragans, le dernier en date étant Béryl, en juillet 2024, qui n’avait toutefois pas touché terre.

Partager.

Salle de presse de TheNews.re. Nous couvrons l'actualité réunionnaise et internationale avec rigueur et objectivité. Notre mission : informer les citoyens avec des analyses approfondies sur la politique, la société, l'économie et la culture.

Laisser une réponse