【问题标题】:Reload points on a Map in using the Google Maps API v3使用 Google Maps API v3 在地图上重新加载点
【发布时间】:2014-06-09 20:07:42
【问题描述】:

我正在尝试根据某人单击按钮的时间来重新加载地图上的点。

我有几个 json 对象保存在内存中,“data”和“data2”。以下代码获取“data2”JSON 文件并将其设置为等于“data”JSON 文件,然后触发地图重新加载事件。

   dataholder = data
    function myFunction() {
      data = dataholder
      window.data = data2;
      google.maps.event.trigger(map, 'resize');
    }

目前,地图不会重新加载新数据集。但是,我没有收到任何错误消息。

【问题讨论】:

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


    【解决方案1】:

    没有地图重新加载事件。调整大小事件,当它来自窗口调整大小时,最多会重新计算地图边界并重新投影现有特征(标记、折线、多边形)。特别是对于这种情况,我认为手动触发resize事件不会有任何效果。

    其次,您说您有两个 json 文件,但您的代码建议您在内存中已有两个 json 对象(这意味着您不需要执行额外的请求来检索 data2 的值)。其余的答案将假设。

    如果您的原始标记集合来自“data”,它是 LatLng 对的集合,并且您想要替换“data2”内容的标记,则过程将是:

    1.- 将标记推入一个对象中,以便稍后找到它们

    var markers=[];
    for(onemarker in data) {
        var newmarker=new google.maps.Marker({map: map, position: new google.maps.LatLng({onemarker.lat, onemarker.lng}) });
        markers.push(newmarker);
    }
    

    2.- 当要替换标记时,首先清除标记数组

    while(markers.length) {
         var oldmarker=markers.pop();
         oldmarker.setMap(null);
    };
    

    3.- 用 data2 对象中的数据填充标记数组

    for(onemarker in data2) {
        var newmarker=new google.maps.Marker({map: map, position: new google.maps.LatLng({onemarker.lat, onemarker.lng}) });
        markers.push(newmarker);
    }
    

    对于这种标记,对于常规特征,对象和底层数据之间没有瞬时绑定。这对于新的 google.maps.Data() 层略有不同,您可以跳过迭代并为其提供 geoJSON 数组。您仍然需要有一个对象来存储当前标记,否则当您想要删除它们时,您将无法访问它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多