Google地图:在宽地图上多次显示自定义标记

时间:2016-06-21 19:02:13

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

我有一张带有非常小变焦的宽地图,因此地球的某些部分会出现多次。如果我添加一个普通标记,它会成倍增加,以便视口中的每个位置都有相同的标记:

var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    title: 'Hello World!'
});

https://jsfiddle.net/L50thpqr/

但是,当我使用带路径的自定义标记时,它只会在中间显示一次:

var marker = new google.maps.Marker({
    position: myLatlng,
    map: map,
    title: 'Hello World!',
    icon: {
        fillOpacity: .75,
        scale: 1,
        strokeColor: 'black',
        strokeWeight: 1,
        scale: .8,
        fillColor: "#fffb70",
        path: "M 0,-8.55 -8.55,8.55 8.55,8.55 Z"
    }
});

https://jsfiddle.net/q14s2rLk/

我的问题是我如何为自定义标记获得相同的行为,因此它也会显示多次。

1 个答案:

答案 0 :(得分:0)

简化的一种方法是在服务器上渲染标记。 Google提供了两种内置于API中的服务,可以轻松实现:FusionTablesLayerKmlLayer。从预先渲染或即时渲染的图像创建自定义叠加层。

另一种有用的优化技术涉及视口标记管理:将地图上渲染的标记限制为仅存在于可视区域内的标记。

如果您仍想在地图上显示许多标记,请考虑创建一个自定义叠加层,以显示功能最少的标记。与API提供的标准标记相比,这种方法可以获得性能提升。

群集通过以聚合形式合并地图上彼此相邻的数据,简化了数据可视化。

您可以使用Grid-vased ClusteringDistance-based Clustering。基于网格的聚类通过将地图划分为特定大小的正方形(每个缩放处的大小更改)然后将标记分组到每个网格方块来工作。基于距离的聚类类似于基于网格的聚类,除了不创建固定方形边界的聚类之外,基于标记与聚类质心之间的距离创建聚类。通常通过迭代现有标记位置来算法地指定聚类质心。

或者您可以使用数组向Google地图添加自定义标记,请查看:Adding multiple custom markers to a google map using an array