2015-03-17 2 views
0

Можно ли применять другой цвет к различным маркерам шума при кластеризации, используя здесь карты api?Разный цвет-маркер шума, использующий здесь карты

Имеется theming option, но это относится ко всем маркерам. Я хотел бы задать определенный цвет для конкретной точки, основанный на определенных условиях.

ответ

1

Это, безусловно, возможно с помощью специальной темы. Определение объекта H.clustering.DataPoint включает в себя data()method, который может содержать произвольные данные.

При подготовке вашего набора данных вы можете добавить его, как показано:

var dataPoints = []; 

dataPoints.push(new H.clustering.DataPoint(lat, lng, null, {color :'red'})); 
dataPoints.push(new H.clustering.DataPoint(lat, lng, null, {color :'green'})); 
dataPoints.push(new H.clustering.DataPoint(lat, lng, null, {color :'blue'})); 
// etc ... 

Если вы используете пользовательскую тему, вы можете прочитать данные с точки шума и отображать его, как вы считаете нужным:

function colorfulClusteringTheme() { 
    var baseTheme = new H.clustering.DefaultTheme(); 
    this.getClusterPresentation = function (cluster) { 

     var clusterIcon = baseTheme.getClusterPresentation(cluster).getIcon(); 
      return new H.map.Marker(cluster.getPosition(), { 
       icon: clusterIcon, 
      min: cluster.getMinZoom(), 
      max: cluster.getMaxZoom() 
     }); 

    }; 
    this.getNoisePresentation = function (noisePoint) { 
     if (noisePoint.data.color === 'red'){ 
      // add red noise point 
      return new H.map.Marker(noisePoint.getPosition(), { icon: redIcon }); 
     } 
     if (noisePoint.data.color === 'green'){ 
      // add red marker 
      return new H.map.Marker(noisePoint.getPosition(), { icon: greenIcon }); 
     } 
     if (noisePoint.data.color === 'blue'){ 
      // add blue noise point 
      return new H.map.Marker(noisePoint.getPosition(), { icon: blueIcon }); 
     } 
    }; 
    }; 

Вы можете добавить тему к карте в обычном порядке:

var clusteredDataProvider = new H.clustering.Provider(dataPoints, { 
    clusteringOptions: { 
     eps: 16, 
     minWeight: 5 
    }, 
    theme: new colorfulClusteringTheme() 
    }); 

    var clusteringLayer = new H.map.layer.ObjectLayer(clusteredDataProvider); 
    map.addLayer(clusteringLayer); 
+0

Спасибо! Это очень помогло мне –

+0

Только одно: кажется, что кластеризация работает (показывает количество очков), но также я вижу все шумовые маркеры, как если бы они не группировались. –

+0

Вы, вероятно, добавляете свои «маркеры» непосредственно на «карту» - вам не нужно это делать, кластеризация делает это для вас, просто создайте «dataPoints». В качестве альтернативы установите 'minZoom', как показано в этом примере [spiderify] (http://stackoverflow.com/questions/27185693/how-to-distinct-two-markers-placed-at-the-same-coordinates-in-nokia -here-map/28064566 # 28064566) –

Смежные вопросы