问题
I have two markers placed at the same coordinates in a Nokia Here map.
The problem is I can access only at one marker. The other is below the first one.
Is there any options or something else to manage this case, in order to have access to all markers placed at the same coordinates ?
回答1:
The only way to ensure that all markers are separately visible is to put the overlapping markers at slightly different locations. The best effect I have found is to use the clustering functionality down to zoom 15 and add a separate set of jittered markers to display at zoom 16+.
/**
* This is a H.clustering.ITheme which displays ordinary markers as
* noise points
*/
function SpiderifyTheme() {
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) {
return new H.map.Marker(noisePoint.getPosition(), {
min: noisePoint.getMinZoom()
});
};
}
// dataPoints is an array of H.clustering.DataPoint elements
var len = dataPoints.length + 1;
var SCATTER = 0.0001; // When exploding a group this is the size of the ring.
var group = new H.map.Group();
var truncate = function(number, places) {
var shift = Math.pow(10, places);
return ((number * shift) | 0) / shift;
};
// Ensure that all markers are offset by a set amount.
dataPoints.forEach(function (dataPoint, index ) {
var jitteredPoint = {
lng: truncate(dataPoint.lng, 3) + SCATTER + (Math.cos(index) * SCATTER),
lat: truncate(dataPoint.lat, 3) + SCATTER + (Math.sin(index) * SCATTER)
},
marker = new H.map.Marker(jitteredPoint, {
min: 16}); // This needs to be one more than the max cluster level
group.addObject(marker);
});
var clusteredDataProvider = new H.clustering.Provider(dataPoints, {
clusteringOptions: {
eps: 32,
minWeight: 2
},
max : 15,
theme: new SpiderifyTheme()
});
// First add cluster for zooms 1-15
var clusteringLayer = new H.map.layer.ObjectLayer(clusteredDataProvider);
map.addLayer(clusteringLayer);
// Add the group for zooms 16+
map.addObject(group);
The result looks something like this - the first image shows clustered markers at low zoom. The second shows jittered markers at high zoom. You can alter the eps
value of the clusterer to get other effects.


来源:https://stackoverflow.com/questions/27185693/how-to-distinct-two-markers-placed-at-the-same-coordinates-in-nokia-here-map