{"id":156,"date":"2019-01-22T16:51:38","date_gmt":"2019-01-22T15:51:38","guid":{"rendered":"https:\/\/cc-coeurdefrance.fr\/?page_id=156"},"modified":"2026-01-26T13:22:53","modified_gmt":"2026-01-26T13:22:53","slug":"multidisciplinary-nursing-home","status":"publish","type":"page","link":"https:\/\/cc-coeurdefrance.fr\/en\/rubrique\/cadre-de-vie-sante\/maison-de-sante-pluridisciplinaire\/","title":{"rendered":"Doctor in the Coeur de France area"},"content":{"rendered":"\n<p>Survolez une commune pour afficher les professionnels de sant\u00e9. Vous pouvez \u00e9galement filtrer par sp\u00e9cialit\u00e9 en haut \u00e0 droite de la carte.<\/p>\n\n\n\n<style>\n.idweb-wrap {\n    height: 90vh;\n    border: 1px solid #e6ece9;\n    border-radius: 12px;\n    overflow: hidden;\n    position: relative;\n}\n\n.leaflet-container { font: inherit; }\n\n.idweb-tooltip {\n    overflow-y: auto;\n    max-height: 85vh;\n    position: absolute;\n    top: 15vh;\n    left: 10px;\n    background: rgba(255,255,255,.95);\n    padding: 1.5rem;\n    border-radius: 8px;\n    box-shadow: 0 2px 6px rgba(0,0,0,.15);\n    z-index: 999;\n    max-width: 420px;\n    font-size: 1.05rem;\n    color: #333;\n}\n\n.idweb-tooltip ul {\n    margin: .75rem 0;\n    padding-left: 0;\n}\n\n.idweb-tooltip li {\n    list-style: none;\n    margin-bottom: .75rem;\n    padding-left: 1rem;\n    position: relative;\n}\n\n.idweb-tooltip li::before {\n    content: \"\";\n    border-color: transparent #fba531;\n    border-style: solid;\n    border-width: 0.35em 0 0.35em 0.45em;\n    position: absolute;\n    left: 0;\n    top: .45em;\n}\n\n.idweb-filtre {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    z-index: 1000;\n    background: #fff;\n    padding: .5rem .75rem;\n    border-radius: 6px;\n    box-shadow: 0 2px 6px rgba(0,0,0,.15);\n}\n\n.idweb-filtre select {\n    font: inherit;\n    padding: .25rem .4rem;\n}\n<\/style>\n\n<div class=\"idweb-wrap\">\n\n    <div class=\"idweb-filtre\">\n        <select id=\"filtre-specialite\">\n            <option value=\"\">Toutes sp\u00e9cialit\u00e9s<\/option>\n        <\/select>\n    <\/div>\n\n    <div id=\"idweb-map-medecins\" style=\"height:100%;\"><\/div>\n\n    <div class=\"idweb-tooltip\" id=\"idweb-info-medecins\">\n        Chargement des m\u00e9decins\u2026\n    <\/div>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n\n    const communesMembres = [\"Vernais\",\"Saint-Pierre-les-\\u00c9tieux\",\"Saint-Amand-Montrond\",\"Orval\",\"Orcenais\",\"Nozi\\u00e8res\",\"Meillant\",\"Mar\\u00e7ais\",\"La Groutte\",\"La Celle\",\"Farges-Allichamps\",\"Drevant\",\"Coust\",\"Colombiers\",\"Charenton-du-Cher\",\"Bru\\u00e8re-Allichamps\",\"Bouzais\",\"Bessais-le-Fromental\",\"Arpheuilles\"];\n\n    const map = L.map('idweb-map-medecins').setView([46.7, 2.5], 10);\n\n    L.tileLayer(\n        'https:\/\/{s}.basemaps.cartocdn.com\/light_all\/{z}\/{x}\/{y}{r}.png',\n        { attribution: '&copy; OpenStreetMap | &copy; CartoDB' }\n    ).addTo(map);\n\n    const tooltip = document.getElementById('idweb-info-medecins');\n    tooltip.dataset.locked = \"false\";\n\n    const layerCabinets   = L.layerGroup().addTo(map);\n    const layerContoursCC = L.featureGroup().addTo(map);\n    const layerCommunesCC = L.featureGroup().addTo(map);\n\n    const url =\n        'https:\/\/opendata.cc-coeurdefrance.fr\/api\/explore\/v2.1\/catalog\/datasets\/liste_medecins_liberaux_cher_20230227\/records' +\n        '?limit=100&timezone=UTC';\n\n    let medecins = [];\n    let cabinets = {};\n\n    const icon = L.icon({\n        iconUrl: 'data:image\/svg+xml;utf8,' +\n        `<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"32\" height=\"48\" viewBox=\"0 0 24 36\">\n            <path fill=\"%23FF5F00\" d=\"M12 0C5.37 0 0 5.37 0 12c0 9 12 24 12 24s12-15 12-24C24 5.37 18.63 0 12 0z\"\/>\n            <circle cx=\"12\" cy=\"12\" r=\"6\" fill=\"white\"\/>\n        <\/svg>`,\n        iconSize: [32,48],\n        iconAnchor: [16,48]\n    });\n\n    const normalize = s =>\n        (s || '').normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g, \"\")\n        .toLowerCase().replace(\/[-\u2019']\/g,\" \").replace(\/\\s+\/g,\" \").trim();\n\n    const cabinetKey = m =>\n        `${m.point_geo.lat}|${m.point_geo.lon}`;\n\n    \/\/ --- INIT\n    (async () => {\n\n        await chargerContoursCC();\n\n        const r = await fetch(url);\n        const data = await r.json();\n        medecins = data.results || [];\n\n        \/\/ regroupement cabinets\n        medecins.forEach(m => {\n            if (!m.point_geo) return;\n            const key = cabinetKey(m);\n            if (!cabinets[key]) cabinets[key] = [];\n            cabinets[key].push(m);\n        });\n\n        initFiltre();\n        afficherCabinets();\n\n        tooltip.innerHTML = \"Survolez un cabinet pour afficher les m\u00e9decins\u2026\";\n\n    })();\n\n    function initFiltre() {\n        const select = document.getElementById('filtre-specialite');\n        const specs = [...new Set(\n            medecins.map(m => m.specialite_medicale).filter(Boolean)\n        )].sort();\n\n        specs.forEach(s => {\n            const o = document.createElement('option');\n            o.value = s;\n            o.textContent = s;\n            select.appendChild(o);\n        });\n\n        select.addEventListener('change', () => {\n            tooltip.dataset.locked = \"false\";\n            afficherCabinets(select.value);\n        });\n    }\n\n    function afficherCabinets(filtre = \"\") {\n\n        layerCabinets.clearLayers();\n\n        Object.values(cabinets).forEach(liste => {\n\n            const visibles = filtre\n                ? liste.filter(m => m.specialite_medicale === filtre)\n                : liste;\n\n            if (!visibles.length) return;\n\n            const m0 = visibles[0];\n\n            const marker = L.marker(\n                [m0.point_geo.lat, m0.point_geo.lon],\n                { icon }\n            ).addTo(layerCabinets);\n\n            marker.on(\"mouseover\", () => {\n                if (tooltip.dataset.locked === \"true\") return;\n                tooltip.innerHTML = htmlCabinet(visibles);\n            });\n\n            marker.on(\"click\", () => {\n                tooltip.dataset.locked =\n                    tooltip.dataset.locked === \"true\" ? \"false\" : \"true\";\n                tooltip.innerHTML =\n                    htmlCabinet(visibles) +\n                    `<p><em>(Cliquez \u00e0 nouveau pour d\u00e9verrouiller)<\/em><\/p>`;\n            });\n\n        });\n    }\n\n    function htmlCabinet(liste) {\n\n        const ref = liste[0];\n\n        return `\n            <strong>Cabinet m\u00e9dical<\/strong>\n            <p>${ref.adresse || \"\"}<br>${ref.code_postal || \"\"} ${ref.nom_commune || \"\"}<\/p>\n            <hr>\n            <ul>\n                ${liste.map(m => `\n                    <li>\n                        <b>${m.prenom} ${m.nom}<\/b><br>\n                        <small style=\"font-size:15px;\">${m.specialite_medicale}<\/small><br>\n                        <a href=\"tel:${m.numero_telephone}\">\n                            ${m.numero_telephone || \"\u2014\"}\n                        <\/a>\n                    <\/li>\n                `).join(\"\")}\n            <\/ul>\n        `;\n    }\n\n    async function chargerContoursCC() {\n\n        const bounds = L.latLngBounds();\n\n        for (const nom of communesMembres) {\n\n            const url =\n                `https:\/\/geo.api.gouv.fr\/communes?nom=${encodeURIComponent(nom)}&fields=nom,contour,codeDepartement&limit=10`;\n\n            try {\n                const r = await fetch(url);\n                const res = await r.json();\n\n                const best = res.find(c =>\n                    c.codeDepartement === \"18\" &&\n                    normalize(c.nom) === normalize(nom)\n                ) || res[0];\n\n                if (!best || !best.contour) continue;\n\n                const polyCC = L.geoJSON(best.contour, {\n                    style: { color:\"#3c8054\", weight:3, fillOpacity:0 }\n                }).addTo(layerContoursCC);\n\n                L.geoJSON(best.contour, {\n                    style: { color:\"#fba531\", weight:1.4, fillOpacity:0 }\n                }).addTo(layerCommunesCC);\n\n                bounds.extend(polyCC.getBounds());\n\n            } catch(e){}\n        }\n\n        if (bounds.isValid()) {\n            map.fitBounds(bounds, { padding:[40,40] });\n        }\n    }\n\n});\n<\/script>\n\n\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-1&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-1-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-1\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Consulter la liste sous forme de tableau<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-1\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-1-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<iframe loading=\"lazy\" src=\"https:\/\/opendata.cc-coeurdefrance.fr\/explore\/embed\/dataset\/liste_medecins_liberaux_cher_20230227\/table\/?&#038;static=false&#038;datasetcard=false\" width=\"1200\" height=\"1200\" frameborder=\"0\"><\/iframe>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hover over a commune to display the healthcare professionals. You can also filter by specialty at the top right of the map.<\/p>","protected":false},"author":2,"featured_media":14280,"parent":0,"menu_order":7,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"rubrique":[22],"class_list":["post-156","page","type-page","status-publish","has-post-thumbnail","hentry","rubrique-cadre-de-vie-sante"],"acf":[],"_links":{"self":[{"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/pages\/156","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/comments?post=156"}],"version-history":[{"count":0,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/pages\/156\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/media\/14280"}],"wp:attachment":[{"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/media?parent=156"}],"wp:term":[{"taxonomy":"rubrique","embeddable":true,"href":"https:\/\/cc-coeurdefrance.fr\/en\/wp-json\/wp\/v2\/rubrique?post=156"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}