Это, безусловно, возможно с помощью специальной темы. Определение объекта 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);
Спасибо! Это очень помогло мне –
Только одно: кажется, что кластеризация работает (показывает количество очков), но также я вижу все шумовые маркеры, как если бы они не группировались. –
Вы, вероятно, добавляете свои «маркеры» непосредственно на «карту» - вам не нужно это делать, кластеризация делает это для вас, просто создайте «dataPoints». В качестве альтернативы установите 'minZoom', как показано в этом примере [spiderify] (http://stackoverflow.com/questions/27185693/how-to-distinct-two-markers-placed-at-the-same-coordinates-in-nokia -here-map/28064566 # 28064566) –