{"id":6184,"date":"2026-06-02T17:39:01","date_gmt":"2026-06-02T15:39:01","guid":{"rendered":"https:\/\/www.ibo.guide\/mapa-de-znifr\/"},"modified":"2026-06-02T18:26:03","modified_gmt":"2026-06-02T16:26:03","slug":"mapa-de-znifr","status":"publish","type":"page","link":"https:\/\/www.ibo.guide\/es\/mapa-de-znifr\/","title":{"rendered":"Mapa de Znifr\u00ae"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Encuentre lugares dog friendly en cualquier parte del mundo.<\/h2>\n\n<p class=\"wp-block-paragraph\">Busque cafeter\u00edas, restaurantes, parques, veterinarios y otros lugares donde su perro es bienvenido \u2014 en cualquier parte del mundo. Basta con introducir una ciudad o una direcci\u00f3n, o usar su ubicaci\u00f3n actual. Los datos proceden de OpenStreetMap, la mayor base de datos cartogr\u00e1fica abierta del mundo, que la comunidad actualiza constantemente en todo el mundo. Filtre por categor\u00eda y descubra nuevos lugares a los que puede llevar a su compa\u00f1ero de cuatro patas.<\/p>\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/leaflet@1.9.4\/dist\/leaflet.min.css\"\/>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/leaflet@1.9.4\/dist\/leaflet.min.js\"><\/script>\n<style>\n.dfm-tip {\n    background:#fff!important; border:1px solid #ddd!important; border-radius:10px!important;\n    padding:8px 11px!important; box-shadow:0 3px 10px rgba(0,0,0,.13)!important;\n    font-size:13px!important; line-height:1.5!important; min-width:160px!important;\n}\n.leaflet-tooltip.dfm-tip::before { display:none!important; }\n.dfm-loader {\n    position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);\n    z-index:1000; pointer-events:none; display:none;\n}\n@keyframes dfm-spin { to { transform:rotate(360deg); } }\n<\/style>\n\n<div id=\"dfm-1-wrap\" style=\"font-family:inherit;width:100%;box-sizing:border-box;\">\n\n  <div style=\"display:flex;flex-direction:column;gap:8px;padding:10px 0 8px;\">\n\n    <div style=\"display:flex;gap:6px;align-items:center;\">\n      <button id=\"dfm-1-locate\"\n        title=\"Mi ubicaci\u00f3n\"\n        style=\"padding:0 12px;height:38px;border:1.5px solid #e63946;border-radius:8px;background:#fff;cursor:pointer;font-size:18px;flex-shrink:0;\">\ud83d\udccd<\/button>\n      <div style=\"position:relative;flex:1;\">\n        <input id=\"dfm-1-search\"\n          type=\"text\"\n          placeholder=\"Busca una ciudad o una direcci\u00f3n\u2026\"\n          autocomplete=\"off\"\n          style=\"width:100%;padding:8px 12px 8px 34px;border:1.5px solid #ddd;border-radius:8px;font-size:14px;box-sizing:border-box;outline:none;\"\n          onfocus=\"this.style.borderColor='#e63946'\"\n          onblur=\"this.style.borderColor='#ddd'\"\/>\n        <span style=\"position:absolute;left:10px;top:50%;transform:translateY(-50%);color:#aaa;\">\ud83d\udd0d<\/span>\n        <div id=\"dfm-1-suggestions\"\n          style=\"display:none;position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid #ddd;\n                 border-top:none;border-radius:0 0 8px 8px;box-shadow:0 4px 12px rgba(0,0,0,.1);z-index:9999;max-height:220px;overflow-y:auto;\"><\/div>\n      <\/div>\n    <\/div>\n\n    <div style=\"display:flex;gap:6px;flex-wrap:wrap;justify-content:center;\">\n            <button class=\"dfm-btn\"\n        data-map=\"dfm-1\"\n        data-cat=\"cafe\"\n        data-color=\"#C04828\"\n        onclick=\"dfmToggle(this)\"\n        style=\"padding:6px 12px;border-radius:20px;border:2px solid #e63946;background:#fff;color:#333;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;transition:opacity 0.2s;\">\n        <span style=\"font-size:16px;line-height:1;\">\u2615<\/span><span style=\"margin-left:6px;\">Caf\u00e9s<\/span>      <\/button>\n            <button class=\"dfm-btn\"\n        data-map=\"dfm-1\"\n        data-cat=\"restaurant\"\n        data-color=\"#185FA5\"\n        onclick=\"dfmToggle(this)\"\n        style=\"padding:6px 12px;border-radius:20px;border:2px solid #e63946;background:#fff;color:#333;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;transition:opacity 0.2s;\">\n        <span style=\"font-size:16px;line-height:1;\">\ud83c\udf7d\ufe0f<\/span><span style=\"margin-left:6px;\">Restaurantes<\/span>      <\/button>\n            <button class=\"dfm-btn\"\n        data-map=\"dfm-1\"\n        data-cat=\"park\"\n        data-color=\"#3B6D11\"\n        onclick=\"dfmToggle(this)\"\n        style=\"padding:6px 12px;border-radius:20px;border:2px solid #e63946;background:#fff;color:#333;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;transition:opacity 0.2s;\">\n        <span style=\"font-size:16px;line-height:1;\">\ud83c\udf33<\/span><span style=\"margin-left:6px;\">Parques<\/span>      <\/button>\n            <button class=\"dfm-btn\"\n        data-map=\"dfm-1\"\n        data-cat=\"boarding\"\n        data-color=\"#D4690A\"\n        onclick=\"dfmToggle(this)\"\n        style=\"padding:6px 12px;border-radius:20px;border:2px solid #e63946;background:#fff;color:#333;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;transition:opacity 0.2s;\">\n        <span style=\"font-size:16px;line-height:1;\">\ud83d\udc15\u200d\ud83e\uddba<\/span><span style=\"margin-left:6px;\">Hoteles para perros<\/span>      <\/button>\n            <button class=\"dfm-btn\"\n        data-map=\"dfm-1\"\n        data-cat=\"vet\"\n        data-color=\"#533AB7\"\n        onclick=\"dfmToggle(this)\"\n        style=\"padding:6px 12px;border-radius:20px;border:2px solid #e63946;background:#fff;color:#333;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;transition:opacity 0.2s;\">\n        <span style=\"font-size:16px;line-height:1;\">\ud83e\ude7a<\/span><span style=\"margin-left:6px;\">Veterinarios<\/span>      <\/button>\n            <button class=\"dfm-btn\"\n        data-map=\"dfm-1\"\n        data-cat=\"shop\"\n        data-color=\"#0F6E56\"\n        onclick=\"dfmToggle(this)\"\n        style=\"padding:6px 12px;border-radius:20px;border:2px solid #e63946;background:#fff;color:#333;font-size:12px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;transition:opacity 0.2s;\">\n        <span style=\"font-size:16px;line-height:1;\">\ud83d\uded2<\/span><span style=\"margin-left:6px;\">Tiendas de mascotas<\/span>      <\/button>\n          <\/div>\n\n  <\/div>\n\n  <div style=\"position:relative;\">\n    <div id=\"dfm-1\"\n      style=\"width:100%;height:600px;border-radius:12px;border:1px solid #e0e0e0;overflow:hidden;\"><\/div>\n    <div id=\"dfm-1-loader\" class=\"dfm-loader\">\n      <div style=\"width:38px;height:38px;border:3px solid rgba(255,255,255,0.6);border-top-color:#e63946;border-radius:50%;animation:dfm-spin 0.75s linear infinite;box-shadow:0 2px 8px rgba(0,0,0,0.15);\"><\/div>\n    <\/div>\n  <\/div>\n\n  <div id=\"dfm-1-status\"\n    style=\"font-size:12px;color:#888;padding:6px 2px;\">\n    Cargando el mapa\u2026  <\/div>\n\n<\/div>\n\n<script>\n(function(){\n  var MID   = \"dfm-1\";\n  var LAT   = 39.9625;\n  var LNG   = -83.0061;\n  var ZOOM  = 13;\n\n  var TILE = 'https:\/\/{s}.basemaps.cartocdn.com\/light_all\/{z}\/{x}\/{y}{r}.png';\n  var ATTR = '&copy; <a href=\"https:\/\/carto.com\/\">CartoDB<\/a> &copy; <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a> contributors';\n\n  var COLORS = { cafe:'#C04828', restaurant:'#185FA5', park:'#3B6D11', boarding:'#D4690A', vet:'#533AB7', shop:'#0F6E56' };\n  var LABELS = {\n    cafe:      \"Cafeter\\u00eda\",\n    restaurant:\"Restaurante\\\/Bar\",\n    park:      \"Parque\",\n    boarding:  \"Hotel \\\/ pensi\\u00f3n canina\",\n    vet:       \"Veterinario\",\n    shop:      \"Tienda de mascotas\"  };\n  var DOGS = {\n    yes:      \"\\ud83d\\udc3e Apto para perros\",\n    leashed:  \"\\ud83d\\udc3e Con correa\",\n    unleashed:\"\\ud83d\\udc3e Sin correa\"  };\n  var STR = {\n    loading:   \"Cargando lugares aptos para perros\\u2026\",\n    loaded:    \"Mostrando %1 de %2 lugares aptos para perros \\u00b7 Fuente: OpenStreetMap\",\n    ratelimit: \"La API de Overpass est\\u00e1 saturada, reintentando\\u2026\",\n    error:     \"Error al cargar. Prueba a mover el mapa.\",\n    locTip:    \"\\ud83d\\udccd Mi ubicaci\\u00f3n\",\n    locDenied: \"Se deneg\\u00f3 el acceso a la ubicaci\\u00f3n. Act\\u00edvalo en la configuraci\\u00f3n del navegador.\",\n    locError:  \"No se pudo determinar la ubicaci\\u00f3n.\",\n    noGeo:     \"Tu navegador no es compatible con la geolocalizaci\\u00f3n.\",\n    dogYes:    \"\\ud83d\\udc3e Apto para perros\"  };\n\n  var map, layer, locMarker;\n  var filters   = new Set(['cafe','restaurant','park','boarding','vet','shop']);\n  var markers   = [];\n  var loadTmr   = null;\n  var bgTmr     = null;\n  var cache     = {};\n  var lastLoad  = 0;\n  var pending   = false;\n  var bgLoading = false;\n  var PREFETCH  = 2.5;\n\n  function bbox(b, dec) {\n    return b.getSouth().toFixed(dec)+','+b.getWest().toFixed(dec)+','+b.getNorth().toFixed(dec)+','+b.getEast().toFixed(dec);\n  }\n\n  function expandBounds(b, f) {\n    var clat=(b.getNorth()+b.getSouth())\/2, clng=(b.getEast()+b.getWest())\/2;\n    var dlat=(b.getNorth()-b.getSouth())\/2*f, dlng=(b.getEast()-b.getWest())\/2*f;\n    return { s:(clat-dlat).toFixed(4), w:(clng-dlng).toFixed(4), n:(clat+dlat).toFixed(4), e:(clng+dlng).toFixed(4) };\n  }\n\n  function mergeToCache(key, els) {\n    if (!cache[key]) cache[key]={};\n    els.forEach(function(el){ if(el.id) cache[key][el.id]=el; });\n  }\n\n  function getVisible(b) {\n    var s=parseFloat(b.getSouth()), w=parseFloat(b.getWest()),\n        n=parseFloat(b.getNorth()), e=parseFloat(b.getEast());\n    var seen={}, res=[];\n    Object.keys(cache).forEach(function(k){\n      Object.values(cache[k]).forEach(function(el){\n        if(!el.lat||!el.lon||seen[el.id]) return;\n        if(el.lat>=s&&el.lat<=n&&el.lon>=w&&el.lon<=e){ seen[el.id]=1; res.push(el); }\n      });\n    });\n    return res;\n  }\n\n  function cat(t) {\n    if (t.leisure==='park'||t.leisure==='dog_park')       return 'park';\n    if (t.amenity==='veterinary')                         return 'vet';\n    if (t.amenity==='cafe')                               return 'cafe';\n    if (t.amenity==='restaurant'||t.amenity==='bar')      return 'restaurant';\n    if (t.amenity==='animal_boarding')                    return 'boarding';\n    if (t.amenity==='animal_shelter'&&t.boarding==='yes') return 'boarding';\n    if (t.shop==='pet')                                   return 'shop';\n    return null;\n  }\n\n  var CAT_ICONS = { cafe:'\u2615', restaurant:'\ud83c\udf7d\ufe0f', park:'\ud83c\udf33', boarding:'\ud83d\udc15\u200d\ud83e\uddba', vet:'\ud83e\ude7a', shop:'\ud83d\uded2' };\n\n  function icon(c) {\n    var emoji = CAT_ICONS[c]||'\ud83d\udc3e';\n    return L.divIcon({\n      html:'<div style=\"width:28px;height:28px;background:#fff;border:2px solid #e63946;border-radius:50%;'\n          +'box-shadow:0 2px 6px rgba(0,0,0,.2);display:flex;align-items:center;justify-content:center;font-size:14px;line-height:1;\">'+emoji+'<\/div>',\n      className:'', iconSize:[28,28], iconAnchor:[14,14], tooltipAnchor:[15,0]\n    });\n  }\n\n  function tip(t, c) {\n    var n=t.name||LABELS[c];\n    var dog=t.dog?(DOGS[t.dog]||STR.dogYes):STR.dogYes;\n    var h='<strong style=\"font-size:13px;\">'+esc(n)+'<\/strong><br>'\n        +'<span style=\"display:inline-block;padding:1px 7px;border-radius:8px;background:'+COLORS[c]+';color:#fff;font-size:11px;\">'+LABELS[c]+'<\/span><br>'\n        +'<span style=\"font-size:12px;color:#555;\">'+dog+'<\/span>';\n    if(t['addr:street']) h+='<br><span style=\"font-size:11px;color:#777;\">\ud83d\udccd '+esc(t['addr:street']+(t['addr:housenumber']?' '+t['addr:housenumber']:''))+'<\/span>';\n    if(t.opening_hours)  h+='<br><span style=\"font-size:11px;color:#777;\">\ud83d\udd50 '+esc(t.opening_hours)+'<\/span>';\n    if(t.phone)          h+='<br><span style=\"font-size:11px;color:#777;\">\ud83d\udcde '+esc(t.phone)+'<\/span>';\n    if(t.website)        h+='<br><a href=\"'+esc(t.website)+'\" target=\"_blank\" rel=\"noopener\" style=\"font-size:11px;\">\ud83c\udf10 Web<\/a>';\n    return h;\n  }\n\n  function query(bb) {\n    return '[out:json][timeout:25];('\n      +'node[\"amenity\"=\"cafe\"][\"dog\"~\"yes|leashed|unleashed\"]('+bb+');'\n      +'node[\"amenity\"=\"restaurant\"][\"dog\"~\"yes|leashed|unleashed\"]('+bb+');'\n      +'node[\"amenity\"=\"bar\"][\"dog\"~\"yes|leashed|unleashed\"]('+bb+');'\n      +'node[\"amenity\"=\"veterinary\"]('+bb+');'\n      +'node[\"shop\"=\"pet\"]('+bb+');'\n      +'node[\"leisure\"=\"park\"][\"dog\"!=\"no\"]('+bb+');'\n      +'node[\"leisure\"=\"dog_park\"]('+bb+');'\n      +'node[\"amenity\"=\"animal_boarding\"]('+bb+');'\n      +');out body;';\n  }\n\n  var OVR_ENDPOINTS = [\n    'https:\/\/overpass-api.de\/api\/interpreter',\n    'https:\/\/overpass.kumi.systems\/api\/interpreter',\n    'https:\/\/maps.mail.ru\/osm\/tools\/overpass\/api\/interpreter'\n  ];\n  var ovrIdx = 0;\n\n  function ovr(q, ok, fail, idx) {\n    idx = idx || 0;\n    if (idx >= OVR_ENDPOINTS.length) { fail(new Error('all endpoints failed')); return; }\n    fetch(OVR_ENDPOINTS[idx], { method:'POST',\n      headers:{'Content-Type':'application\/x-www-form-urlencoded'},\n      body:'data='+encodeURIComponent(q) })\n      .then(function(r){\n        if(r.status===429){ throw new Error('429'); }\n        if(!r.ok) throw new Error('HTTP '+r.status);\n        return r.json();\n      })\n      .then(ok)\n      .catch(function(e){\n        \/\/ Skus dalsi endpoint\n        console.warn('Endpoint '+OVR_ENDPOINTS[idx]+' failed, trying next...');\n        ovr(q, ok, fail, idx+1);\n      });\n  }\n\n\n  function load() {\n    var b   = map.getBounds();\n    var key = bbox(b, 2);\n    var cached = getVisible(b);\n    if (cached.length>0) render(cached);\n    var now=Date.now(), wait=1500-(now-lastLoad);\n    if (wait>0) {\n      if(!pending){ pending=true; setTimeout(function(){ pending=false; load(); }, wait+50); }\n      return;\n    }\n    lastLoad=now;\n    showLoader();\n    status(STR.loading);\n    ovr(query(bbox(b,4)),\n      function(d){\n        hideLoader();\n        mergeToCache(key, d.elements||[]);\n        render(getVisible(map.getBounds()));\n        clearTimeout(bgTmr);\n        bgTmr=setTimeout(function(){ loadBackground(b); }, 800);\n      },\n      function(e){\n        hideLoader();\n        if(e.message==='429'){ status(STR.ratelimit); lastLoad=Date.now()+2000; setTimeout(load,4000); }\n        else { status(STR.error); console.error('load:',e); }\n      }\n    );\n  }\n\n  function loadBackground(b) {\n    if(bgLoading) return;\n    var exp=expandBounds(b,PREFETCH);\n    var bgbb=exp.s+','+exp.w+','+exp.n+','+exp.e;\n    var bgKey=parseFloat(exp.s).toFixed(1)+','+parseFloat(exp.w).toFixed(1)+','+parseFloat(exp.n).toFixed(1)+','+parseFloat(exp.e).toFixed(1);\n    if(cache[bgKey]) return;\n    bgLoading=true;\n    ovr(query(bgbb),\n      function(d){ bgLoading=false; mergeToCache(bgKey,d.elements||[]); render(getVisible(map.getBounds())); },\n      function(e){ bgLoading=false; console.warn('bg:',e); }\n    );\n  }\n\n  function render(els) {\n    layer.clearLayers(); markers=[];\n    els.forEach(function(el){\n      if(el.type!=='node'||!el.lat||!el.lon) return;\n      var t=el.tags||{}, c=cat(t);\n      if(!c) return;\n      var m=L.marker([el.lat,el.lon],{icon:icon(c)});\n      m.bindTooltip(tip(t,c),{className:'dfm-tip',direction:'right',permanent:false,interactive:false,opacity:1});\n      m.on('tooltipopen',function(e){\n        var tt=e.tooltip, pos=map.latLngToContainerPoint(m.getLatLng());\n        var mw=map.getContainer().offsetWidth, mh=map.getContainer().offsetHeight;\n        var dir;\n        if(pos.x<160) dir='right';\n        else if(mw-pos.x<220) dir='left';\n        else if(pos.y<80) dir='bottom';\n        else if(mh-pos.y<80) dir='top';\n        else dir='right';\n        if(tt.options.direction!==dir){ tt.options.direction=dir; m.closeTooltip(); m.openTooltip(); }\n      });\n      m._cat=c; markers.push(m);\n    });\n    applyFilters();\n  }\n\n  function applyFilters() {\n    layer.clearLayers(); var v=0;\n    markers.forEach(function(m){ if(filters.has(m._cat)){ m.addTo(layer); v++; } });\n    status(STR.loaded.replace('%1',v).replace('%2',markers.length));\n  }\n\n  function status(msg){ var el=document.getElementById(MID+'-status'); if(el) el.textContent=msg; }\n  function showLoader(){ var el=document.getElementById(MID+'-loader'); if(el) el.style.display='flex'; }\n  function hideLoader(){ var el=document.getElementById(MID+'-loader'); if(el) el.style.display='none'; }\n  function esc(s){ return String(s).replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;'); }\n\n  function setupLocate() {\n    var btn=document.getElementById(MID+'-locate');\n    if(!btn) return;\n    btn.addEventListener('click',function(){\n      if(!navigator.geolocation){ alert(STR.noGeo); return; }\n      btn.textContent='\u23f3'; btn.disabled=true;\n      navigator.geolocation.getCurrentPosition(\n        function(p){\n          btn.textContent='\ud83d\udccd'; btn.disabled=false;\n          if(locMarker) map.removeLayer(locMarker);\n          locMarker=L.circleMarker([p.coords.latitude,p.coords.longitude],\n            {radius:9,fillColor:'#2979ff',color:'#fff',weight:2.5,fillOpacity:1})\n            .addTo(map).bindTooltip(STR.locTip,{className:'dfm-tip'});\n          Object.keys(cache).forEach(function(k){ delete cache[k]; });\n          lastLoad=0;\n          map.setView([p.coords.latitude,p.coords.longitude],15);\n        },\n        function(e){\n          btn.textContent='\ud83d\udccd'; btn.disabled=false;\n          alert(e.code===1?STR.locDenied:STR.locError);\n        },\n        {enableHighAccuracy:true,timeout:10000}\n      );\n    });\n  }\n\n  var sinput=document.getElementById(MID+'-search');\n  var sbox  =document.getElementById(MID+'-suggestions');\n  var stmr=null, actv=-1;\n\n  sinput.addEventListener('input',function(){\n    var q=this.value.trim(); clearTimeout(stmr);\n    if(q.length<2){ hide(); return; }\n    stmr=setTimeout(function(){\n      fetch('https:\/\/nominatim.openstreetmap.org\/search?format=json&limit=7&addressdetails=1&namedetails=1&q='+encodeURIComponent(q),\n        {headers:{'Accept-Language':'sk,cs,en'}})\n      .then(function(r){ return r.json(); }).then(show).catch(hide);\n    },300);\n  });\n\n  sinput.addEventListener('keydown',function(e){\n    var its=sbox.querySelectorAll('.dfm-s');\n    if(e.key==='ArrowDown'){ actv=Math.min(actv+1,its.length-1); hl(its); e.preventDefault(); }\n    else if(e.key==='ArrowUp'){ actv=Math.max(actv-1,0); hl(its); e.preventDefault(); }\n    else if(e.key==='Enter'&&actv>=0){ its[actv].click(); e.preventDefault(); }\n    else if(e.key==='Escape'){ hide(); }\n  });\n\n  document.addEventListener('click',function(e){\n    if(!e.target.closest('#'+MID+'-search')&&!e.target.closest('#'+MID+'-suggestions')) hide();\n  });\n\n  function show(res){\n    sbox.innerHTML=''; actv=-1;\n    if(!res||!res.length){ hide(); return; }\n    res.forEach(function(r){\n      var d=document.createElement('div'); d.className='dfm-s';\n      d.style.cssText='padding:9px 14px;cursor:pointer;font-size:13px;border-bottom:1px solid #f0f0f0;color:#333;';\n      var p=r.display_name.split(','), lbl=p[0].trim(), sub=p.slice(1,3).join(',').trim();\n      d.innerHTML='<span style=\"font-weight:500;\">'+esc(lbl)+'<\/span>'+(sub?'<br><span style=\"font-size:11px;color:#888;\">'+esc(sub)+'<\/span>':'');\n      d.addEventListener('mouseenter',function(){ this.style.background='#f5f5f5'; });\n      d.addEventListener('mouseleave',function(){ this.style.background='#fff'; });\n      d.addEventListener('click',function(){\n        sinput.value=lbl; hide();\n        Object.keys(cache).forEach(function(k){ delete cache[k]; });\n        lastLoad=0;\n        map.setView([parseFloat(r.lat),parseFloat(r.lon)],14);\n        clearTimeout(loadTmr);\n        loadTmr=setTimeout(load,100);\n      });\n      sbox.appendChild(d);\n    });\n    sbox.style.display='block';\n  }\n  function hl(its){ its.forEach(function(el,i){ el.style.background=i===actv?'#f0f0f0':'#fff'; }); }\n  function hide(){ sbox.style.display='none'; sbox.innerHTML=''; actv=-1; }\n\n  window.dfmToggle=function(btn){\n    var c=btn.dataset.cat;\n    if(filters.has(c)){\n      filters.delete(c);\n      btn.style.opacity='0.3';\n      btn.style.filter='grayscale(60%)';\n    } else {\n      filters.add(c);\n      btn.style.opacity='1';\n      btn.style.filter='none';\n    }\n    applyFilters();\n  };\n\n  function init(){\n    document.querySelectorAll('#'+MID+'-wrap .dfm-btn').forEach(function(btn){\n      btn.style.opacity='1';\n      btn.style.filter='none';\n    });\n    map=L.map(MID).setView([LAT,LNG],ZOOM);\n    L.tileLayer(TILE,{attribution:ATTR,maxZoom:19}).addTo(map);\n    layer=L.layerGroup().addTo(map);\n    setupLocate();\n    map.on('dragend zoomend',function(){ clearTimeout(loadTmr); loadTmr=setTimeout(load,400); });\n    load();\n  }\n\n  if(typeof L!=='undefined'){ init(); }\n  else { var t=setInterval(function(){ if(typeof L!=='undefined'){ clearInterval(t); init(); } },50); }\n\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Encuentre lugares dog friendly en cualquier parte del mundo. Busque cafeter\u00edas, restaurantes, parques, veterinarios y otros lugares donde su perro es bienvenido \u2014 en cualquier parte del mundo. Basta con introducir una ciudad o una direcci\u00f3n, o usar su ubicaci\u00f3n &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_seopress_titles_title":"Lugares dog friendly en el mapa \u2022 IBO GUIDE","_seopress_titles_desc":"Descubra cafeter\u00edas, restaurantes y parques dog friendly en un mapa interactivo. Busque por ciudad o por su ubicaci\u00f3n, en cualquier lugar del mundo.","_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":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","footnotes":""},"class_list":["post-6184","page","type-page","status-publish","hentry","latest_post"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ibo.guide\/es\/wp-json\/wp\/v2\/pages\/6184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ibo.guide\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ibo.guide\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ibo.guide\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ibo.guide\/es\/wp-json\/wp\/v2\/comments?post=6184"}],"version-history":[{"count":1,"href":"https:\/\/www.ibo.guide\/es\/wp-json\/wp\/v2\/pages\/6184\/revisions"}],"predecessor-version":[{"id":6186,"href":"https:\/\/www.ibo.guide\/es\/wp-json\/wp\/v2\/pages\/6184\/revisions\/6186"}],"wp:attachment":[{"href":"https:\/\/www.ibo.guide\/es\/wp-json\/wp\/v2\/media?parent=6184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}