{"id":21184,"date":"2026-07-15T08:22:19","date_gmt":"2026-07-15T11:22:19","guid":{"rendered":"https:\/\/www.comodoro.gov.ar\/miciudad\/?p=21184"},"modified":"2026-07-17T11:34:06","modified_gmt":"2026-07-17T14:34:06","slug":"radios","status":"publish","type":"post","link":"https:\/\/www.comodoro.gov.ar\/miciudad\/2026\/07\/15\/radios\/","title":{"rendered":"Variables censales por radio"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"21184\" class=\"elementor elementor-21184\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66928f4 e-flex e-con-boxed e-con e-parent\" data-id=\"66928f4\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fef7783 elementor-widget elementor-widget-html\" data-id=\"fef7783\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\r\n<style>\r\n  \/* Popups compactos: fuerza el mismo interlineado dentro de WordPress *\/\r\n  .leaflet-popup-content { line-height: 1.25 !important; margin: 8px 12px !important; }\r\n  .leaflet-popup-content p, .leaflet-popup-content b { line-height: 1.25 !important; margin: 0 !important; }\r\n  .leaflet-popup-content table td { line-height: 1.2 !important; padding-top: 0 !important; padding-bottom: 0 !important; }\r\n<\/style>\r\n\r\n<div class=\"visor-geo\" id=\"visor-poblacion-densidad\" style=\"max-width:100%;font-family:system-ui,Segoe UI,Roboto,sans-serif;border:1px solid #e2dfe8;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\">\r\n\r\n  <!-- Cabecera del visor: t\u00edtulo + descripci\u00f3n + logo -->\r\n  <div style=\"display:flex;align-items:center;gap:14px;padding:14px 18px;background:#134768;color:#fff;\">\r\n    <div>\r\n      <div style=\"font-size:17px;font-weight:700;line-height:1.2;\">Poblaci\u00f3n y densidad por radio censal<\/div>\r\n      <div style=\"font-size:12.5px;opacity:0.9;margin-top:2px;\">Comodoro Rivadavia. 325 radios censales (Censo 2022). Hac\u00e9 clic en cada radio para ver el detalle<\/div>\r\n    <\/div>\r\n    <img decoding=\"async\" src=\"https:\/\/agstnrdz.github.io\/ide\/assets\/img\/logotipo_MCR_DGMIT_blanco.png\"\r\n         alt=\"Logo\" style=\"height:44px;width:auto;flex-shrink:0;margin-left:auto;\" onerror=\"this.style.display='none'\">\r\n  <\/div>\r\n\r\n  <div id=\"map-poblacion-densidad\" style=\"height:520px;\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\r\n<script src=\"https:\/\/agstnrdz.github.io\/ide\/layers_censo_gpkg_geojson\/layers_js\/radios_poblacion_densidad_data.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const map = L.map('map-poblacion-densidad').setView([-45.83448112101565, -67.49450745314675], 12);\r\n\r\n  \/\/ Mapa base: Argenmap (IGN)\r\n  const argenmap = L.tileLayer('https:\/\/wms.ign.gob.ar\/geoserver\/gwc\/service\/tms\/1.0.0\/capabaseargenmap@EPSG%3A3857@png\/{z}\/{x}\/{-y}.png', {\r\n    attribution: 'Instituto Geogr\u00e1fico Nacional + OpenStreetMap | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 18\r\n  }).addTo(map);\r\n\r\n  \/\/ Mapa base: Sat\u00e9lite (Google)\r\n  const satelite = L.tileLayer('https:\/\/mt1.google.com\/vt\/lyrs=s&x={x}&y={y}&z={z}', {\r\n    attribution: 'Im\u00e1genes \u00a9 Google | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 20\r\n  });\r\n\r\n  const breaks = [1500, 4000, 6000, 9500];\r\n  const colors = ['#e8e0f5', '#c5aee8', '#9f7ed0', '#7b5ea7', '#4a2d7f'];\r\n  const labels = ['< 1.500', '1.500 \u2013 4.000', '4.000 \u2013 6.000', '6.000 \u2013 9.500', '\u2265 9.500'];\r\n  const nullColor = '#d0cdd6';\r\n\r\n  function getColor(val) {\r\n    if (val == null || isNaN(val)) return nullColor;\r\n    for (let i = breaks.length - 1; i >= 0; i--) if (val >= breaks[i]) return colors[i + 1];\r\n    return colors[0];\r\n  }\r\n\r\n  \/\/ Valor que pinta la coropleta\r\n  function valor(p) {\r\n    return p.densidad;\r\n  }\r\n\r\n  const fmt = v => v != null ? Number(v).toLocaleString('es-AR', { maximumFractionDigits: 1 }) : 'Sin dato';\r\n  const pct = (v, t) => (t > 0 && v != null) ? (v \/ t * 100).toFixed(1) + '%' : '\u2014';\r\n\r\n  function makePopup(p) {\r\n    return `<b>Radio censal ${p.LINK}<\/b><br>` +\r\n      `Poblaci\u00f3n: ${fmt(p.totpob)} hab.<br>` +\r\n      `Superficie: ${fmt(p.area_km2)} km\u00b2<br>` +\r\n      `Densidad: ${fmt(p.densidad)} hab\/km\u00b2`;\r\n  }\r\n\r\n  const estilo = feat => ({\r\n    fillColor:   getColor(valor(feat.properties)),\r\n    fillOpacity: 0.75,\r\n    color:       '#070707',\r\n    weight:      1,\r\n    opacity:     0.5\r\n  });\r\n\r\n  const capa = L.geoJSON(window.RADIOS_POBLACION_DENSIDAD_DATA, {\r\n    style: estilo,\r\n    onEachFeature: (feat, layer) => {\r\n      layer.bindPopup(makePopup(feat.properties), { maxWidth: 300 });\r\n      layer.on('mouseover', () => layer.setStyle({ fillOpacity: 0.75, weight: 3 }));\r\n      layer.on('mouseout',  () => layer.setStyle(estilo(feat)));\r\n    }\r\n  }).addTo(map);\r\n\r\n  \/\/ Control de capas: mapas base (excluyentes) + capa de datos\r\n  L.control.layers(\r\n    { 'Argenmap (IGN)': argenmap, 'Sat\u00e9lite (Google)': satelite },\r\n    { 'Poblaci\u00f3n y densidad': capa },\r\n    { collapsed: false }\r\n  ).addTo(map);\r\n\r\n  \/\/ Leyenda\r\n  const legend = L.control({ position: 'bottomright' });\r\n  legend.onAdd = function () {\r\n    const div = L.DomUtil.create('div', 'info legend');\r\n    div.style.cssText = 'background:#fff;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    div.innerHTML = '<strong>Densidad (hab\/km\u00b2)<\/strong><br>';\r\n    colors.forEach((c, i) => {\r\n      div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${c};margin-right:6px;border:1px solid #999\"><\/span>${labels[i]}<br>`;\r\n    });\r\n    div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${nullColor};margin-right:6px;border:1px solid #999\"><\/span>Sin dato<br>`;\r\n    return div;\r\n  };\r\n  legend.addTo(map);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d1dd694 e-flex e-con-boxed e-con e-parent\" data-id=\"d1dd694\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-469eebe elementor-widget elementor-widget-html\" data-id=\"469eebe\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\r\n<style>\r\n  \/* Popups compactos: fuerza el mismo interlineado dentro de WordPress *\/\r\n  .leaflet-popup-content { line-height: 1.25 !important; margin: 8px 12px !important; }\r\n  .leaflet-popup-content p, .leaflet-popup-content b { line-height: 1.25 !important; margin: 0 !important; }\r\n  .leaflet-popup-content table td { line-height: 1.2 !important; padding-top: 0 !important; padding-bottom: 0 !important; }\r\n<\/style>\r\n\r\n<div class=\"visor-geo\" id=\"visor-viviendas-densidad\" style=\"max-width:100%;font-family:system-ui,Segoe UI,Roboto,sans-serif;border:1px solid #e2dfe8;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\">\r\n\r\n  <!-- Cabecera del visor: t\u00edtulo + descripci\u00f3n + logo -->\r\n  <div style=\"display:flex;align-items:center;gap:14px;padding:14px 18px;background:#134768;color:#fff;\">\r\n    <div>\r\n      <div style=\"font-size:17px;font-weight:700;line-height:1.2;\">Viviendas y densidad por radio censal<\/div>\r\n      <div style=\"font-size:12.5px;opacity:0.9;margin-top:2px;\">Comodoro Rivadavia. 325 radios censales (Censo 2022). Hac\u00e9 clic en cada radio para ver el detalle<\/div>\r\n    <\/div>\r\n    <img decoding=\"async\" src=\"https:\/\/agstnrdz.github.io\/ide\/assets\/img\/logotipo_MCR_DGMIT_blanco.png\"\r\n         alt=\"Logo\" style=\"height:44px;width:auto;flex-shrink:0;margin-left:auto;\" onerror=\"this.style.display='none'\">\r\n  <\/div>\r\n\r\n  <div id=\"map-viviendas-densidad\" style=\"height:520px;\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\r\n<script src=\"https:\/\/agstnrdz.github.io\/ide\/layers_censo_gpkg_geojson\/layers_js\/radios_viviendas_densidad_data.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const map = L.map('map-viviendas-densidad').setView([-45.83448112101565, -67.49450745314675], 12);\r\n\r\n  \/\/ Mapa base: Argenmap (IGN)\r\n  const argenmap = L.tileLayer('https:\/\/wms.ign.gob.ar\/geoserver\/gwc\/service\/tms\/1.0.0\/capabaseargenmap@EPSG%3A3857@png\/{z}\/{x}\/{-y}.png', {\r\n    attribution: 'Instituto Geogr\u00e1fico Nacional + OpenStreetMap | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 18\r\n  }).addTo(map);\r\n\r\n  \/\/ Mapa base: Sat\u00e9lite (Google)\r\n  const satelite = L.tileLayer('https:\/\/mt1.google.com\/vt\/lyrs=s&x={x}&y={y}&z={z}', {\r\n    attribution: 'Im\u00e1genes \u00a9 Google | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 20\r\n  });\r\n\r\n  const breaks = [500, 1750, 2500, 3500];\r\n  const colors = ['#feedde', '#fdbe85', '#fd8d3c', '#e6550d', '#a63603'];\r\n  const labels = ['< 500', '500 \u2013 1.750', '1.750 \u2013 2.500', '2.500 \u2013 3.500', '\u2265 3.500'];\r\n  const nullColor = '#d0cdd6';\r\n\r\n  function getColor(val) {\r\n    if (val == null || isNaN(val)) return nullColor;\r\n    for (let i = breaks.length - 1; i >= 0; i--) if (val >= breaks[i]) return colors[i + 1];\r\n    return colors[0];\r\n  }\r\n\r\n  \/\/ Valor que pinta la coropleta\r\n  function valor(p) {\r\n    return p.dens_viv;\r\n  }\r\n\r\n  const fmt = v => v != null ? Number(v).toLocaleString('es-AR', { maximumFractionDigits: 1 }) : 'Sin dato';\r\n  const pct = (v, t) => (t > 0 && v != null) ? (v \/ t * 100).toFixed(1) + '%' : '\u2014';\r\n\r\n  function makePopup(p) {\r\n    return `<b>Radio censal ${p.geo_id}<\/b><br>` +\r\n      `Viviendas: ${fmt(p.viviendas)}<br>` +\r\n      `Superficie: ${fmt(p.area_km2)} km\u00b2<br>` +\r\n      `Densidad: ${fmt(p.dens_viv)} viv\/km\u00b2`;\r\n  }\r\n\r\n  const estilo = feat => ({\r\n    fillColor:   getColor(valor(feat.properties)),\r\n    fillOpacity: 0.75,\r\n    color:       '#070707',\r\n    weight:      1,\r\n    opacity:     0.5\r\n  });\r\n\r\n  const capa = L.geoJSON(window.RADIOS_VIVIENDAS_DENSIDAD_DATA, {\r\n    style: estilo,\r\n    onEachFeature: (feat, layer) => {\r\n      layer.bindPopup(makePopup(feat.properties), { maxWidth: 300 });\r\n      layer.on('mouseover', () => layer.setStyle({ fillOpacity: 0.75, weight: 3 }));\r\n      layer.on('mouseout',  () => layer.setStyle(estilo(feat)));\r\n    }\r\n  }).addTo(map);\r\n\r\n  \/\/ Control de capas: mapas base (excluyentes) + capa de datos\r\n  L.control.layers(\r\n    { 'Argenmap (IGN)': argenmap, 'Sat\u00e9lite (Google)': satelite },\r\n    { 'Viviendas y densidad': capa },\r\n    { collapsed: false }\r\n  ).addTo(map);\r\n\r\n  \/\/ Leyenda\r\n  const legend = L.control({ position: 'bottomright' });\r\n  legend.onAdd = function () {\r\n    const div = L.DomUtil.create('div', 'info legend');\r\n    div.style.cssText = 'background:#fff;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    div.innerHTML = '<strong>Densidad (viv\/km\u00b2)<\/strong><br>';\r\n    colors.forEach((c, i) => {\r\n      div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${c};margin-right:6px;border:1px solid #999\"><\/span>${labels[i]}<br>`;\r\n    });\r\n    div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${nullColor};margin-right:6px;border:1px solid #999\"><\/span>Sin dato<br>`;\r\n    return div;\r\n  };\r\n  legend.addTo(map);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d3d9791 e-flex e-con-boxed e-con e-parent\" data-id=\"d3d9791\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5dcf710 elementor-widget elementor-widget-html\" data-id=\"5dcf710\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n  \/* Popups compactos: fuerza el mismo interlineado dentro de WordPress *\/\r\n  .leaflet-popup-content { line-height: 1.25 !important; margin: 8px 12px !important; }\r\n  .leaflet-popup-content p, .leaflet-popup-content b { line-height: 1.25 !important; margin: 0 !important; }\r\n  .leaflet-popup-content table td { line-height: 1.2 !important; padding-top: 0 !important; padding-bottom: 0 !important; }\r\n<\/style>\r\n\r\n<div class=\"visor-geo\" id=\"visor-edad-grupos\" style=\"max-width:100%;font-family:system-ui,Segoe UI,Roboto,sans-serif;border:1px solid #e2dfe8;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\">\r\n\r\n  <!-- Cabecera del visor: t\u00edtulo + descripci\u00f3n + logo -->\r\n  <div style=\"display:flex;align-items:center;gap:14px;padding:14px 18px;background:#134768;color:#fff;\">\r\n    <div>\r\n      <div style=\"font-size:17px;font-weight:700;line-height:1.2;\">Grupos de edad por radio censal<\/div>\r\n      <div style=\"font-size:12.5px;opacity:0.9;margin-top:2px;\">Comodoro Rivadavia. 325 radios censales (Censo 2022). Eleg\u00ed un indicador en el selector del mapa<\/div>\r\n    <\/div>\r\n    <img decoding=\"async\" src=\"https:\/\/agstnrdz.github.io\/ide\/assets\/img\/logotipo_MCR_DGMIT_blanco.png\"\r\n         alt=\"Logo\" style=\"height:44px;width:auto;flex-shrink:0;margin-left:auto;\" onerror=\"this.style.display='none'\">\r\n  <\/div>\r\n\r\n  <div id=\"map-edad-grupos\" style=\"height:520px;\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\r\n<script src=\"https:\/\/agstnrdz.github.io\/ide\/layers_censo_gpkg_geojson\/layers_js\/radios_edad_grupos_data.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const map = L.map('map-edad-grupos').setView([-45.83448112101565, -67.49450745314675], 12);\r\n\r\n  \/\/ Mapa base: Argenmap (IGN)\r\n  const argenmap = L.tileLayer('https:\/\/wms.ign.gob.ar\/geoserver\/gwc\/service\/tms\/1.0.0\/capabaseargenmap@EPSG%3A3857@png\/{z}\/{x}\/{-y}.png', {\r\n    attribution: 'Instituto Geogr\u00e1fico Nacional + OpenStreetMap | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 18\r\n  }).addTo(map);\r\n\r\n  \/\/ Mapa base: Sat\u00e9lite (Google)\r\n  const satelite = L.tileLayer('https:\/\/mt1.google.com\/vt\/lyrs=s&x={x}&y={y}&z={z}', {\r\n    attribution: 'Im\u00e1genes \u00a9 Google | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 20\r\n  });\r\n\r\n  const GRUPOS = [\r\n    { key: 'pob_0_14',   label: '0 \u2013 14 a\u00f1os' },\r\n    { key: 'pob_15_64',  label: '15 \u2013 64 a\u00f1os' },\r\n    { key: 'pob_65_mas', label: '65 a\u00f1os y m\u00e1s' }\r\n  ];\r\n\r\n  const INDICADORES = [\r\n    { key: 'pct_0_14',  label: '% poblaci\u00f3n 0 \u2013 14 a\u00f1os',\r\n      valor: p => p.pob_total > 0 ? p.pob_0_14 \/ p.pob_total * 100 : null,\r\n      breaks: [18, 20, 23, 27], labels: ['< 18 %', '18 \u2013 20 %', '20 \u2013 23 %', '23 \u2013 27 %', '\u2265 27 %'],\r\n      colores: ['#edf8e9', '#bae4b3', '#74c476', '#31a354', '#006d2c'],\r\n      leyenda: '% poblaci\u00f3n 0 \u2013 14 a\u00f1os' },\r\n    { key: 'pct_15_64', label: '% poblaci\u00f3n 15 \u2013 64 a\u00f1os',\r\n      valor: p => p.pob_total > 0 ? p.pob_15_64 \/ p.pob_total * 100 : null,\r\n      breaks: [65, 67, 69, 71], labels: ['< 65 %', '65 \u2013 67 %', '67 \u2013 69 %', '69 \u2013 71 %', '\u2265 71 %'],\r\n      colores: ['#eff3ff', '#bdd7e7', '#6baed6', '#2171b5', '#084594'],\r\n      leyenda: '% poblaci\u00f3n 15 \u2013 64 a\u00f1os' },\r\n    { key: 'pct_65_mas', label: '% poblaci\u00f3n 65 a\u00f1os y m\u00e1s',\r\n      valor: p => p.pob_total > 0 ? p.pob_65_mas \/ p.pob_total * 100 : null,\r\n      breaks: [4, 8, 12, 15], labels: ['< 4 %', '4 \u2013 8 %', '8 \u2013 12 %', '12 \u2013 15 %', '\u2265 15 %'],\r\n      colores: ['#f2f0f7', '#cbc9e2', '#9e9ac8', '#756bb1', '#54278f'],\r\n      leyenda: '% poblaci\u00f3n 65 a\u00f1os y m\u00e1s' },\r\n    { key: 'densidad', label: 'Densidad de poblaci\u00f3n',\r\n      valor: p => p.densidad,\r\n      breaks: [1500, 4000, 6000, 9500], labels: ['< 1.500', '1.500 \u2013 4.000', '4.000 \u2013 6.000', '6.000 \u2013 9.500', '\u2265 9.500'],\r\n      colores: ['#feedde', '#fdbe85', '#fd8d3c', '#e6550d', '#a63603'],\r\n      leyenda: 'Densidad (hab\/km\u00b2)' }\r\n  ];\r\n\r\n  const nullColor = '#d0cdd6';\r\n  let indActivo = INDICADORES[0];\r\n\r\n  function getColor(val, ind) {\r\n    if (val == null || isNaN(val)) return nullColor;\r\n    for (let i = ind.breaks.length - 1; i >= 0; i--) if (val >= ind.breaks[i]) return ind.colores[i + 1];\r\n    return ind.colores[0];\r\n  }\r\n\r\n  const estilo = feat => ({\r\n    fillColor:   getColor(indActivo.valor(feat.properties), indActivo),\r\n    fillOpacity: 0.75,\r\n    color:       '#070707',\r\n    weight:      1,\r\n    opacity:     0.5\r\n  });\r\n\r\n  const fmt = v => v != null ? Number(v).toLocaleString('es-AR', { maximumFractionDigits: 1 }) : 'Sin dato';\r\n\r\n  function makePopup(p) {\r\n    const filas = GRUPOS.map(g => {\r\n      const v = p[g.key] || 0;\r\n      const pct = p.pob_total > 0 ? (v \/ p.pob_total * 100).toFixed(1) : '\u2014';\r\n      return `<tr><td style=\"padding:1px 8px 1px 0;color:#555\">${g.label}<\/td><td style=\"text-align:right\">${fmt(v)} <span style=\"color:#999\">(${pct}%)<\/span><\/td><\/tr>`;\r\n    }).join('');\r\n    return `<b>Radio censal ${p.geo_id}<\/b><br>` +\r\n      `Poblaci\u00f3n total: ${fmt(p.pob_total)} hab.` +\r\n      `<table style=\"font-size:11px;margin-top:4px;border-collapse:collapse\">${filas}<\/table>` +\r\n      `Superficie: ${fmt(p.area_km2)} km\u00b2<br>` +\r\n      `Densidad: ${fmt(p.densidad)} hab\/km\u00b2`;\r\n  }\r\n\r\n  const capa = L.geoJSON(window.RADIOS_EDAD_GRUPOS_DATA, {\r\n    style: estilo,\r\n    onEachFeature: (feat, layer) => {\r\n      layer.bindPopup(makePopup(feat.properties), { maxWidth: 300 });\r\n      layer.on('mouseover', () => layer.setStyle({ fillOpacity: 0.75, weight: 3 }));\r\n      layer.on('mouseout',  () => layer.setStyle(estilo(feat)));\r\n    }\r\n  }).addTo(map);\r\n\r\n  \/\/ Control de capas: mapas base (excluyentes) + capa de datos\r\n  L.control.layers(\r\n    { 'Argenmap (IGN)': argenmap, 'Sat\u00e9lite (Google)': satelite },\r\n    { 'Grupos de edad': capa },\r\n    { collapsed: false }\r\n  ).addTo(map);\r\n\r\n  \/\/ Selector de indicador (arriba a la derecha)\r\n  const selector = L.control({ position: 'topright' });\r\n  selector.onAdd = function () {\r\n    const div = L.DomUtil.create('div');\r\n    div.style.cssText = 'background:#fff;padding:6px 8px;border-radius:8px;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    const opts = INDICADORES.map(i => `<option value=\"${i.key}\"${i.key === indActivo.key ? ' selected' : ''}>${i.label}<\/option>`).join('');\r\n    div.innerHTML = `<select id=\"sel-indicador-edad\" style=\"font-size:12px;max-width:210px\">${opts}<\/select>`;\r\n    L.DomEvent.disableClickPropagation(div);\r\n    return div;\r\n  };\r\n  selector.addTo(map);\r\n\r\n  \/\/ Leyenda din\u00e1mica\r\n  const legend = L.control({ position: 'bottomright' });\r\n  legend.onAdd = function () {\r\n    const div = L.DomUtil.create('div', 'info legend');\r\n    div.id = 'leyenda-edad-grupos';\r\n    div.style.cssText = 'background:#fff;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    return div;\r\n  };\r\n  legend.addTo(map);\r\n\r\n  function updateLeyenda() {\r\n    const div = document.getElementById('leyenda-edad-grupos');\r\n    div.innerHTML = `<strong>${indActivo.leyenda}<\/strong><br>`;\r\n    indActivo.colores.forEach((c, i) => {\r\n      div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${c};margin-right:6px;border:1px solid #999\"><\/span>${indActivo.labels[i]}<br>`;\r\n    });\r\n    div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${nullColor};margin-right:6px;border:1px solid #999\"><\/span>Sin dato<br>`;\r\n  }\r\n  updateLeyenda();\r\n\r\n  document.getElementById('sel-indicador-edad').addEventListener('change', function () {\r\n    indActivo = INDICADORES.find(i => i.key === this.value);\r\n    capa.setStyle(estilo);\r\n    updateLeyenda();\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5f7cd5c e-flex e-con-boxed e-con e-parent\" data-id=\"5f7cd5c\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-19085b4 elementor-widget elementor-widget-html\" data-id=\"19085b4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\r\n<style>\r\n  \/* Popups compactos: fuerza el mismo interlineado dentro de WordPress *\/\r\n  .leaflet-popup-content { line-height: 1.25 !important; margin: 8px 12px !important; }\r\n  .leaflet-popup-content p, .leaflet-popup-content b { line-height: 1.25 !important; margin: 0 !important; }\r\n  .leaflet-popup-content table td { line-height: 1.2 !important; padding-top: 0 !important; padding-bottom: 0 !important; }\r\n<\/style>\r\n\r\n<div class=\"visor-geo\" id=\"visor-cobertura-salud\" style=\"max-width:100%;font-family:system-ui,Segoe UI,Roboto,sans-serif;border:1px solid #e2dfe8;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\">\r\n\r\n  <!-- Cabecera del visor: t\u00edtulo + descripci\u00f3n + logo -->\r\n  <div style=\"display:flex;align-items:center;gap:14px;padding:14px 18px;background:#134768;color:#fff;\">\r\n    <div>\r\n      <div style=\"font-size:17px;font-weight:700;line-height:1.2;\">Cobertura de salud por radio censal<\/div>\r\n      <div style=\"font-size:12.5px;opacity:0.9;margin-top:2px;\">Comodoro Rivadavia. 325 radios censales (Censo 2022). Poblaci\u00f3n seg\u00fan tipo de cobertura de salud<\/div>\r\n    <\/div>\r\n    <img decoding=\"async\" src=\"https:\/\/agstnrdz.github.io\/ide\/assets\/img\/logotipo_MCR_DGMIT_blanco.png\"\r\n         alt=\"Logo\" style=\"height:44px;width:auto;flex-shrink:0;margin-left:auto;\" onerror=\"this.style.display='none'\">\r\n  <\/div>\r\n\r\n  <div id=\"map-cobertura-salud\" style=\"height:520px;\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\r\n<script src=\"https:\/\/agstnrdz.github.io\/ide\/layers_censo_gpkg_geojson\/layers_js\/radios_cobertura_salud_data.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const map = L.map('map-cobertura-salud').setView([-45.83448112101565, -67.49450745314675], 12);\r\n\r\n  \/\/ Mapa base: Argenmap (IGN)\r\n  const argenmap = L.tileLayer('https:\/\/wms.ign.gob.ar\/geoserver\/gwc\/service\/tms\/1.0.0\/capabaseargenmap@EPSG%3A3857@png\/{z}\/{x}\/{-y}.png', {\r\n    attribution: 'Instituto Geogr\u00e1fico Nacional + OpenStreetMap | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 18\r\n  }).addTo(map);\r\n\r\n  \/\/ Mapa base: Sat\u00e9lite (Google)\r\n  const satelite = L.tileLayer('https:\/\/mt1.google.com\/vt\/lyrs=s&x={x}&y={y}&z={z}', {\r\n    attribution: 'Im\u00e1genes \u00a9 Google | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 20\r\n  });\r\n\r\n  const breaks = [15, 20, 25, 34];\r\n  const colors = ['#fee5d9', '#fcae91', '#fb6a4a', '#de2d26', '#a50f15'];\r\n  const labels = ['< 15 %', '15 \u2013 20 %', '20 \u2013 25 %', '25 \u2013 34 %', '\u2265 34 %'];\r\n  const nullColor = '#d0cdd6';\r\n\r\n  function getColor(val) {\r\n    if (val == null || isNaN(val)) return nullColor;\r\n    for (let i = breaks.length - 1; i >= 0; i--) if (val >= breaks[i]) return colors[i + 1];\r\n    return colors[0];\r\n  }\r\n\r\n  \/\/ Valor que pinta la coropleta\r\n  function valor(p) {\r\n    return p.porc_sin;\r\n  }\r\n\r\n  const fmt = v => v != null ? Number(v).toLocaleString('es-AR', { maximumFractionDigits: 1 }) : 'Sin dato';\r\n  const pct = (v, t) => (t > 0 && v != null) ? (v \/ t * 100).toFixed(1) + '%' : '\u2014';\r\n\r\n  function makePopup(p) {\r\n    return `<b>Radio censal ${p.geo_id}<\/b><br>` +\r\n      `Prepaga \/ obra social: ${fmt(p.salud_prep)} (${pct(p.salud_prep, p.pers_total)})<br>` +\r\n      `Solo sistema estatal: ${fmt(p.salud_esta)} (${pct(p.salud_esta, p.pers_total)})<br>` +\r\n      `Sin cobertura: ${fmt(p.salud_sin)} (${pct(p.salud_sin, p.pers_total)})<br>` +\r\n      `Total relevado: ${fmt(p.pers_total)} personas`;\r\n  }\r\n\r\n  const estilo = feat => ({\r\n    fillColor:   getColor(valor(feat.properties)),\r\n    fillOpacity: 0.75,\r\n    color:       '#070707',\r\n    weight:      1,\r\n    opacity:     0.5\r\n  });\r\n\r\n  const capa = L.geoJSON(window.RADIOS_COBERTURA_SALUD_DATA, {\r\n    style: estilo,\r\n    onEachFeature: (feat, layer) => {\r\n      layer.bindPopup(makePopup(feat.properties), { maxWidth: 300 });\r\n      layer.on('mouseover', () => layer.setStyle({ fillOpacity: 0.75, weight: 3 }));\r\n      layer.on('mouseout',  () => layer.setStyle(estilo(feat)));\r\n    }\r\n  }).addTo(map);\r\n\r\n  \/\/ Control de capas: mapas base (excluyentes) + capa de datos\r\n  L.control.layers(\r\n    { 'Argenmap (IGN)': argenmap, 'Sat\u00e9lite (Google)': satelite },\r\n    { 'Cobertura de salud': capa },\r\n    { collapsed: false }\r\n  ).addTo(map);\r\n\r\n  \/\/ Leyenda\r\n  const legend = L.control({ position: 'bottomright' });\r\n  legend.onAdd = function () {\r\n    const div = L.DomUtil.create('div', 'info legend');\r\n    div.style.cssText = 'background:#fff;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    div.innerHTML = '<strong>% sin cobertura de salud<\/strong><br>';\r\n    colors.forEach((c, i) => {\r\n      div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${c};margin-right:6px;border:1px solid #999\"><\/span>${labels[i]}<br>`;\r\n    });\r\n    div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${nullColor};margin-right:6px;border:1px solid #999\"><\/span>Sin dato<br>`;\r\n    return div;\r\n  };\r\n  legend.addTo(map);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-39b2790 e-flex e-con-boxed e-con e-parent\" data-id=\"39b2790\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d1b3c7a elementor-widget elementor-widget-html\" data-id=\"d1b3c7a\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\r\n<style>\r\n  \/* Popups compactos: fuerza el mismo interlineado dentro de WordPress *\/\r\n  .leaflet-popup-content { line-height: 1.25 !important; margin: 8px 12px !important; }\r\n  .leaflet-popup-content p, .leaflet-popup-content b { line-height: 1.25 !important; margin: 0 !important; }\r\n  .leaflet-popup-content table td { line-height: 1.2 !important; padding-top: 0 !important; padding-bottom: 0 !important; }\r\n<\/style>\r\n\r\n<div class=\"visor-geo\" id=\"visor-sexo\" style=\"max-width:100%;font-family:system-ui,Segoe UI,Roboto,sans-serif;border:1px solid #e2dfe8;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\">\r\n\r\n  <!-- Cabecera del visor: t\u00edtulo + descripci\u00f3n + logo -->\r\n  <div style=\"display:flex;align-items:center;gap:14px;padding:14px 18px;background:#134768;color:#fff;\">\r\n    <div>\r\n      <div style=\"font-size:17px;font-weight:700;line-height:1.2;\">Distribuci\u00f3n por sexo por radio censal<\/div>\r\n      <div style=\"font-size:12.5px;opacity:0.9;margin-top:2px;\">Comodoro Rivadavia. 325 radios censales (Censo 2022). Azul: mayor\u00eda de varones \u00b7 Rosa: mayor\u00eda de mujeres<\/div>\r\n    <\/div>\r\n    <img decoding=\"async\" src=\"https:\/\/agstnrdz.github.io\/ide\/assets\/img\/logotipo_MCR_DGMIT_blanco.png\"\r\n         alt=\"Logo\" style=\"height:44px;width:auto;flex-shrink:0;margin-left:auto;\" onerror=\"this.style.display='none'\">\r\n  <\/div>\r\n\r\n  <div id=\"map-sexo\" style=\"height:520px;\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\r\n<script src=\"https:\/\/agstnrdz.github.io\/ide\/layers_censo_gpkg_geojson\/layers_js\/radios_sexo_data.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const map = L.map('map-sexo').setView([-45.83448112101565, -67.49450745314675], 12);\r\n\r\n  \/\/ Mapa base: Argenmap (IGN)\r\n  const argenmap = L.tileLayer('https:\/\/wms.ign.gob.ar\/geoserver\/gwc\/service\/tms\/1.0.0\/capabaseargenmap@EPSG%3A3857@png\/{z}\/{x}\/{-y}.png', {\r\n    attribution: 'Instituto Geogr\u00e1fico Nacional + OpenStreetMap | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 18\r\n  }).addTo(map);\r\n\r\n  \/\/ Mapa base: Sat\u00e9lite (Google)\r\n  const satelite = L.tileLayer('https:\/\/mt1.google.com\/vt\/lyrs=s&x={x}&y={y}&z={z}', {\r\n    attribution: 'Im\u00e1genes \u00a9 Google | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 20\r\n  });\r\n\r\n  const breaks = [47, 49, 51, 53];\r\n  const colors = ['#2166ac', '#92c5de', '#f7f7f7', '#f4a582', '#b5546a'];\r\n  const labels = ['< 47 % mujeres', '47 \u2013 49 %', '49 \u2013 51 % (equilibrado)', '51 \u2013 53 %', '\u2265 53 % mujeres'];\r\n  const nullColor = '#d0cdd6';\r\n\r\n  function getColor(val) {\r\n    if (val == null || isNaN(val)) return nullColor;\r\n    for (let i = breaks.length - 1; i >= 0; i--) if (val >= breaks[i]) return colors[i + 1];\r\n    return colors[0];\r\n  }\r\n\r\n  \/\/ Valor que pinta la coropleta\r\n  function valor(p) {\r\n    return p.porc_fem;\r\n  }\r\n\r\n  const fmt = v => v != null ? Number(v).toLocaleString('es-AR', { maximumFractionDigits: 1 }) : 'Sin dato';\r\n  const pct = (v, t) => (t > 0 && v != null) ? (v \/ t * 100).toFixed(1) + '%' : '\u2014';\r\n\r\n  function makePopup(p) {\r\n    return `<b>Radio censal ${p.geo_id}<\/b><br>` +\r\n      `Mujeres: ${fmt(p.femenino)} (${pct(p.femenino, p.total)})<br>` +\r\n      `Varones: ${fmt(p.masculino)} (${pct(p.masculino, p.total)})<br>` +\r\n      `Total: ${fmt(p.total)}<br>` +\r\n      `\u00cdndice de feminidad: ${fmt(p.i_feminida)}`;\r\n  }\r\n\r\n  const estilo = feat => ({\r\n    fillColor:   getColor(valor(feat.properties)),\r\n    fillOpacity: 0.75,\r\n    color:       '#070707',\r\n    weight:      1,\r\n    opacity:     0.5\r\n  });\r\n\r\n  const capa = L.geoJSON(window.RADIOS_SEXO_DATA, {\r\n    style: estilo,\r\n    onEachFeature: (feat, layer) => {\r\n      layer.bindPopup(makePopup(feat.properties), { maxWidth: 300 });\r\n      layer.on('mouseover', () => layer.setStyle({ fillOpacity: 0.75, weight: 3 }));\r\n      layer.on('mouseout',  () => layer.setStyle(estilo(feat)));\r\n    }\r\n  }).addTo(map);\r\n\r\n  \/\/ Control de capas: mapas base (excluyentes) + capa de datos\r\n  L.control.layers(\r\n    { 'Argenmap (IGN)': argenmap, 'Sat\u00e9lite (Google)': satelite },\r\n    { 'Distribuci\u00f3n por sexo': capa },\r\n    { collapsed: false }\r\n  ).addTo(map);\r\n\r\n  \/\/ Leyenda\r\n  const legend = L.control({ position: 'bottomright' });\r\n  legend.onAdd = function () {\r\n    const div = L.DomUtil.create('div', 'info legend');\r\n    div.style.cssText = 'background:#fff;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    div.innerHTML = '<strong>% de mujeres<\/strong><br>';\r\n    colors.forEach((c, i) => {\r\n      div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${c};margin-right:6px;border:1px solid #999\"><\/span>${labels[i]}<br>`;\r\n    });\r\n    div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${nullColor};margin-right:6px;border:1px solid #999\"><\/span>Sin dato<br>`;\r\n    return div;\r\n  };\r\n  legend.addTo(map);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d637e08 e-flex e-con-boxed e-con e-parent\" data-id=\"d637e08\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-77df485 elementor-widget elementor-widget-html\" data-id=\"77df485\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\r\n<style>\r\n  \/* Popups compactos: fuerza el mismo interlineado dentro de WordPress *\/\r\n  .leaflet-popup-content { line-height: 1.25 !important; margin: 8px 12px !important; }\r\n  .leaflet-popup-content p, .leaflet-popup-content b { line-height: 1.25 !important; margin: 0 !important; }\r\n  .leaflet-popup-content table td { line-height: 1.2 !important; padding-top: 0 !important; padding-bottom: 0 !important; }\r\n<\/style>\r\n\r\n<div class=\"visor-geo\" id=\"visor-nbi\" style=\"max-width:100%;font-family:system-ui,Segoe UI,Roboto,sans-serif;border:1px solid #e2dfe8;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\">\r\n\r\n  <!-- Cabecera del visor: t\u00edtulo + descripci\u00f3n + logo -->\r\n  <div style=\"display:flex;align-items:center;gap:14px;padding:14px 18px;background:#134768;color:#fff;\">\r\n    <div>\r\n      <div style=\"font-size:17px;font-weight:700;line-height:1.2;\">Hogares con NBI por radio censal<\/div>\r\n      <div style=\"font-size:12.5px;opacity:0.9;margin-top:2px;\">Comodoro Rivadavia. 325 radios censales (Censo 2022). Necesidades B\u00e1sicas Insatisfechas por hogar<\/div>\r\n    <\/div>\r\n    <img decoding=\"async\" src=\"https:\/\/agstnrdz.github.io\/ide\/assets\/img\/logotipo_MCR_DGMIT_blanco.png\"\r\n         alt=\"Logo\" style=\"height:44px;width:auto;flex-shrink:0;margin-left:auto;\" onerror=\"this.style.display='none'\">\r\n  <\/div>\r\n\r\n  <div id=\"map-nbi\" style=\"height:520px;\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\r\n<script src=\"https:\/\/agstnrdz.github.io\/ide\/layers_censo_gpkg_geojson\/layers_js\/radios_nbi_data.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const map = L.map('map-nbi').setView([-45.83448112101565, -67.49450745314675], 12);\r\n\r\n  \/\/ Mapa base: Argenmap (IGN)\r\n  const argenmap = L.tileLayer('https:\/\/wms.ign.gob.ar\/geoserver\/gwc\/service\/tms\/1.0.0\/capabaseargenmap@EPSG%3A3857@png\/{z}\/{x}\/{-y}.png', {\r\n    attribution: 'Instituto Geogr\u00e1fico Nacional + OpenStreetMap | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 18\r\n  }).addTo(map);\r\n\r\n  \/\/ Mapa base: Sat\u00e9lite (Google)\r\n  const satelite = L.tileLayer('https:\/\/mt1.google.com\/vt\/lyrs=s&x={x}&y={y}&z={z}', {\r\n    attribution: 'Im\u00e1genes \u00a9 Google | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 20\r\n  });\r\n\r\n  const breaks = [2, 4, 6, 9];\r\n  const colors = ['#fee5d9', '#fcae91', '#fb6a4a', '#de2d26', '#a50f15'];\r\n  const labels = ['< 2 %', '2 \u2013 4 %', '4 \u2013 6 %', '6 \u2013 9 %', '\u2265 9 %'];\r\n  const nullColor = '#d0cdd6';\r\n\r\n  function getColor(val) {\r\n    if (val == null || isNaN(val)) return nullColor;\r\n    for (let i = breaks.length - 1; i >= 0; i--) if (val >= breaks[i]) return colors[i + 1];\r\n    return colors[0];\r\n  }\r\n\r\n  \/\/ Valor que pinta la coropleta\r\n  function valor(p) {\r\n    return p.hogares > 0 ? p.nbi_si \/ p.hogares * 100 : null;\r\n  }\r\n\r\n  const fmt = v => v != null ? Number(v).toLocaleString('es-AR', { maximumFractionDigits: 1 }) : 'Sin dato';\r\n  const pct = (v, t) => (t > 0 && v != null) ? (v \/ t * 100).toFixed(1) + '%' : '\u2014';\r\n\r\n  function makePopup(p) {\r\n    const pNbi = pct(p.nbi_si, p.hogares);\r\n    return `<b>Radio censal ${p.geo_id}<\/b><br>` +\r\n      `Hogares con NBI: ${fmt(p.nbi_si)} (${pNbi})<br>` +\r\n      `Hogares sin NBI: ${fmt(p.nbi_no)}<br>` +\r\n      `Total de hogares: ${fmt(p.hogares)}<br>` +\r\n      `Densidad de hogares NBI: ${fmt(p.dens_nbi)} hog\/km\u00b2`;\r\n  }\r\n\r\n  const estilo = feat => ({\r\n    fillColor:   getColor(valor(feat.properties)),\r\n    fillOpacity: 0.75,\r\n    color:       '#070707',\r\n    weight:      1,\r\n    opacity:     0.5\r\n  });\r\n\r\n  const capa = L.geoJSON(window.RADIOS_NBI_DATA, {\r\n    style: estilo,\r\n    onEachFeature: (feat, layer) => {\r\n      layer.bindPopup(makePopup(feat.properties), { maxWidth: 300 });\r\n      layer.on('mouseover', () => layer.setStyle({ fillOpacity: 0.75, weight: 3 }));\r\n      layer.on('mouseout',  () => layer.setStyle(estilo(feat)));\r\n    }\r\n  }).addTo(map);\r\n\r\n  \/\/ Control de capas: mapas base (excluyentes) + capa de datos\r\n  L.control.layers(\r\n    { 'Argenmap (IGN)': argenmap, 'Sat\u00e9lite (Google)': satelite },\r\n    { 'Hogares con NBI': capa },\r\n    { collapsed: false }\r\n  ).addTo(map);\r\n\r\n  \/\/ Leyenda\r\n  const legend = L.control({ position: 'bottomright' });\r\n  legend.onAdd = function () {\r\n    const div = L.DomUtil.create('div', 'info legend');\r\n    div.style.cssText = 'background:#fff;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    div.innerHTML = '<strong>% de hogares con NBI<\/strong><br>';\r\n    colors.forEach((c, i) => {\r\n      div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${c};margin-right:6px;border:1px solid #999\"><\/span>${labels[i]}<br>`;\r\n    });\r\n    div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${nullColor};margin-right:6px;border:1px solid #999\"><\/span>Sin dato<br>`;\r\n    return div;\r\n  };\r\n  legend.addTo(map);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-704c31a e-flex e-con-boxed e-con e-parent\" data-id=\"704c31a\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-27f6fa5 elementor-widget elementor-widget-html\" data-id=\"27f6fa5\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\r\n<style>\r\n  \/* Popups compactos: fuerza el mismo interlineado dentro de WordPress *\/\r\n  .leaflet-popup-content { line-height: 1.25 !important; margin: 8px 12px !important; }\r\n  .leaflet-popup-content p, .leaflet-popup-content b { line-height: 1.25 !important; margin: 0 !important; }\r\n  .leaflet-popup-content table td { line-height: 1.2 !important; padding-top: 0 !important; padding-bottom: 0 !important; }\r\n<\/style>\r\n\r\n<div class=\"visor-geo\" id=\"visor-lugar-nacimiento\" style=\"max-width:100%;font-family:system-ui,Segoe UI,Roboto,sans-serif;border:1px solid #e2dfe8;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\">\r\n\r\n  <!-- Cabecera del visor: t\u00edtulo + descripci\u00f3n + logo -->\r\n  <div style=\"display:flex;align-items:center;gap:14px;padding:14px 18px;background:#134768;color:#fff;\">\r\n    <div>\r\n      <div style=\"font-size:17px;font-weight:700;line-height:1.2;\">Lugar de nacimiento por radio censal<\/div>\r\n      <div style=\"font-size:12.5px;opacity:0.9;margin-top:2px;\">Comodoro Rivadavia. 325 radios censales (Censo 2022). Poblaci\u00f3n seg\u00fan lugar de nacimiento<\/div>\r\n    <\/div>\r\n    <img decoding=\"async\" src=\"https:\/\/agstnrdz.github.io\/ide\/assets\/img\/logotipo_MCR_DGMIT_blanco.png\"\r\n         alt=\"Logo\" style=\"height:44px;width:auto;flex-shrink:0;margin-left:auto;\" onerror=\"this.style.display='none'\">\r\n  <\/div>\r\n\r\n  <div id=\"map-lugar-nacimiento\" style=\"height:520px;\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\r\n<script src=\"https:\/\/agstnrdz.github.io\/ide\/layers_censo_gpkg_geojson\/layers_js\/radios_lugar_nacimiento_data.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const map = L.map('map-lugar-nacimiento').setView([-45.83448112101565, -67.49450745314675], 12);\r\n\r\n  \/\/ Mapa base: Argenmap (IGN)\r\n  const argenmap = L.tileLayer('https:\/\/wms.ign.gob.ar\/geoserver\/gwc\/service\/tms\/1.0.0\/capabaseargenmap@EPSG%3A3857@png\/{z}\/{x}\/{-y}.png', {\r\n    attribution: 'Instituto Geogr\u00e1fico Nacional + OpenStreetMap | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 18\r\n  }).addTo(map);\r\n\r\n  \/\/ Mapa base: Sat\u00e9lite (Google)\r\n  const satelite = L.tileLayer('https:\/\/mt1.google.com\/vt\/lyrs=s&x={x}&y={y}&z={z}', {\r\n    attribution: 'Im\u00e1genes \u00a9 Google | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 20\r\n  });\r\n\r\n  const breaks = [3, 5, 7, 10];\r\n  const colors = ['#eff3ff', '#bdd7e7', '#6baed6', '#2171b5', '#084594'];\r\n  const labels = ['< 3 %', '3 \u2013 5 %', '5 \u2013 7 %', '7 \u2013 10 %', '\u2265 10 %'];\r\n  const nullColor = '#d0cdd6';\r\n\r\n  function getColor(val) {\r\n    if (val == null || isNaN(val)) return nullColor;\r\n    for (let i = breaks.length - 1; i >= 0; i--) if (val >= breaks[i]) return colors[i + 1];\r\n    return colors[0];\r\n  }\r\n\r\n  \/\/ Valor que pinta la coropleta\r\n  function valor(p) {\r\n    return p.porc_extr;\r\n  }\r\n\r\n  const fmt = v => v != null ? Number(v).toLocaleString('es-AR', { maximumFractionDigits: 1 }) : 'Sin dato';\r\n  const pct = (v, t) => (t > 0 && v != null) ? (v \/ t * 100).toFixed(1) + '%' : '\u2014';\r\n\r\n  function makePopup(p) {\r\n    return `<b>Radio censal ${p.geo_id}<\/b><br>` +\r\n      `Nacidos en Chubut: ${fmt(p.nac_chubut)} (${pct(p.nac_chubut, p.pers_total)})<br>` +\r\n      `Nacidos en otra provincia: ${fmt(p.nac_otra_p)} (${pct(p.nac_otra_p, p.pers_total)})<br>` +\r\n      `Nacidos en otro pa\u00eds: ${fmt(p.nac_otro_p)} (${pct(p.nac_otro_p, p.pers_total)})<br>` +\r\n      `Total relevado: ${fmt(p.pers_total)} personas`;\r\n  }\r\n\r\n  const estilo = feat => ({\r\n    fillColor:   getColor(valor(feat.properties)),\r\n    fillOpacity: 0.75,\r\n    color:       '#070707',\r\n    weight:      1,\r\n    opacity:     0.5\r\n  });\r\n\r\n  const capa = L.geoJSON(window.RADIOS_LUGAR_NACIMIENTO_DATA, {\r\n    style: estilo,\r\n    onEachFeature: (feat, layer) => {\r\n      layer.bindPopup(makePopup(feat.properties), { maxWidth: 300 });\r\n      layer.on('mouseover', () => layer.setStyle({ fillOpacity: 0.75, weight: 3 }));\r\n      layer.on('mouseout',  () => layer.setStyle(estilo(feat)));\r\n    }\r\n  }).addTo(map);\r\n\r\n  \/\/ Control de capas: mapas base (excluyentes) + capa de datos\r\n  L.control.layers(\r\n    { 'Argenmap (IGN)': argenmap, 'Sat\u00e9lite (Google)': satelite },\r\n    { 'Lugar de nacimiento': capa },\r\n    { collapsed: false }\r\n  ).addTo(map);\r\n\r\n  \/\/ Leyenda\r\n  const legend = L.control({ position: 'bottomright' });\r\n  legend.onAdd = function () {\r\n    const div = L.DomUtil.create('div', 'info legend');\r\n    div.style.cssText = 'background:#fff;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    div.innerHTML = '<strong>% nacidos en otro pa\u00eds<\/strong><br>';\r\n    colors.forEach((c, i) => {\r\n      div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${c};margin-right:6px;border:1px solid #999\"><\/span>${labels[i]}<br>`;\r\n    });\r\n    div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${nullColor};margin-right:6px;border:1px solid #999\"><\/span>Sin dato<br>`;\r\n    return div;\r\n  };\r\n  legend.addTo(map);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f8401f7 e-flex e-con-boxed e-con e-parent\" data-id=\"f8401f7\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-420b011 elementor-widget elementor-widget-html\" data-id=\"420b011\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\r\n<style>\r\n  \/* Popups compactos: fuerza el mismo interlineado dentro de WordPress *\/\r\n  .leaflet-popup-content { line-height: 1.25 !important; margin: 8px 12px !important; }\r\n  .leaflet-popup-content p, .leaflet-popup-content b { line-height: 1.25 !important; margin: 0 !important; }\r\n  .leaflet-popup-content table td { line-height: 1.2 !important; padding-top: 0 !important; padding-bottom: 0 !important; }\r\n<\/style>\r\n\r\n<div class=\"visor-geo\" id=\"visor-hogar-migrantes\" style=\"max-width:100%;font-family:system-ui,Segoe UI,Roboto,sans-serif;border:1px solid #e2dfe8;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\">\r\n\r\n  <!-- Cabecera del visor: t\u00edtulo + descripci\u00f3n + logo -->\r\n  <div style=\"display:flex;align-items:center;gap:14px;padding:14px 18px;background:#134768;color:#fff;\">\r\n    <div>\r\n      <div style=\"font-size:17px;font-weight:700;line-height:1.2;\">Hogares con integrantes migrantes por radio censal<\/div>\r\n      <div style=\"font-size:12.5px;opacity:0.9;margin-top:2px;\">Comodoro Rivadavia. 325 radios censales (Censo 2022). Hogares con al menos un integrante migrante<\/div>\r\n    <\/div>\r\n    <img decoding=\"async\" src=\"https:\/\/agstnrdz.github.io\/ide\/assets\/img\/logotipo_MCR_DGMIT_blanco.png\"\r\n         alt=\"Logo\" style=\"height:44px;width:auto;flex-shrink:0;margin-left:auto;\" onerror=\"this.style.display='none'\">\r\n  <\/div>\r\n\r\n  <div id=\"map-hogar-migrantes\" style=\"height:520px;\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\r\n<script src=\"https:\/\/agstnrdz.github.io\/ide\/layers_censo_gpkg_geojson\/layers_js\/radios_hogar_migrantes_data.js\"><\/script>\r\n\r\n<script>\r\n(function () {\r\n  const map = L.map('map-hogar-migrantes').setView([-45.83448112101565, -67.49450745314675], 12);\r\n\r\n  \/\/ Mapa base: Argenmap (IGN)\r\n  const argenmap = L.tileLayer('https:\/\/wms.ign.gob.ar\/geoserver\/gwc\/service\/tms\/1.0.0\/capabaseargenmap@EPSG%3A3857@png\/{z}\/{x}\/{-y}.png', {\r\n    attribution: 'Instituto Geogr\u00e1fico Nacional + OpenStreetMap | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 18\r\n  }).addTo(map);\r\n\r\n  \/\/ Mapa base: Sat\u00e9lite (Google)\r\n  const satelite = L.tileLayer('https:\/\/mt1.google.com\/vt\/lyrs=s&x={x}&y={y}&z={z}', {\r\n    attribution: 'Im\u00e1genes \u00a9 Google | Fuente: INDEC, 2022. Procesamiento: Modernizaci\u00f3n e Investigaci\u00f3n Territorial',\r\n    minZoom: 3,\r\n    maxZoom: 20\r\n  });\r\n\r\n  const breaks = [7, 10, 13, 20];\r\n  const colors = ['#edf8e9', '#bae4b3', '#74c476', '#31a354', '#006d2c'];\r\n  const labels = ['< 7 %', '7 \u2013 10 %', '10 \u2013 13 %', '13 \u2013 20 %', '\u2265 20 %'];\r\n  const nullColor = '#d0cdd6';\r\n\r\n  function getColor(val) {\r\n    if (val == null || isNaN(val)) return nullColor;\r\n    for (let i = breaks.length - 1; i >= 0; i--) if (val >= breaks[i]) return colors[i + 1];\r\n    return colors[0];\r\n  }\r\n\r\n  \/\/ Valor que pinta la coropleta\r\n  function valor(p) {\r\n    return p.hog_porc_m;\r\n  }\r\n\r\n  const fmt = v => v != null ? Number(v).toLocaleString('es-AR', { maximumFractionDigits: 1 }) : 'Sin dato';\r\n  const pct = (v, t) => (t > 0 && v != null) ? (v \/ t * 100).toFixed(1) + '%' : '\u2014';\r\n\r\n  function makePopup(p) {\r\n    return `<b>Radio censal ${p.geo_id}<\/b><br>` +\r\n      `Hogares con migrantes: ${fmt(p.hog_migran)} (${pct(p.hog_migran, p.hog_total)})<br>` +\r\n      `Hogares sin migrantes: ${fmt(p.hog_no_mig)}<br>` +\r\n      `Total de hogares: ${fmt(p.hog_total)}`;\r\n  }\r\n\r\n  const estilo = feat => ({\r\n    fillColor:   getColor(valor(feat.properties)),\r\n    fillOpacity: 0.75,\r\n    color:       '#070707',\r\n    weight:      1,\r\n    opacity:     0.5\r\n  });\r\n\r\n  const capa = L.geoJSON(window.RADIOS_HOGAR_MIGRANTES_DATA, {\r\n    style: estilo,\r\n    onEachFeature: (feat, layer) => {\r\n      layer.bindPopup(makePopup(feat.properties), { maxWidth: 300 });\r\n      layer.on('mouseover', () => layer.setStyle({ fillOpacity: 0.75, weight: 3 }));\r\n      layer.on('mouseout',  () => layer.setStyle(estilo(feat)));\r\n    }\r\n  }).addTo(map);\r\n\r\n  \/\/ Control de capas: mapas base (excluyentes) + capa de datos\r\n  L.control.layers(\r\n    { 'Argenmap (IGN)': argenmap, 'Sat\u00e9lite (Google)': satelite },\r\n    { 'Hogares con migrantes': capa },\r\n    { collapsed: false }\r\n  ).addTo(map);\r\n\r\n  \/\/ Leyenda\r\n  const legend = L.control({ position: 'bottomright' });\r\n  legend.onAdd = function () {\r\n    const div = L.DomUtil.create('div', 'info legend');\r\n    div.style.cssText = 'background:#fff;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 1px 4px rgba(0,0,0,0.3)';\r\n    div.innerHTML = '<strong>% de hogares con migrantes<\/strong><br>';\r\n    colors.forEach((c, i) => {\r\n      div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${c};margin-right:6px;border:1px solid #999\"><\/span>${labels[i]}<br>`;\r\n    });\r\n    div.innerHTML += `<span style=\"display:inline-block;width:12px;height:12px;background:${nullColor};margin-right:6px;border:1px solid #999\"><\/span>Sin dato<br>`;\r\n    return div;\r\n  };\r\n  legend.addTo(map);\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Poblaci\u00f3n y densidad por radio censal Comodoro Rivadavia. 325 radios censales (Censo 2022). Hac\u00e9 clic<\/p>\n","protected":false},"author":1,"featured_media":21244,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[269],"tags":[],"class_list":["post-21184","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visores"],"_links":{"self":[{"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/posts\/21184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/comments?post=21184"}],"version-history":[{"count":13,"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/posts\/21184\/revisions"}],"predecessor-version":[{"id":21245,"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/posts\/21184\/revisions\/21245"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/media\/21244"}],"wp:attachment":[{"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/media?parent=21184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/categories?post=21184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.comodoro.gov.ar\/miciudad\/wp-json\/wp\/v2\/tags?post=21184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}