如何模拟用户点击包含特定标记的谷歌地图群集

时间:2014-07-19 06:51:33

标签: javascript jquery google-maps google-maps-api-3 angular-google-maps

我有一个应用程序,用户搜索某个地址周围的属性列表,结果呈现为

  1. 地图上的标记,有些会聚集
  2. 包含列表格式的搜索结果的div ..
  3. div中的每个单独列表与标记之间没有1:1的关系.b / c某些标记包含在群集中。

    我尝试实施的用例是用户点击div上的列表,然后会自动

    • 将地图平移到列表
    • 显示商家信息的信息框。

    这适用于已存在的标记。但是对于隐藏在群集后面的标记...这不起作用。

    我试图在地图放大时设置一个事件监听器:

    google.maps.event.addListener(map, 'zoom_changed', function() {
       // assume that the the cluster broke up and the marker got rendered by now
       ..
    });
    

    但是这没有用。这也可能是因为缩放级别不足以分解群集......但在这种情况下我如何确定该级别是什么?我基本上想要做的是模拟用户点击他们感兴趣的列表所属的群集,这会导致群集崩溃,地图放大,标记出现。

1 个答案:

答案 0 :(得分:0)

我正在做类似的事情。我显示一个表格,当地图上的一行被点击到匹配的标记时。我建议您在markers指令中使用clusteroptions属性。我看起来像这样:

 clusteroptions="{ averageCenter: true, minimumClusterSize: 8, gridSize: 30, maxZoom: 14 }

然后当你点击一行时:

        $scope.zoomToSelectedOrder = function(orderNumber) {
        var matchingMarker = $scope.filteredMarkers.filter(function(matchingMarker) {
            return matchingMarker.orderNumber === orderNumber;
        })[0];

        $scope.map.center = { latitude: matchingMarker.latitude, longitude: matchingMarker.longitude };
        $scope.map.zoom = 22;
    };

通过将地图缩放设置为22(任何高于群集选项的maxZoom的数字),您可以确保群集被分解。

这是一个示例,显示了一些随机生成的标记被缩放到的第0个数组元素,并且在单击按钮时显示了它的窗口:

http://plnkr.co/edit/PkHAP9m3UAoiQE422jUo?p=preview