2017-08-14 1 views
2

jaimerais pour mettre en évidence une caractéristique spécifique d'une couche qui est inclus dans mon style de carte quand vol stationnaire .. quelque chose comme ceci:MapBox GL - genouillère fort caractéristique spécifique sur vol stationnaire en utilisant le style de carte

map.on('mousemove', function(e) { 
    var states = map.queryRenderedFeatures(e.point, { 
    layers: ['n_Region6 Municipals'] 
    }); 
    if (states.length > 0) {  
     map.setPaintProperty('n_Region6 Municipals', 'fill-color',' 
     {"property":"NAME_2","type":"category","stops": + 
     [[states[0].properties.NAME_2 +,"blue"]]}');  
     }); 

avec setpaintproperty jumelé avec la fonction de données, je n'ai pas eu de chance .. J'ai essayé avec Filter avec ceci.

 map.addLayer({ 
      "id": "state-fills", 
      "type": "fill", 
      "source": { 
      "type": "vector", 
      "url": "mapbox://noeltech.c8nzzthb" 
      }, 
      "source-layer":"R6_Pop_byMunicipal-5cqj12", 
      "layout": {}, 
      "paint": { 
         "fill-color": "#627BC1", 
         "fill-opacity": 0 
     } 
    }); 
    map.addLayer({ 
    "id": "state-fills-hover", 
    "type": "line", 
    "source": { 
     "type": "vector", 
     "url": "mapbox://noeltech.c8nzzthb" 
    }, 
    "source-layer":"R6_Pop_byMunicipal-5cqj12", 
    "layout": {}, 
    "paint": { 
     "line-color": "#627BC1", 
     "line-width": 3 
    }, 
    "filter": ["==", "NAME_2", ""] 
    }); 
// map.setLayoutProperty('n_Region6 Municipals', 'visibility', 'none'); 

}); 
map.on("mousemove", "state-fills", function(e) { 
    map.setFilter("state-fills-hover", ["==", "NAME_2", 
    e.features[0].properties.NAME_2]); 

il fait ce que je veux faire mais il me fait ajouter un autre calque et je ne le veux pas. Je veux utiliser la couche dans mon style de carte. Comme le premier code. comment le faire en code simple?

Répondre

2

Vous devez utiliser "type":"categorical"

et la syntaxe serait

map.setPaintProperty('n_Region6 Municipals', 'fill-color',{ 
    "property":"NAME_2", 
    "type":"categorical", 
    "stops":[ 
    [states[0].properties.NAME_2,"blue"], 
    ], 
    "default": "red" 
}); 
+0

Cela pourrait fonctionner..n'a pas essayé encore parce que je l'ai eu en travaillant avec le passage d'un objet portant les paramètres de couleur de remplissage – noeltech

0

Je l'ai travailler avec ce code:

var highlight = { 
      property: 'NAME_2', 
      type: "categorical", 
      stops: [[MunicipalName, 'blue']] 
     }; 
    map.setPaintProperty('n_Region6 Municipals', 'fill-color', highlight); 

le problème est maintenant, je ne considère pas que il colorerait le reste du polygone noir. Y a-t-il un moyen simple de mettre en évidence une seule fonctionnalité sans ajouter plus de couches? Highlights blue but change all the colors

+0

oui. vous définissez la couleur 'default' sur une couleur translucide c'est-à-dire' rgba (0,0,0,0) ' – mollymerp

+0

mais je veux que le reste reste le même qu'ils étaient .. la fonction pilotée par les données peut ne pas être la réponse pour mettre en évidence les caractéristiques dans le style de la carte. – noeltech

+1

vous pourriez utiliser le style piloté par les données - vous devez définir par défaut la valeur actuelle du reste des fonctionnalités, mais ce n'est pas l'approche la plus performante, car cela implique de recalculer les tampons d'attributs pour chaque fonctionnalité du calque lorsque vous avez seulement besoin de changer une caractéristique. J'utiliserais 2 couches avec 'filter's à la place. – mollymerp