如何使用Bing Maps防止相同地理位置的重叠图钉?

时间:2012-03-28 11:00:22

标签: bing-maps pushpin

如果你在同一个地理位置的'伦敦'上有2个图钉,API中是否有任何东西将它们分开以便它们都可见?

我只能找到有关PreventIconCollisions的旧地图点API的文档,这是我想要的,但在新API中看不到任何对此的引用。

我正在使用JavaScript API。

2 个答案:

答案 0 :(得分:0)

因此,如果我理解正确,您在同一位置有类似的信息,这是正确的吗?

为了显示这两种信息,您将有两个选择:

  1. 使用适当的方式合并文本框中的信息以在此ui元素内显示信息(例如,使用您自己的选项卡式信息框)
  2. 当您处于某个缩放级别时手动取消群集
  3. 没有默认属性来设置它,在许多图钉上执行此操作会非常麻烦,但在主要想法中,您必须:检测viewchangeend事件,如果您处于某个缩放级别(或更高的缩放级别)然后你正在对它们进行去模糊(我把它称为附近的图钉)。

    // Bind pushpin mouseover.
        Microsoft.Maps.Events.addHandler(pin, 'mouseover', function (e) {
            var currentPin = e.target;
            currentPin.setOptions({ visible: false });
            var currentLocation = currentPin.getLocation().clone();
    
            var currentPoint = bmGlobals.geo.map.tryLocationToPixel(currentLocation);
            if (currentPin.associatedCluster.length == 2) {
                // Display the first pushpin
                var pinA = createPin(currentPin.associatedCluster[0]);
                var locA = bmGlobals.geo.map.tryPixelToLocation(new Microsoft.Maps.Point(currentPoint.x - pinA.getWidth(), currentPoint.y));
                pinA.setLocation(locA);
                bmGlobals.geo.layerClusteredPin.push(pinA);
    
                // Display the second pushpin
                var pinB = createPin(currentPin.associatedCluster[1]);
                var locB = bmGlobals.geo.map.tryPixelToLocation(new Microsoft.Maps.Point(currentPoint.x + pinB.getWidth(), currentPoint.y));
                pinB.setLocation(locB);
                bmGlobals.geo.layerClusteredPin.push(pinB);
            }
        });
    

    我将尝试编写一个关于此的bing maps模块,但事实上,你必须得到你的集群图钉(或你自己的图钉有两个相关的数据对象),然后你将不得不设置他们的位置基于客户端的渲染。

答案 1 :(得分:0)

我知道这个问题真的很旧,但是如果有人在寻找类似的东西(聚集引脚),这是一个好的开始:http://rtsinani.github.io/PinClusterer/