{"id":61565,"date":"2026-08-01T09:26:20","date_gmt":"2026-08-01T07:26:20","guid":{"rendered":"https:\/\/alertes-meteo.com\/?page_id=61565"},"modified":"2026-08-01T13:29:36","modified_gmt":"2026-08-01T11:29:36","slug":"bilan-de-juillet-temperatures-maximales-sur-30-stations","status":"publish","type":"page","link":"https:\/\/alertes-meteo.com\/index.php\/blog\/bilan-de-juillet-temperatures-maximales-sur-30-stations\/","title":{"rendered":"Bilan de Juillet : Temp\u00e9ratures Maximales sur 30 Stations"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1575px;margin-left: calc(-5% \/ 2 );margin-right: calc(-5% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-blend:overlay;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.375%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.375%;--awb-width-medium:100%;--awb-spacing-right-medium:2.375%;--awb-spacing-left-medium:2.375%;--awb-width-small:100%;--awb-spacing-right-small:2.375%;--awb-spacing-left-small:2.375%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><!--\nCARTE WORDPRESS \u2014 TEMP\u00c9RATURES MAXIMALES EN JUILLET\n\u00c0 coller int\u00e9gralement dans un bloc \u00ab HTML personnalis\u00e9 \u00bb.\n30 stations de r\u00e9f\u00e9rence \u00b7 normales 1991-2020 \u00b7 records mensuels M\u00e9t\u00e9o-France.\n-->\n\n<style>\n  .txjul26-app, .txjul26-app * { box-sizing: border-box; }\n  .txjul26-app {\n    --tx-ink:#17243a;\n    --tx-muted:#647187;\n    --tx-line:#dce5ef;\n    --tx-red:#d7353f;\n    --tx-orange:#ef7f32;\n    --tx-blue:#197fae;\n    max-width:1120px;\n    margin:26px auto;\n    color:var(--tx-ink);\n    font-family:inherit;\n  }\n  .txjul26-shell {\n    overflow:hidden;\n    border:1px solid var(--tx-line);\n    border-radius:25px;\n    background:#fff;\n    box-shadow:0 16px 44px rgba(28,49,80,.12);\n  }\n  .txjul26-head {\n    position:relative;\n    overflow:hidden;\n    padding:clamp(25px,4vw,43px);\n    color:#fff;\n    background:\n      radial-gradient(circle at 88% 8%,rgba(255,221,94,.28),transparent 26%),\n      linear-gradient(128deg,#07355f 0%,#087da8 35%,#e27635 73%,#b82c45 100%);\n  }\n  .txjul26-head:after {\n    content:\"\";\n    position:absolute;\n    right:6%;\n    bottom:-72px;\n    width:180px;\n    height:180px;\n    border:27px solid rgba(255,255,255,.08);\n    border-radius:50%;\n  }\n  .txjul26-kicker {\n    position:relative;\n    z-index:1;\n    margin:0 0 7px;\n    color:#d7f8ff;\n    font-size:.77rem;\n    font-weight:900;\n    letter-spacing:.12em;\n    text-transform:uppercase;\n  }\n  .txjul26-head h2 {\n    position:relative;\n    z-index:1;\n    margin:0;\n    color:#fff;\n    font-size:clamp(1.55rem,3vw,2.35rem);\n    line-height:1.14;\n  }\n  .txjul26-intro {\n    position:relative;\n    z-index:1;\n    max-width:850px;\n    margin:11px 0 0;\n    color:rgba(255,255,255,.93);\n    font-size:clamp(.92rem,1.4vw,1.04rem);\n    line-height:1.55;\n  }\n  .txjul26-controls {\n    display:flex;\n    align-items:end;\n    gap:14px;\n    padding:18px clamp(16px,3vw,28px);\n    border-bottom:1px solid var(--tx-line);\n    background:#fff;\n  }\n  .txjul26-field { flex:1 1 380px; }\n  .txjul26-field label {\n    display:block;\n    margin:0 0 6px;\n    color:#46566e;\n    font-size:.75rem;\n    font-weight:900;\n    letter-spacing:.07em;\n    text-transform:uppercase;\n  }\n  .txjul26-field select {\n    width:100%;\n    min-height:46px;\n    padding:10px 38px 10px 13px;\n    border:1px solid #cbd8e5;\n    border-radius:12px;\n    color:var(--tx-ink);\n    background:#fff;\n    font:inherit;\n    font-size:.92rem;\n    outline:none;\n  }\n  .txjul26-field select:focus {\n    border-color:#1386b4;\n    box-shadow:0 0 0 3px rgba(19,134,180,.14);\n  }\n  .txjul26-update {\n    flex:0 0 auto;\n    padding:0 0 11px;\n    color:var(--tx-muted);\n    font-size:.76rem;\n    font-weight:750;\n    white-space:nowrap;\n  }\n  .txjul26-update.is-live { color:#19845d; }\n  .txjul26-main {\n    display:grid;\n    grid-template-columns:minmax(0,1.4fr) minmax(310px,.6fr);\n    gap:22px;\n    padding:clamp(17px,3vw,28px);\n    align-items:start;\n  }\n  .txjul26-map-card {\n    position:relative;\n    min-width:0;\n    overflow:hidden;\n    border:1px solid var(--tx-line);\n    border-radius:19px;\n    background:radial-gradient(circle at 50% 42%,#fff,#eff6f8 76%);\n  }\n  .txjul26-map {\n    width:100%;\n    height:620px;\n  }\n  .txjul26-help {\n    margin:0;\n    padding:10px 14px;\n    border-top:1px solid var(--tx-line);\n    color:var(--tx-muted);\n    background:#f8fbfd;\n    font-size:.77rem;\n    line-height:1.45;\n    text-align:center;\n  }\n  .txjul26-side { display:grid; gap:14px; }\n  .txjul26-panel,\n  .txjul26-ranking {\n    overflow:hidden;\n    border:1px solid var(--tx-line);\n    border-radius:18px;\n    background:#fff;\n  }\n  .txjul26-panel-head {\n    padding:18px;\n    color:#fff;\n    background:linear-gradient(128deg,#123b65,#087da8);\n  }\n  .txjul26-panel-label {\n    margin:0 0 5px;\n    color:#c8f3ff;\n    font-size:.7rem;\n    font-weight:900;\n    letter-spacing:.1em;\n    text-transform:uppercase;\n  }\n  .txjul26-panel-head h3 {\n    margin:0;\n    color:#fff;\n    font-size:clamp(1.15rem,2vw,1.42rem);\n    line-height:1.2;\n  }\n  .txjul26-panel-meta {\n    margin:7px 0 0;\n    color:rgba(255,255,255,.86);\n    font-size:.76rem;\n  }\n  .txjul26-stats {\n    display:grid;\n    grid-template-columns:1fr 1fr;\n    gap:9px;\n    padding:14px;\n  }\n  .txjul26-stat {\n    min-width:0;\n    padding:13px 11px;\n    border:1px solid var(--tx-line);\n    border-radius:13px;\n    background:linear-gradient(145deg,#f5f9fc,#fff);\n  }\n  .txjul26-stat span,\n  .txjul26-stat strong,\n  .txjul26-stat small { display:block; }\n  .txjul26-stat span {\n    min-height:2.3em;\n    color:var(--tx-muted);\n    font-size:.7rem;\n    font-weight:770;\n    line-height:1.25;\n  }\n  .txjul26-stat strong {\n    margin-top:5px;\n    font-size:clamp(1.35rem,3vw,1.78rem);\n    line-height:1;\n  }\n  .txjul26-stat small {\n    min-height:1.4em;\n    margin-top:5px;\n    color:var(--tx-muted);\n    font-size:.67rem;\n    line-height:1.3;\n  }\n  .txjul26-stat.normal strong { color:#df722e; }\n  .txjul26-stat.record strong { color:var(--tx-red); }\n  .txjul26-pdf {\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    min-height:41px;\n    margin:0 14px 14px;\n    padding:8px 12px;\n    border:1px solid #bed4e2;\n    border-radius:11px;\n    color:#0877a8;\n    background:#f0f9fc;\n    font-size:.78rem;\n    font-weight:850;\n    text-align:center;\n    text-decoration:none;\n  }\n  .txjul26-pdf:hover { color:#fff; background:#087da8; }\n  .txjul26-ranking h3 {\n    margin:0;\n    padding:15px 16px 12px;\n    color:#24364f;\n    font-size:.94rem;\n  }\n  .txjul26-top {\n    margin:0;\n    padding:0 10px 11px;\n    list-style:none;\n  }\n  .txjul26-top button {\n    display:grid;\n    grid-template-columns:27px minmax(0,1fr) auto;\n    align-items:center;\n    gap:7px;\n    width:100%;\n    padding:7px 6px;\n    border:0;\n    border-radius:9px;\n    color:var(--tx-ink);\n    background:transparent;\n    font:inherit;\n    font-size:.74rem;\n    text-align:left;\n    cursor:pointer;\n  }\n  .txjul26-top button:hover,\n  .txjul26-top button:focus { background:#fff4ec; outline:none; }\n  .txjul26-rank {\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    width:24px;\n    height:24px;\n    border-radius:50%;\n    color:#fff;\n    background:#e68136;\n    font-size:.68rem;\n    font-weight:900;\n  }\n  .txjul26-top-name { overflow:hidden; font-weight:780; text-overflow:ellipsis; white-space:nowrap; }\n  .txjul26-top-value { color:#c84b36; font-weight:900; white-space:nowrap; }\n  .txjul26-legend-wrap {\n    padding:0 clamp(17px,3vw,28px) 23px;\n  }\n  .txjul26-legend {\n    display:grid;\n    grid-template-columns:repeat(6,1fr);\n    overflow:hidden;\n    height:12px;\n    border-radius:999px;\n    box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);\n  }\n  .txjul26-legend span:nth-child(1) { background:#2294c7; }\n  .txjul26-legend span:nth-child(2) { background:#35b69a; }\n  .txjul26-legend span:nth-child(3) { background:#93c854; }\n  .txjul26-legend span:nth-child(4) { background:#f0c13d; }\n  .txjul26-legend span:nth-child(5) { background:#ef8333; }\n  .txjul26-legend span:nth-child(6) { background:#d43b42; }\n  .txjul26-legend-labels {\n    display:flex;\n    justify-content:space-between;\n    margin-top:5px;\n    color:var(--tx-muted);\n    font-size:.68rem;\n    font-weight:750;\n  }\n  .txjul26-note {\n    margin:0;\n    padding:0 clamp(17px,3vw,28px) 25px;\n    color:var(--tx-muted);\n    font-size:.75rem;\n    line-height:1.55;\n  }\n  .txjul26-note strong { color:#3f4e65; }\n  .txjul26-note a { color:#0877a8; font-weight:780; }\n  .txjul26-app .ampopup-content { font-family:inherit; }\n\n  @media (max-width:860px) {\n    .txjul26-main { grid-template-columns:1fr; }\n    .txjul26-map { height:570px; }\n    .txjul26-side { grid-template-columns:1fr 1fr; }\n  }\n  @media (max-width:620px) {\n    .txjul26-app { margin:14px auto; }\n    .txjul26-shell { border-radius:18px; }\n    .txjul26-controls { display:block; }\n    .txjul26-update { padding:9px 2px 0; white-space:normal; }\n    .txjul26-main { gap:14px; padding:12px; }\n    .txjul26-map { height:500px; }\n    .txjul26-side { grid-template-columns:1fr; }\n    .txjul26-legend-wrap { padding-left:14px; padding-right:14px; }\n    .txjul26-note { padding-left:14px; padding-right:14px; }\n  }\n  @media (max-width:390px) {\n    .txjul26-map { height:455px; }\n    .txjul26-stats { grid-template-columns:1fr; }\n    .txjul26-stat span { min-height:0; }\n  }\n  @media (prefers-reduced-motion:reduce) {\n    .txjul26-app * { transition:none!important; }\n  }\n<\/style>\n\n<section class=\"txjul26-app\" id=\"txjul26-app\" aria-labelledby=\"txjul26-title\">\n  <div class=\"txjul26-shell\">\n    <header class=\"txjul26-head\">\n      <p class=\"txjul26-kicker\">Climatologie de juillet \u00b7 30 stations de r\u00e9f\u00e9rence<\/p>\n      <h2 id=\"txjul26-title\">Temp\u00e9ratures maximales moyennes en juillet<\/h2>\n      <p class=\"txjul26-intro\">La valeur affich\u00e9e correspond \u00e0 la moyenne 1991-2020 des temp\u00e9ratures les plus \u00e9lev\u00e9es relev\u00e9es chaque jour. Survolez ou touchez une ville pour d\u00e9couvrir aussi son record absolu de chaleur en juillet.<\/p>\n    <\/header>\n\n    <div class=\"txjul26-controls\">\n      <div class=\"txjul26-field\">\n        <label for=\"txjul26-select\">Choisir une ville<\/label>\n        <select id=\"txjul26-select\" aria-label=\"Choisir une station climatologique\"><\/select>\n      <\/div>\n      <div class=\"txjul26-update\" id=\"txjul26-update\">Valeurs officielles int\u00e9gr\u00e9es<\/div>\n    <\/div>\n\n    <div class=\"txjul26-main\">\n      <div class=\"txjul26-map-card\">\n        <div class=\"txjul26-map\" id=\"txjul26-map\" role=\"img\" aria-label=\"Carte interactive des temp\u00e9ratures maximales moyennes et des records de juillet en France\"><\/div>\n        <p class=\"txjul26-help\">Sur ordinateur : survolez un point. Sur mobile : touchez une ville. Cliquez sur la carte pour conserver la s\u00e9lection.<\/p>\n      <\/div>\n\n      <aside class=\"txjul26-side\">\n        <section class=\"txjul26-panel\" aria-live=\"polite\">\n          <header class=\"txjul26-panel-head\">\n            <p class=\"txjul26-panel-label\">Station s\u00e9lectionn\u00e9e<\/p>\n            <h3 id=\"txjul26-station\">Paris \u2013 Montsouris<\/h3>\n            <p class=\"txjul26-panel-meta\" id=\"txjul26-meta\">Paris (75) \u00b7 indicatif 75114001<\/p>\n          <\/header>\n          <div class=\"txjul26-stats\">\n            <div class=\"txjul26-stat normal\">\n              <span>Maximale quotidienne moyenne<\/span>\n              <strong id=\"txjul26-normal\">25,7 \u00b0C<\/strong>\n              <small>Normale de juillet 1991-2020<\/small>\n            <\/div>\n            <div class=\"txjul26-stat record\">\n              <span>Record absolu en juillet<\/span>\n              <strong id=\"txjul26-record\">42,6 \u00b0C<\/strong>\n              <small id=\"txjul26-date\">25 juillet 2019<\/small>\n            <\/div>\n          <\/div>\n          <a class=\"txjul26-pdf\" id=\"txjul26-pdf\" href=\"https:\/\/object.files.data.gouv.fr\/meteofrance\/data\/synchro_ftp\/REF_STATION\/FICHECLIM_75114001.pdf\" target=\"_blank\" rel=\"noopener\">Consulter la fiche climatologique officielle<\/a>\n        <\/section>\n\n        <section class=\"txjul26-ranking\">\n          <h3>Les 10 maximales moyennes les plus \u00e9lev\u00e9es<\/h3>\n          <ol class=\"txjul26-top\" id=\"txjul26-top\"><\/ol>\n        <\/section>\n      <\/aside>\n    <\/div>\n\n    <div class=\"txjul26-legend-wrap\" aria-label=\"L\u00e9gende des temp\u00e9ratures maximales moyennes\">\n      <div class=\"txjul26-legend\" aria-hidden=\"true\"><span><\/span><span><\/span><span><\/span><span><\/span><span><\/span><span><\/span><\/div>\n      <div class=\"txjul26-legend-labels\"><span>\u2264 22 \u00b0C<\/span><span>24 \u00b0C<\/span><span>26 \u00b0C<\/span><span>28 \u00b0C<\/span><span>30 \u00b0C<\/span><span>\u2265 31 \u00b0C<\/span><\/div>\n    <\/div>\n\n    <p class=\"txjul26-note\"><strong>Lecture :<\/strong> une valeur de 25,7 \u00b0C signifie que, sur la p\u00e9riode 1991-2020, la temp\u00e9rature maximale quotidienne de juillet atteint en moyenne 25,7 \u00b0C. Ce n\u2019est ni la temp\u00e9rature moyenne du mois ni la moyenne des seuls jours de chaleur. Les records correspondent aux donn\u00e9es disponibles dans chaque fiche et leur p\u00e9riode d\u2019observation varie selon la station. Source : <a href=\"https:\/\/www.data.gouv.fr\/datasets\/fiches-climatologiques\" target=\"_blank\" rel=\"noopener\">fiches climatologiques M\u00e9t\u00e9o-France<\/a>, mises \u00e0 jour mensuellement.<\/p>\n  <\/div>\n<\/section>\n\n<script src=\"https:\/\/cdn.amcharts.com\/lib\/4\/core.js\"><\/script>\n<script src=\"https:\/\/cdn.amcharts.com\/lib\/4\/maps.js\"><\/script>\n<script src=\"https:\/\/cdn.amcharts.com\/lib\/4\/geodata\/franceLow.js\"><\/script>\n<script src=\"https:\/\/cdn.amcharts.com\/lib\/4\/themes\/animated.js\"><\/script>\n\n<script>\n(function () {\n  \"use strict\";\n\n  var root = document.getElementById(\"txjul26-app\");\n  var mapElement = document.getElementById(\"txjul26-map\");\n  if (!root || !mapElement || root.dataset.ready === \"1\") return;\n  root.dataset.ready = \"1\";\n\n  var stations = [\n    {id:\"75114001\",title:\"Paris \u2013 Montsouris\",place:\"Paris (75)\",lat:48.821667,lon:2.337833,normal:25.7,record:42.6,date:\"25-2019\"},\n    {id:\"13054001\",title:\"Marseille \u2013 Marignane\",place:\"Bouches-du-Rh\u00f4ne (13)\",lat:43.437667,lon:5.216000,normal:30.7,record:39.7,date:\"26-1983\"},\n    {id:\"06088001\",title:\"Nice \u2013 C\u00f4te d\u2019Azur\",place:\"Alpes-Maritimes (06)\",lat:43.648833,lon:7.209000,normal:27.5,record:37.0,date:\"25-2015\"},\n    {id:\"20148001\",title:\"Bastia \u2013 Poretta\",place:\"Haute-Corse (2B)\",lat:42.540667,lon:9.485167,normal:29.4,record:36.7,date:\"25-2023\"},\n    {id:\"66136001\",title:\"Perpignan \u2013 Rivesaltes\",place:\"Pyr\u00e9n\u00e9es-Orientales (66)\",lat:42.737167,lon:2.872833,normal:29.5,record:40.5,date:\"07-1982\"},\n    {id:\"30189001\",title:\"N\u00eemes \u2013 Courbessac\",place:\"Gard (30)\",lat:43.856833,lon:4.406333,normal:31.5,record:41.3,date:\"01-2025\"},\n    {id:\"31069001\",title:\"Toulouse \u2013 Blagnac\",place:\"Haute-Garonne (31)\",lat:43.621000,lon:1.378833,normal:28.2,record:40.2,date:\"08-1982\"},\n    {id:\"64549001\",title:\"Pau \u2013 Uzein\",place:\"Pyr\u00e9n\u00e9es-Atlantiques (64)\",lat:43.385000,lon:-0.416333,normal:25.9,record:39.2,date:\"08-1982\"},\n    {id:\"14137001\",title:\"Caen \u2013 Carpiquet\",place:\"Calvados (14)\",lat:49.180000,lon:-0.456167,normal:22.9,record:40.1,date:\"18-2022\"},\n    {id:\"16089001\",title:\"Cognac \u2013 Ch\u00e2teaubernard\",place:\"Charente (16)\",lat:45.665000,lon:-0.315833,normal:27.0,record:40.3,date:\"23-2019\"},\n    {id:\"21473001\",title:\"Dijon \u2013 Longvic\",place:\"C\u00f4te-d\u2019Or (21)\",lat:47.267833,lon:5.088333,normal:26.7,record:39.5,date:\"24-2019\"},\n    {id:\"25056001\",title:\"Besan\u00e7on \u2013 Thise\",place:\"Doubs (25)\",lat:47.249000,lon:5.988833,normal:25.7,record:40.3,date:\"28-1921\"},\n    {id:\"26198001\",title:\"Mont\u00e9limar \u2013 Anc\u00f4ne\",place:\"Dr\u00f4me (26)\",lat:44.581167,lon:4.733000,normal:29.8,record:40.0,date:\"23-1929\"},\n    {id:\"29075001\",title:\"Brest \u2013 Guipavas\",place:\"Finist\u00e8re (29)\",lat:48.453833,lon:-4.391167,normal:20.8,record:39.3,date:\"18-2022\"},\n    {id:\"33281001\",title:\"Bordeaux \u2013 M\u00e9rignac\",place:\"Gironde (33)\",lat:44.830667,lon:-0.691333,normal:27.1,record:41.2,date:\"23-2019\"},\n    {id:\"35281001\",title:\"Rennes \u2013 Saint-Jacques\",place:\"Ille-et-Vilaine (35)\",lat:48.068833,lon:-1.734000,normal:24.8,record:40.5,date:\"18-2022\"},\n    {id:\"36063001\",title:\"Ch\u00e2teauroux \u2013 D\u00e9ols\",place:\"Indre (36)\",lat:46.869833,lon:1.741000,normal:26.4,record:41.4,date:\"25-2019\"},\n    {id:\"44020001\",title:\"Nantes \u2013 Atlantique\",place:\"Loire-Atlantique (44)\",lat:47.150000,lon:-1.608833,normal:25.1,record:42.0,date:\"18-2022\"},\n    {id:\"45055001\",title:\"Orl\u00e9ans \u2013 Bricy\",place:\"Loiret (45)\",lat:47.990667,lon:1.778167,normal:25.8,record:41.3,date:\"25-2019\"},\n    {id:\"47091001\",title:\"Agen \u2013 La Garenne\",place:\"Lot-et-Garonne (47)\",lat:44.172167,lon:0.594667,normal:28.0,record:40.6,date:\"12-1949\"},\n    {id:\"10030001\",title:\"Troyes \u2013 Barberey\",place:\"Aube (10)\",lat:48.324667,lon:4.020000,normal:26.2,record:41.8,date:\"25-2019\"},\n    {id:\"54526001\",title:\"Nancy \u2013 Essey\",place:\"Meurthe-et-Moselle (54)\",lat:48.687833,lon:6.221500,normal:25.8,record:40.1,date:\"24-2019\"},\n    {id:\"58160001\",title:\"Nevers \u2013 Marzy\",place:\"Ni\u00e8vre (58)\",lat:46.999333,lon:3.114500,normal:26.0,record:39.4,date:\"31-2020\"},\n    {id:\"59343001\",title:\"Lille \u2013 Lesquin\",place:\"Nord (59)\",lat:50.570000,lon:3.097500,normal:23.7,record:41.5,date:\"25-2019\"},\n    {id:\"63113001\",title:\"Clermont-Ferrand \u2013 Aulnat\",place:\"Puy-de-D\u00f4me (63)\",lat:45.786833,lon:3.149333,normal:26.8,record:40.7,date:\"31-1983\"},\n    {id:\"67124001\",title:\"Strasbourg \u2013 Entzheim\",place:\"Bas-Rhin (67)\",lat:48.549500,lon:7.640333,normal:26.4,record:38.9,date:\"25-2019\"},\n    {id:\"69029001\",title:\"Lyon \u2013 Bron\",place:\"Rh\u00f4ne (69)\",lat:45.721333,lon:4.949167,normal:28.2,record:40.4,date:\"24-2019\"},\n    {id:\"72181001\",title:\"Le Mans \u2013 A\u00e9rodrome\",place:\"Sarthe (72)\",lat:47.945833,lon:0.194167,normal:26.0,record:41.1,date:\"25-2019\"},\n    {id:\"73054001\",title:\"Bourg-Saint-Maurice\",place:\"Savoie (73)\",lat:45.612667,lon:6.763333,normal:26.7,record:38.4,date:\"31-1983\"},\n    {id:\"86027001\",title:\"Poitiers \u2013 Biard\",place:\"Vienne (86)\",lat:46.593833,lon:0.314333,normal:26.1,record:40.8,date:\"27-1947\"}\n  ];\n\n  var select = root.querySelector(\"#txjul26-select\");\n  var updateLabel = root.querySelector(\"#txjul26-update\");\n  var topList = root.querySelector(\"#txjul26-top\");\n  var imageById = Object.create(null);\n  var selectedId = \"75114001\";\n\n  function fr(value) {\n    return new Intl.NumberFormat(\"fr-FR\",{minimumFractionDigits:1,maximumFractionDigits:1}).format(Number(value)) + \" \u00b0C\";\n  }\n  function longDate(raw) {\n    var match = String(raw || \"\").match(\/^(\\d{1,2})-(\\d{4})$\/);\n    return match ? Number(match[1]) + \" juillet \" + match[2] : \"Date non disponible\";\n  }\n  function colorFor(value) {\n    if (value <= 22) return \"#2294c7\";\n    if (value <= 24) return \"#35b69a\";\n    if (value <= 26) return \"#93c854\";\n    if (value <= 28) return \"#f0c13d\";\n    if (value <= 30) return \"#ef8333\";\n    return \"#d43b42\";\n  }\n  function tooltipHtmlFor(station) {\n    return '<div style=\"min-width:205px;padding:2px 1px\"><strong style=\"font-size:14px\">' + station.title + '<\/strong><div style=\"margin-top:7px;color:#dff7ff\">Maximale moyenne : <b>' + fr(station.normal) + '<\/b><\/div><div style=\"margin-top:3px;color:#ffe1d5\">Record de juillet : <b>' + fr(station.record) + '<\/b><\/div><div style=\"margin-top:2px;font-size:11px;color:#d9e4ef\">' + longDate(station.date) + '<\/div><\/div>';\n  }\n  function dataUrl(id,extension) {\n    return \"https:\/\/object.files.data.gouv.fr\/meteofrance\/data\/synchro_ftp\/REF_STATION\/FICHECLIM_\" + id + \".\" + extension;\n  }\n  function stationById(id) {\n    return stations.find(function (station) { return station.id === id; });\n  }\n  \n  function renderStation(station) {\n    if (!station) return;\n    selectedId = station.id;\n    select.value = station.id;\n    root.querySelector(\"#txjul26-station\").textContent = station.title;\n    root.querySelector(\"#txjul26-meta\").textContent = station.place + \" \u00b7 indicatif \" + station.id;\n    root.querySelector(\"#txjul26-normal\").textContent = fr(station.normal);\n    root.querySelector(\"#txjul26-record\").textContent = fr(station.record);\n    root.querySelector(\"#txjul26-date\").textContent = longDate(station.date);\n    root.querySelector(\"#txjul26-pdf\").href = dataUrl(station.id,\"pdf\");\n    \n    Object.keys(imageById).forEach(function (id) {\n      var image = imageById[id];\n      if (!image || !image.children) return;\n      image.children.each(function(child) {\n        if (child.isVisual) {\n          child.scale = id === selectedId ? 1.35 : 1;\n        }\n      });\n    });\n  }\n\n  function renderRanking() {\n    topList.innerHTML = \"\";\n    stations.slice().sort(function (a,b) { return b.normal - a.normal; }).slice(0,10).forEach(function (station,index) {\n      var li = document.createElement(\"li\");\n      var button = document.createElement(\"button\");\n      button.type = \"button\";\n      button.innerHTML = '<span class=\"txjul26-rank\">' + (index + 1) + '<\/span><span class=\"txjul26-top-name\">' + station.title + '<\/span><span class=\"txjul26-top-value\">' + fr(station.normal) + '<\/span>';\n      button.addEventListener(\"click\",function () {\n        renderStation(station);\n      });\n      li.appendChild(button);\n      topList.appendChild(li);\n    });\n  }\n\n  function normalized(value) {\n    return String(value || \"\").normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g,\"\").toLowerCase().replace(\/[^a-z0-9]+\/g,\" \").trim();\n  }\n  function parseSeries(text,label) {\n    var parts = text.replace(\/\\r\/g,\"\").replace(\/\\n\/g,\";\").split(\";\").map(function (part) { return part.trim(); });\n    var wanted = normalized(label);\n    for (var i=0;i<parts.length;i++) {\n      if (normalized(parts[i]).indexOf(wanted) !== 0) continue;\n      for (var j=i+1;j<Math.min(parts.length,i+50);j++) {\n        if (!\/^-?\\d+(?:\\.\\d+)?$|^\\.$|^-$|^--$\/.test(parts[j])) continue;\n        var values = parts.slice(j,j+13);\n        if (values.length !== 13 || !values.every(function (v) { return \/^-?\\d+(?:\\.\\d+)?$|^\\.$|^-$|^--$\/.test(v); })) continue;\n        var dates = null;\n        for (var k=j+13;k<Math.min(parts.length,j+40);k++) {\n          if (normalized(parts[k]) === \"date\") { dates = parts.slice(k+1,k+14); break; }\n        }\n        return {values:values,dates:dates};\n      }\n    }\n    return null;\n  }\n  function numberAt(series,index) {\n    if (!series || !series.values || !series.values[index] || \/^[.\\-]+$\/.test(series.values[index])) return null;\n    var value = Number(series.values[index]);\n    return Number.isFinite(value) ? value : null;\n  }\n\n  function refreshOne(station) {\n    return fetch(dataUrl(station.id,\"data\"),{cache:\"force-cache\"}).then(function (response) {\n      if (!response.ok) throw new Error(\"HTTP \" + response.status);\n      return response.text();\n    }).then(function (text) {\n      var normal = parseSeries(text,\"Temp\u00e9rature maximale (Moyenne\");\n      var record = parseSeries(text,\"La temp\u00e9rature la plus \u00e9lev\u00e9e\");\n      var normalValue = numberAt(normal,6);\n      var recordValue = numberAt(record,6);\n      if (normalValue !== null) station.normal = normalValue;\n      if (recordValue !== null) station.record = recordValue;\n      if (record && record.dates && record.dates[6]) station.date = record.dates[6];\n      \n      var image = imageById[station.id];\n      if (image && image.children) {\n        image.children.each(function(child) {\n          if (child.isVisual) {\n            child.fill = am4core.color(colorFor(station.normal));\n          }\n        });\n      }\n      if (selectedId === station.id) renderStation(station);\n      return true;\n    }).catch(function () { return false; });\n  }\n\n  stations.slice().sort(function (a,b) { return a.title.localeCompare(b.title,\"fr\"); }).forEach(function (station) {\n    var option = document.createElement(\"option\");\n    option.value = station.id;\n    option.textContent = station.title + \" \u2014 \" + fr(station.normal);\n    select.appendChild(option);\n  });\n  select.value = selectedId;\n  \n  select.addEventListener(\"change\",function () {\n    var station = stationById(this.value);\n    renderStation(station);\n  });\n  \n  renderRanking();\n\n  function createMap() {\n    if (typeof am4core === \"undefined\" || typeof am4maps === \"undefined\" || typeof am4geodata_franceLow === \"undefined\") {\n      mapElement.innerHTML = '<p style=\"padding:30px;text-align:center;color:#647187\">La carte n\u2019a pas pu \u00eatre charg\u00e9e.<\/p>';\n      return;\n    }\n    am4core.useTheme(am4themes_animated);\n    var chart = am4core.create(\"txjul26-map\",am4maps.MapChart);\n    chart.geodata = am4geodata_franceLow;\n    chart.projection = new am4maps.projections.Mercator();\n    chart.chartContainer.wheelable = false;\n    chart.seriesContainer.draggable = false;\n    chart.seriesContainer.resizable = false;\n    chart.maxZoomLevel = 1;\n    chart.padding(8,8,8,8);\n\n    var polygons = chart.series.push(new am4maps.MapPolygonSeries());\n    polygons.useGeodata = true;\n    polygons.exclude = [\"FR-GF\",\"FR-GP\",\"FR-MQ\",\"FR-RE\",\"FR-YT\"];\n    var polygon = polygons.mapPolygons.template;\n    polygon.fill = am4core.color(\"#dbe9e7\");\n    polygon.stroke = am4core.color(\"#ffffff\");\n    polygon.strokeWidth = .9;\n    polygon.nonScalingStroke = true;\n    polygon.cursorOverStyle = am4core.MouseCursorStyle.default;\n    \n    var hover = polygon.states.create(\"hover\");\n    hover.properties.fill = am4core.color(\"#cbdedb\");\n\n    var imageSeries = chart.series.push(new am4maps.MapImageSeries());\n    imageSeries.data = stations;\n    imageSeries.dataFields.value = \"normal\";\n    \n    var imageTemplate = imageSeries.mapImages.template;\n    imageTemplate.propertyFields.latitude = \"lat\";\n    imageTemplate.propertyFields.longitude = \"lon\";\n    imageTemplate.nonScaling = true;\n    imageTemplate.cursorOverStyle = am4core.MouseCursorStyle.pointer;\n    \n    \/\/ Fonction infaillible de r\u00e9cup\u00e9ration des donn\u00e9es au clic\n    function forceClick(ev) {\n      var current = ev.target;\n      var station = null;\n      while(current) {\n        if (current.dataItem && current.dataItem.dataContext && current.dataItem.dataContext.id) {\n          station = current.dataItem.dataContext;\n          break;\n        }\n        current = current.parent;\n      }\n      if (station) {\n        renderStation(station);\n      }\n    }\n\n    \/\/ \u00c9coute des interactions globales\n    imageTemplate.events.on(\"hit\", forceClick);\n    imageTemplate.events.on(\"over\", forceClick);\n    \n    \/\/ 1. ZONE DE CLIC INVISIBLE (HIT AREA)\n    \/\/ Cette zone est grande pour garantir que le doigt ou la souris capte le point\n    var hitArea = imageTemplate.createChild(am4core.Circle);\n    hitArea.radius = 24; \/\/ Rayon tr\u00e8s large\n    hitArea.fill = am4core.color(\"#ffffff\");\n    hitArea.fillOpacity = 0; \/\/ Totalement transparent\n    hitArea.strokeOpacity = 0;\n    hitArea.events.on(\"hit\", forceClick);\n    hitArea.events.on(\"over\", forceClick);\n    hitArea.cursorOverStyle = am4core.MouseCursorStyle.pointer;\n\n    \/\/ 2. LE CERCLE VISIBLE (le vrai point m\u00e9t\u00e9o)\n    var circle = imageTemplate.createChild(am4core.Circle);\n    circle.isVisual = true; \n    circle.radius = 7;\n    circle.stroke = am4core.color(\"#ffffff\");\n    circle.strokeWidth = 2;\n    circle.nonScaling = true;\n    circle.propertyFields.fill = \"pointColor\";\n    circle.filters.push(new am4core.DropShadowFilter());\n    circle.events.on(\"hit\", forceClick);\n    circle.events.on(\"over\", forceClick);\n    circle.cursorOverStyle = am4core.MouseCursorStyle.pointer;\n    \n    var circleHover = circle.states.create(\"hover\");\n    circleHover.properties.scale = 1.4;\n\n    \/\/ Infobulle uniquement rattach\u00e9e \u00e0 la vue globale\n    imageTemplate.tooltipHTML = \"{title}\"; \n    imageTemplate.adapter.add(\"tooltipHTML\", function (_html, target) {\n      var station = target.dataItem && target.dataItem.dataContext;\n      return station ? tooltipHtmlFor(station) : _html;\n    });\n\n    function styleTooltip(sprite) {\n      sprite.tooltip.getFillFromObject = false;\n      sprite.tooltip.background.fill = am4core.color(\"#13243b\");\n      sprite.tooltip.background.fillOpacity = .98;\n      sprite.tooltip.background.stroke = am4core.color(\"#ffffff\");\n      sprite.tooltip.background.strokeOpacity = .35;\n      sprite.tooltip.background.strokeWidth = 1;\n      sprite.tooltip.background.cornerRadius = 11;\n      sprite.tooltip.label.fill = am4core.color(\"#ffffff\");\n      sprite.tooltip.label.fontSize = 13;\n      sprite.tooltip.label.padding(11,13,11,13);\n      sprite.tooltip.pointerOrientation = \"vertical\";\n      sprite.tooltip.keepTargetHover = true;\n      sprite.tooltip.interactionsEnabled = false; \n    }\n    \n    styleTooltip(imageTemplate);\n\n    stations.forEach(function (station) { station.pointColor = am4core.color(colorFor(station.normal)); });\n    \n    imageSeries.events.on(\"inited\",function () {\n      imageSeries.mapImages.each(function (image) {\n        var station = image.dataItem && image.dataItem.dataContext;\n        if (!station) return;\n        imageById[station.id] = image;\n        \n        image.children.each(function(child) {\n          if (child.isVisual) {\n            child.fill = am4core.color(colorFor(station.normal));\n          }\n        });\n      });\n      renderStation(stationById(selectedId));\n    });\n  }\n\n  createMap();\n\n  Promise.all(stations.map(refreshOne)).then(function (results) {\n    var success = results.filter(Boolean).length;\n    renderRanking();\n    Array.from(select.options).forEach(function (option) {\n      var station = stationById(option.value);\n      if (station) option.textContent = station.title + \" \u2014 \" + fr(station.normal);\n    });\n    if (success) {\n      updateLabel.textContent = success === stations.length ? \"Donn\u00e9es officielles actualis\u00e9es\" : success + \" stations actualis\u00e9es sur \" + stations.length;\n      updateLabel.classList.add(\"is-live\");\n    } else {\n      updateLabel.textContent = \"Valeurs officielles int\u00e9gr\u00e9es\";\n    }\n  });\n}());\n<\/script><div class=\"fusion-text fusion-text-1\"><h1>Temp\u00e9ratures maximales en juillet &#8211; 30 villes\/stations de r\u00e9f\u00e9rence<\/h1>\n<h2 data-path-to-node=\"3\">Pourquoi cibler ce panel ?<\/h2>\n<p data-path-to-node=\"4\">Ce r\u00e9seau lisse les microclimats locaux. Ses atouts :<\/p>\n<ul data-path-to-node=\"5\">\n<li>\n<p data-path-to-node=\"5,0,0\">Un suivi pr\u00e9cis des canicules<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"5,1,0\">Des comparaisons exactes avec les normales<\/p>\n<\/li>\n<li>\n<p data-path-to-node=\"5,2,0\">Une vision globale sans biais climatique<\/p>\n<\/li>\n<\/ul>\n<h2 data-path-to-node=\"6\">FAQ Climat<\/h2>\n<h3 data-path-to-node=\"7\">Qu&rsquo;est-ce qu&rsquo;une station de r\u00e9f\u00e9rence ?<\/h3>\n<p data-path-to-node=\"8\">Une installation certifi\u00e9e offrant un historique de donn\u00e9es standardis\u00e9es sur plusieurs d\u00e9cennies.<\/p>\n<h3 data-path-to-node=\"9\">Comment est calcul\u00e9e la normale ?<\/h3>\n<p data-path-to-node=\"10\">Elle repr\u00e9sente la moyenne thermique officielle de ces villes \u00e9tablie sur la p\u00e9riode 1991-2020.<\/p>\n<p data-path-to-node=\"12\">Face aux extr\u00eames climatiques, l&rsquo;anticipation est vitale. Consultez d\u00e8s maintenant nos pr\u00e9visions d\u00e9taill\u00e9es sur les 24 prochaines heures, actualis\u00e9es en temps r\u00e9el via le mod\u00e8le de haute r\u00e9solution HARMONIE, pour conna\u00eetre la m\u00e9t\u00e9o exacte de votre r\u00e9gion !<\/p>\n<\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":61566,"parent":1478,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"Temp\u00e9ratures de Juillet : Maxima sur 30 Villes de R\u00e9f\u00e9rence | Alertes-M\u00e9t\u00e9o","_seopress_titles_desc":"D\u00e9couvrez l'analyse des temp\u00e9ratures maximales de juillet via 30 stations de r\u00e9f\u00e9rence. D\u00e9cryptez le climat estival avec notre expertise m\u00e9t\u00e9o.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"temperature mer","footnotes":""},"class_list":["post-61565","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages\/61565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/comments?post=61565"}],"version-history":[{"count":4,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages\/61565\/revisions"}],"predecessor-version":[{"id":61601,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages\/61565\/revisions\/61601"}],"up":[{"embeddable":true,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages\/1478"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/media\/61566"}],"wp:attachment":[{"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/media?parent=61565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}