如何在鼠标悬停时突出显示区域[Fusion Table]

时间:2014-08-06 13:31:25

标签: javascript jquery google-apps-script google-fusion-tables

我正在使用鼠标悬停自定义连接到Fusion Table的地图。一切正常但我需要在鼠标悬停{1}}上进行高亮显示。这可能与我目前的代码/工作流程或我需要尝试别的吗?

以下是我的HTML源代码,此处为like this

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>Fusion Tables Layer Mouse Over</title>
        <style>
            body {
                font-family: Arial, sans-serif;
            }

            #map_canvas {
                height: 500px;
                width: 100% px;
            }
        </style>
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
        </script>
        <!-- visualization API will be used to query fusion table if loaded here, otherwise use the fusion query jsoncallback
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('visualization', '1', {});
</script>
-->
        <script type="text/javascript" src="fusiontips.js">
        </script>
        <script type="text/javascript" id="script">

            var map, layer;
            var googleApiKey = "AIzaSyA3FQFrNr5W2OEVmuENqhb2MBB2JabdaOY";


            function loadPoly() {
              if (layer != null) {
                layer.setMap(null);
                google.maps.event.clearInstanceListeners(layer);

              }
              //NOTE: you must use the encrypted tableid
              var tableid = '1-PzLkgpSpOEuRlCp7T-wuypEmi11BnDL3MPvNezV';
              layer = new google.maps.FusionTablesLayer({
                query: {
                  select: 'geometry',
                  from: tableid


                  },

                styles: [{
      polygonOptions: {
        fillColor: '#00FF00',
        fillOpacity: 0.3
      }}],




                map: map
              });
              layer.enableMapTips({
                select: "'name','Awami League','BNP'", // list of columns to query, typially need only one column.
                from: tableid, // fusion table name
                geometryColumn: 'geometry', // geometry column name
                suppressMapTips: false, // optional, whether to show map tips. default false
                delay: 20, // milliseconds mouse pause before send a server query. default 300.
                tolerance: 1, // tolerance in pixel around mouse. default is 6.
                googleApiKey: googleApiKey
              });
              map.setCenter(new google.maps.LatLng(24, 90));
              map.setZoom(7);
              addListeners();

            }

            function addListeners() {
              google.maps.event.addListener(layer, 'mouseover', function(fEvent) {
                var row = fEvent.row;
                myHtml = 'Election Info:<br/>';
                for (var x in row) {
                  if (row.hasOwnProperty(x)) {
                    myHtml += '<b>' + x + "</b>:" + row[x].value + "<br/>";
                  }
                }
                document.getElementById('info').innerHTML = myHtml;

              });
              google.maps.event.addListener(layer, 'mouseout', function(fevt) {
                document.getElementById('info').innerHTML = '';

              });
            }

            function initialize() {
              map = new google.maps.Map(document.getElementById('map_canvas'), {
                center: new google.maps.LatLng( 24, 90),
                zoom: 7,
                mapTypeId: google.maps.MapTypeId.ROADMAP
              });
              loadPoly();
            }
        </script>
    </head>
    <body onload="initialize();">
        <div>
            Move mouse over a fusion table feature and pause a while

        </div>
        <div>
            Select an sample fusion table:
            <input type="radio" name="ft" checked onclick="loadPoint()">Point
            <input type='radio' name="ft" onclick="loadLine()">Line
            <input type='radio' name="ft" onclick="loadPoly()">Polygon
        </div>
        <div id="map_canvas">
        </div>
        <div id="info">
        </div>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

如果我修改my example以使用您的表名和列名it works for me

完整代码:

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="UTF-8">
    <title>Fusion Tables Layer Example: Mouseover Map Styles</title>

<style type="text/css">
      #map-canvas {
        height: 500px;
        width: 600px;
      }
    </style>
    <script type="text/javascript"
        src="https://maps.google.com/maps/api/js?sensor=false"></script>

    <script type="text/javascript">
      var colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00'];
      var map;
      //NOTE: you must use the encrypted tableid
      var tableid = '1-PzLkgpSpOEuRlCp7T-wuypEmi11BnDL3MPvNezV';
      //NOTE: you must use your own API key authorized for your domain(s).
      var googleApiKey = 'AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ';
      function initialize() {
        var myOptions = {
          zoom: 2,
          center: new google.maps.LatLng(10, 0),
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var geocoder = new google.maps.Geocoder();
        map = new google.maps.Map(document.getElementById('map-canvas'),
            myOptions);
        geocoder.geocode({address: "Bangladesh"}, function(results, status) {
              if (status == google.maps.GeocoderStatus.OK) {
                if (results[0].geometry.viewport) 
                  map.fitBounds(results[0].geometry.viewport);
                else alert("geocoded result did not include viewport");
              } else {
                alert('Geocode was not successful for the following reason: ' + status);
              }
        });
        // Initialize JSONP request
        var script = document.createElement('script');
        var url = ['https://www.googleapis.com/fusiontables/v1/query?'];
        url.push('sql=');
        var query = "SELECT name, geometry, 'Awami_League', BNP FROM " +
            tableid;
        var encodedQuery = encodeURIComponent(query);
        url.push(encodedQuery);
        url.push('&callback=drawMap');
        url.push('&key='+googleApiKey);
        script.src = url.join('');
        var body = document.getElementsByTagName('body')[0];
        body.appendChild(script);
      }
      function createPolygon(country,id)
      {
            google.maps.event.addListener(country, 'mouseover', function() {
              this.setOptions({fillOpacity: 1});
            });
            google.maps.event.addListener(country, 'mouseout', function() {
              this.setOptions({fillOpacity: 0.3});
            });
            google.maps.event.addListener(country, 'click', function() {
              document.getElementById('content-window').innerHTML = id;
            });
      }
// "Invalid query: Column `Awami League' does not exist"
      function drawMap(data) {
        var rows = data['rows'];
        for (var i in rows) {
          if (rows[i][0] != 'Antarctica') {
            var id = rows[i][0];
            var newCoordinates = [];
            var geometries = rows[i][1]['geometries'];
            if (geometries) {
              for (var j in geometries) {
                newCoordinates.push(constructNewCoordinates(geometries[j]));
              }
            } else {
              newCoordinates = constructNewCoordinates(rows[i][1]['geometry']);
            }
            var randomnumber = Math.floor(Math.random() * 4);
            var country = new google.maps.Polygon({
              paths: newCoordinates,
              strokeColor: colors[randomnumber],
              strokeOpacity: 0,
              strokeWeight: 1,
              fillColor: colors[randomnumber],
              fillOpacity: 0.3
            });
            createPolygon(country,id);

            country.setMap(map);
          }
        }
      }

      function constructNewCoordinates(polygon) {
        var newCoordinates = [];
        var coordinates = polygon['coordinates'][0];
        for (var i in coordinates) {
          newCoordinates.push(
              new google.maps.LatLng(coordinates[i][1], coordinates[i][0]));
        }
        return newCoordinates;
      }

      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>

<div id="map-canvas"></div>
<div id="content-window"></div>
</script> 
</body> 
</html>