2015-05-02 82 views
0

附加选择一旦我使用谷歌地图API创建了具有多个标记的地图,我想要额外的选择来突出显示标记的子集。我想这样做,而不会回到服务器。最好我想将数据存储在标记或数组中。我可以用新标记替换或在标记顶部覆盖图像。任何人都可以提出如何做到这一点的例子 - 特别是关于添加图像或更改标记的部分。谷歌地图API(3)

下面的例...

enter image description here

回答

1

下面是一个例子,它假定,当你加载你的页面,你必须从JSON服务器这个数据返回。

数据= [{ 纬度:103.2, 经度:12.3, isDiscountOutlet:假 },{ 纬度:101.2, 经度:11.3, isDiscountOutlet:假 } ]

基本方法是我们将这些数据存储在浏览器中,并在更改选择时使用它来更新标记的外观。

1部分:创建一个全局变量来存储标记在

var storedMarkers; 

第2部分:使用来自服务器的数据创建地图

function initialize() { 
    var mapOptions = { 
    zoom: 4, 
    center: new google.maps.LatLng(103, 11) 
    } 
    var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

    // Add the markers. We are going to store them in a global array too, 
    // so we can access them later. 
    for (var i = 0; i < data.length; ++i) { 

    // Create one marker for each piece of data. 
    var marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(data[i].latitude, data[i].longitude), 
     map: map 
    }); 

    // Store that marker, alongside that data. 
    var dataToStore = { 
     markerObject: marker, 
     dataAssociatedWithMarker: data[i] 
    }; 

    storedMarkers.push(dataToStore); 
} 

google.maps.event.addDomListener(window, 'load', initialize); 

3部分:让我们显示所有折扣店,并隐藏所有其他标记,当有人点击按钮时

我假设你有一个ID为'折扣'的DOM元素(一个按钮)。我也要作弊和使用jQuery :)

$("#discount").click(function() { 
    for (var i = 0; i < storedMarkers.length; ++i) { 
    var currentStoredMarker = storedMarkers[i]; 

    // Is this marker a discount outlet? 
    if (currentStoredMarker.dataAssociatedWithMarker.isDiscountOutlet == true) { 
     // Let's show it! 
     currentStoredMarker.markerObject.setVisible(true); 
    } else { 
     // Let's hide it! 
     currentStoredMarker.markerObject.setVisible(false); 
    } 
    } 
});