我正在考虑实施群集。我们有一个列表,当单击某个项目时,我们希望将其置于视图中心并在该引脚上弹出信息框。事情是,如果引脚当前已聚集,则信息框可能会出现在异位,因为群集是平均位置。
有没有办法从群集层获取群集引脚?
找到我的解决方案
[Route("api/[controller]")]
public class ValuesController : Controller
{
public async Task<ResponseInfoList> Method1([FromBody]RequestInfoList value)
{
return new ResponseInfoList() {};
}
public async Task<ResponseInfoList> Method2([FromBody]RequestInfoList value)
{
return new ResponseInfoList() { };
}
}
当群集推针回调时,您可以将其与主引脚上群集的引用相结合,以加快速度。
var PinYouAreMatching;//wherever you have this coming from
var primitives = clusterLayer.getPrimitives();
for(var i = 0;i < primitives.length;i++)
{
if(primitives[i] instanceof Microsoft.Maps.ClusterPushpin)
{
var contained = primitives[i].containedPushpins;
for(var j = 0;j < contained.length;j++)
{
if(PinYouAreMatching === contained[j])
{
//You found the cluster your pin is at eg. primitives[i].
}
}
}
}
加速一些O(n ^ 2)或O(n)到O(n)或O(1)的东西。
答案 0 :(得分:0)
如果将事件添加到群集图钉,事件处理程序将接收群集图钉,您可以使用它的位置来显示信息框。这是一个代码示例:
clusterLayer = new Microsoft.Maps.ClusterLayer(pins, {
clusteredPinCallback: function(cluster){
Microsoft.Maps.Events.addHandler(cluster, 'click', function(e){
//This is how you get the location of the cluster.
var loc = e.target.getLocation();
//Show your infobox here
});
}
});