【问题标题】:Bring data in from the infowindow on Fusion Tables layers on a Google map从 Google 地图上 Fusion Tables 图层的信息窗口中导入数据
【发布时间】:2012-12-27 17:19:01
【问题描述】:

我正在构建我的第一个 Fusion Tables,并将两个 Fusion Tables 带入 Google 地图 - 一个多边形和一个点。当您单击多边形或点时,我不想显示常规信息窗口,而是想从 F​​usion Table 中提取一些数据,但它无法正常工作:

<script>
  function initialize() {
    var england = new google.maps.LatLng(53.2, -2);
    map = new google.maps.Map(document.getElementById('map_canvas'), {
      center: england,
      zoom: 8,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    layer1 = new google.maps.FusionTablesLayer({
      query: {select: 'geometry', from: '1HgGUc72F2Wlp6dvy4GWvLyWrl1kC6aJhnM7jPyc'},
      styles: [
        { where: "Score = 0", polygonOptions: { fillColor: "#cdcdcd", fillOpacity: 0.3 } },
        { where: "Score = 1", polygonOptions: { fillColor: "#FF0000", fillOpacity: 0.5 } },
        { where: "Score = 2", polygonOptions: { fillColor: "#FF7E00", fillOpacity: 0.5 } },
        { where: "Score = 3", polygonOptions: { fillColor: "#008000", fillOpacity: 0.5 } }],
    options: {suppressInfoWindows: true},
    map: map,
    });
    google.maps.event.addListener(layer1, 'click', function(e) {e.infoWindowHtml = "Score" + e.row['Score'].value;}
    });

    layer2 = new google.maps.FusionTablesLayer({
    query: {select: 'postcode', from: '1bawAKwQAUGE4mzYSyw4lTbOcgp7MgIGOLROel8Y'},
    options: {suppressInfoWindows: true},
    map: map,
     });
    google.maps.event.addListener(layer2, 'click', function(e) {e.infoWindowHtml = "Postcode" + e.row['Postcode'].value;}
    });

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

  }
</script>
</head>
<body onLoad="initialize()">
  <div id="map_canvas"></div>
</body>
</html>

It was all working well,infowindows 被抑制,直到我添加了 AddListener 和 addDomListeners。谁能帮我回到正轨,好吗?

【问题讨论】:

  • 你的尝试不会有太大的成功。当您单击一个点时,单击不会将单击事件传递给底层的多边形层(并且 AFAIK 无法更改这一点)。只要两个表之间没有任何关系,这将永远不会起作用,因为没有这种关系,甚至没有机会通过给定坐标请求两个表。

标签: google-maps-api-3 google-fusion-tables infowindow


【解决方案1】:
  1. 您的“新”代码中有语法错误(两个额外的“}”)
  2. 你在你的初始化函数中调用了 addDomListener (应该没关系,因为你仍然在 &lt;body 标记中,但你真的不应该在两个地方都有它。

    <script>
     function initialize() {
     var england = new google.maps.LatLng(53.2, -2);
    map = new google.maps.Map(document.getElementById('map_canvas'), {
      center: england,
      zoom: 8,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
    
    layer1 = new google.maps.FusionTablesLayer({
      query: {select: 'geometry', from: '1HgGUc72F2Wlp6dvy4GWvLyWrl1kC6aJhnM7jPyc'},
      styles: [
        { where: "Score = 0", polygonOptions: { fillColor: "#cdcdcd", fillOpacity: 0.3 } },
        { where: "Score = 1", polygonOptions: { fillColor: "#FF0000", fillOpacity: 0.5 } },
        { where: "Score = 2", polygonOptions: { fillColor: "#FF7E00", fillOpacity: 0.5 } },
        { where: "Score = 3", polygonOptions: { fillColor: "#008000", fillOpacity: 0.5 } }],
    options: {suppressInfoWindows: true},
    map: map,
    });
    google.maps.event.addListener(layer1, 'click', function(e) {e.infoWindowHtml = "Score" + e.row['Score'].value;});
    layer2 = new google.maps.FusionTablesLayer({
    query: {select: 'postcode', from: '1bawAKwQAUGE4mzYSyw4lTbOcgp7MgIGOLROel8Y'},
    options: {suppressInfoWindows: true},
    map: map,
     });
     google.maps.event.addListener(layer2, 'click', function(e) {e.infoWindowHtml = "Postcode" + e.row['Postcode'].value;});
     }
     google.maps.event.addDomListener(window, 'load', initialize);
     </script>
     </head>
      <body>
       <div id="map_canvas"></div>
    </body>
    </html>
    

working example 修改以使每一层的信息窗口工作,使用这个函数:

function openIW(FTevent) {
  // infoWindow.setContent(FTevent.infoWindowHtml);
  // infoWindow.setPosition(FTevent.latLng);
  infoWindow.setOptions(
    { 
     content: FTevent.infoWindowHtml,
     position: FTevent.latLng,
     pixelOffset: FTevent.pixelOffset
    });
  infoWindow.open(map);
}

【讨论】:

  • 非常感谢地理编码压缩包。我应该在我原来的帖子中强调some这个词。我想要做的只是从融合表中引入 一些 字段 - 显然,两个图层/表的不同字段。这就是为什么我为每一层设置了单独的 addListener/addDomListener(即使那是错误的!)。
  • 我不明白你的评论。我不是读心术者,我不知道你想要哪些数据部分,哪些你不想要。您当然可以更改提供的代码来做任何您想做的事情,这只是一个示例/概念证明。
  • 感谢示例/概念证明。假设我想导入一个变量(每一层的不同变量)并将其添加到信息窗口。我已经为每一层复制了 openIW 并尝试执行以下操作:function openIW1(FTevent) { // infoWindow.setContent(FTevent.infoWindowHtml); // infoWindow.setPosition(FTevent.latLng); infoWindow.setOptions( { content: 'Score: ' + e.row['Score'].value, position: FTevent.latLng, pixelOffset: FTevent.pixelOffset }); infoWindow.open(map); } 但是当我点击地图时我现在什么也没有得到。
  • 查看javascript控制台。我得到“e未定义”。修复它。
【解决方案2】:
google.maps.event.addListener(layer, 'click', function(e) {
    console.log("E.Row! : "+ e.row['name'].value);
});

【讨论】:

    猜你喜欢
    • 2012-07-26
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2011-09-18
    • 2014-03-23
    • 2016-04-04
    相关资源
    最近更新 更多