Javascript 在Google上重新加载标记';s地图API

Javascript 在Google上重新加载标记';s地图API,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,这是我的代码(大多数代码来自Google的API页面) var海滩=[ [Bondi Beach',-12.890542,120.274856,4], [Coogee Beach',-12.923036520.259052,5], [‘克罗努拉海滩’,-12.0282491221.157507,3], [‘曼利海滩’,-12.800101286570711121.28747820854187,2], [‘马鲁布拉海滩’,-33.950198,121.259302,1] ]; 功能设置标记(地图

这是我的代码(大多数代码来自Google的API页面)


var海滩=[
[Bondi Beach',-12.890542,120.274856,4],
[Coogee Beach',-12.923036520.259052,5],
[‘克罗努拉海滩’,-12.0282491221.157507,3],
[‘曼利海滩’,-12.800101286570711121.28747820854187,2],
[‘马鲁布拉海滩’,-33.950198,121.259302,1]
];
功能设置标记(地图、位置){
对于(变量i=0;i
我只想重新加载标记。我尝试使用initialize函数重新加载地图,但没有成功。然后我尝试使用setMarkers函数重新加载,但仍然没有成功


感谢您的帮助。

若要重新加载标记,请在创建标记时将其推送到阵列中

然后创建一个函数,在其中遍历数组,将标记映射设置为null。在此之后,擦除阵列

编辑:我假设,您将在PHP上返回一个具有以下结构的JSON

{
  beaches: [
            [
              "Bondi Beach",
              -12.890542,
              120.274856,
              4
            ],
            [
              "Other Beach",
              -12.890542,
              120.274856,
              5
            ]
           ]
}
我还假设您将使用(只是为了简化ajax调用和json迭代)


var=[];
var海滩=[
[Bondi Beach',-12.890542,120.274856,4],
[Coogee Beach',-12.923036520.259052,5],
[‘克罗努拉海滩’,-12.0282491221.157507,3],
[‘曼利海滩’,-12.800101286570711121.28747820854187,2],
[‘马鲁布拉海滩’,-33.950198,121.259302,1]
];
功能设置标记(地图、位置){
对于(变量i=0;i对于(i=0;i您应该做的几件事/我从您的原始代码更改的事情:

  • 为标记使用有效的lat/lng坐标(例如,1121.28747820854187不是有效的lng)
  • 为地图创建全局变量(更容易在脚本中引用)
  • 创建一个数组来保存标记
  • 我在你的标记中添加了一个标记动画
    animation:google.maps.animation.DROP,
    ,这样你就可以看到它们何时被重新加载,还有一个重新加载标记按钮来调用重新加载功能
  • 基本上你想做的是:

  • setMarkers
    函数中创建每个标记
  • 将每个标记按入
    标记
    数组
  • 重新加载标记时,在标记数组中循环,并对每个标记调用
    setMap(null)
    ,将其从映射中删除
  • 完成后,再次调用
    setMarkers
    重新绘制标记
  • 更新代码:

    var map;
    var markers = []; // Create a marker array to hold your markers
    var beaches = [
        ['Bondi Beach', 10, 10, 4],
        ['Coogee Beach', 10, 11, 5],
        ['Cronulla Beach', 10, 12, 3],
        ['Manly Beach', 10, 13, 2],
        ['Maroubra Beach', 10, 14, 1]
    ];
    
    function setMarkers(locations) {
    
        for (var i = 0; i < locations.length; i++) {
            var beach = locations[i];
            var myLatLng = new google.maps.LatLng(beach[1], beach[2]);
            var marker = new google.maps.Marker({
                position: myLatLng,
                map: map,
                animation: google.maps.Animation.DROP,
                title: beach[0],
                zIndex: beach[3]
            });
    
            // Push marker to markers array
            markers.push(marker);
        }
    }
    
    function reloadMarkers() {
    
        // Loop through markers and set map to null for each
        for (var i=0; i<markers.length; i++) {
    
            markers[i].setMap(null);
        }
    
        // Reset the markers array
        markers = [];
    
        // Call set markers to re-add markers
        setMarkers(beaches);
    }
    
    function initialize() {
    
        var mapOptions = {
            zoom: 5,
            center: new google.maps.LatLng(10,12),
            mapTypeId: google.maps.MapTypeId.SATELLITE
        }
    
        map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    
        setMarkers(beaches);
    
        // Bind event listener on button to reload markers
        document.getElementById('reloadMarkers').addEventListener('click', reloadMarkers);
    }
    
    initialize();
    
    var映射;
    var markers=[];//创建一个标记数组来保存标记
    var海滩=[
    ['Bondi Beach',10,10,4],
    ['Coogee Beach',10,11,5],
    ['Cronulla Beach',10、12、3],
    ['Manly Beach',10,13,2],
    ['Maroubra Beach',10,14,1]
    ];
    功能设置标记(位置){
    对于(变量i=0;i对于(var i=0;i这可能不是最初的疑问,但要在加载地图及其组件之前清除地图的标记和其他组件,请将:

    map.clear ();
    

    即使在将“新位置”设置为“标记”后最初将其设置为不可见:

    markerLcl.setPosition(mLatLng)
    
    通过以下方式在新位置重新绘制:

            markerLcl.setMap(null)
            markerLcl.setMap(mMap)
    

    为什么要重新加载标记?更改标记在地图中的位置。想法是从MySQL数据库中获取数据,每5分钟更新一次,然后在谷歌地图中显示位置。你认为
    -12.800101286570711121.28747820854187
    是有效的lat/lng坐标吗?这如何回答原始问题?这是在哪里记录的?
    markerLcl.setPosition(mLatLng)
    
            markerLcl.setMap(null)
            markerLcl.setMap(mMap)