Suite

Les infobulles de CartoDB n'apparaissent pas lorsque la valeur de zoom n'est pas un entier

Les infobulles de CartoDB n'apparaissent pas lorsque la valeur de zoom n'est pas un entier


Construire une carte CartoDB personnalisée ici à l'aide du processus createLayer. Avec la grande différence d'apparence visuelle et d'échelle entre les niveaux de zoom de 4 et 5, je vise par défaut un niveau de zoom de 4,5. Cela fonctionne parfaitement bien en ce qui concerne la vue de la carte. Cependant, lorsque je suis à ce niveau de zoom, aucune des info-bulles ne s'affiche. Ils fonctionnent à tout autre niveau de zoom entier.

var options = { center: [13, -2], zoom: 4.5, minZoom: 4.5, maxZoom: 7 } var layerSource = { user_name: '[username]', type: 'cartodb', sublayers: [ { sql: " SELECT * FROM ptv_ad_views_by_dma_2015q4", cartocss : generateCSS("ads_0600"), interactivité : "cartodb_id,dma_name,ads_0600" }, { sql : "SELECT * FROM ptv_ad_views_by_dma_2015q4", cartocsad : generate_CSS(" dma_name,ads_0700" },… (une douzaine d'autres sous-couches) } var map_object = new L.Map("map", options); var num_sublayers, map_layer; cartodb.createLayer(map_object, layerSource) .addTo(map_object) .done(function(layer){ num_sublayers = layer.getSubLayerCount(); map_layer = layer; var sublayer; for (var i = 0; i < num_sublayers; i++) { sublayer = layer.getSubLayer(i); sublayer.setInteractivity('cartodb_id,dma_name,'+layerValues[i]); var testTooltip = layer.leafletMap.viz.addOverlay({ type: 'tooltip', layer: sublayer, template: '{{dma_name}}{{'+layerValues[i]+'}} ads', largeur : 200, position : 'bottom|right' }); } hideAllSublayers(); map_layer.getSubLayer(defaultLayer).show() ; populateTitle(defaultLayer); currentLayer = defaultLayer; }) .error(function(err){ console.log("Une erreur s'est produite : " + err); });

Notez que pour une raison quelconque, la ligne d'ajout standard que j'ai vue dans les documents d'assistance ne fonctionne pas et n'est pas nécessaire pour ma carte, au cas où vous vous demanderiez pourquoi je ne l'ai pas dedans :

$('#map').append(testTooltip.render().el);

Avez-vous une idée des raisons pour lesquelles ces info-bulles n'apparaissent pas dans les niveaux de zoom non entiers ?


CartoDB ne propose pas de tuiles à des niveaux de zoom fractionnés. Jouer avec les tuiles pour obtenir une carte avec un niveau de zoom de 3,5 est facile, car vous pouvez simplement obtenir les tuiles du zoom du niveau supérieur et les redimensionner dans le navigateur.

Les infobulles de CartoDB fonctionnent grâce à l'interactivité fournie par la couche UTFGrid. Cette couche mappe chaque pixel de chaque tuile et lui fournit une signification interactive (un pixel est représenté par un caractère, qui est lié à une clé à partir de laquelle les données de ce pixel sont récupérées).

Cette couche, en tant que couches de tuiles, est créée et servie pour chaque niveau de zoom (entier), et CartoDB ne génère pas de couche UTFgrid pour le niveau 3.5. Personnellement, je ne sais pas comment fonctionnent ces bibliothèques pour obtenir des niveaux de zoom fractionnés, mais CartoDB ne gère pas les couches d'interactivité à ces niveaux intermédiaires.