0

我尝试在 Google Maps API V3 中显示 Google Fusion Tables 的标签,当 Zoom 为 9 或更少时,我和我设置为标签显示;但是当页面在 Zoom for 4 处下载第一张地图时可以,有时(几乎总是)当我放大到 Zoom 9 或更低时,页面冻结并在我的浏览器(Firefox 20)中出现消息“查询错误:请求超时” .

代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>USA</title>

<style>
#map_canvas { width: 1000px; height: 600px; }
.style1 {font-size: 14px}
</style>

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>    
<!--Load the AJAX API-->
<script type="text/javascript" src="http://geoxml3.googlecode.com/svn/branches/polys/geoxml3.js"></script>
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/src/infobox.js"></script>
<script type="text/javascript" src="http://www.google-analytics.com/urchin.js"></script>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>

<script type="text/javascript">
google.load('visualization', '1', {'packages':['corechart', 'table', 'geomap']});
var map;
var labels = [];
var layer;
var tableid = '15Dce-frPm_D_5gTTG2gKwlWTElkgL7NC1RqDzuY';

function initialize() {
    geocoder = new google.maps.Geocoder();
    map = new google.maps.Map(document.getElementById('map_canvas'), {
    //center: new google.maps.LatLng(38.410558,-100.209963),
    //zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });

  layer = new google.maps.FusionTablesLayer();
  var countylayerOptions = {
        styles: [{
  where: "POP10 < 10000",
  polygonOptions: {
    fillColor: "#E06464",
    fillOpacity: 0.7,
    strokeColor: "#333333",
    strokeOpacity: 1.0,
    strokeWeight: 1
    }
  }, 

  {
  where: "POP10 > 10000 and POP10 < 25000",
  polygonOptions: {
    fillColor: "#E3D72B",
    fillOpacity: 0.7,
    strokeColor: "#333333",
    strokeOpacity: 1.0,
    strokeWeight: 1
    }
  }, 
  {
  where: "POP10 > 25000 and POP10 < 50000",
  polygonOptions: {
    fillColor: "#D01A4A",
    fillOpacity: 0.7,
    strokeColor: "#333333",
    strokeOpacity: 1.0,
    strokeWeight: 1
    }
  }, 
  {
  where: "POP10 > 50000 and POP10 < 100000",
  polygonOptions: {
    fillColor: "#14505C",
    fillOpacity: 0.7,
    strokeColor: "#333333",
    strokeOpacity: 1.0,
    strokeWeight: 1
    }
  }, 
  {
  where: "POP10 > 100000",
  polygonOptions: {
    fillColor: "#14505C",
    fillOpacity: 0.7,
    strokeColor: "#333333",
    strokeOpacity: 1.0,
    strokeWeight: 1
    }
  }],

  map: map,

  query: {
          select: 'Merge of Tigerline Shape Files 2012 and Gaz_places_national_2010',
          from: '15Dce-frPm_D_5gTTG2gKwlWTElkgL7NC1RqDzuY'
         }
       }

  layer.setOptions(countylayerOptions);
  layer.setMap(map);


  codeAddress();

  google.maps.event.addListener(map, "bounds_changed", function() {
    displaynames();
  });
  google.maps.event.addListener(map, "zoom_changed", function() {
    if (map.getZoom() < 9) {
      for (var i=0; i<labels.length; i++) {
        labels[i].setMap(null);
      }
    }
  });


    google.maps.event.addListener(layer, 'click', function(e) {

 //update the content of the InfoWindow
    e.infoWindowHtml = '<h3 style="font-family: Arial; font-size: 13px; color: #FFFFFF; background-color: #0099FF; text-align: center; font-style: italic">' + 'Incorporated and census designated places' 
    + '<h1 style="font-family: Arial; font-size: 12px; color: #333333; background-color: #E2E2E2; text-align: left ">  Population: &nbsp;' + e.row['PLACEFP'].value + "<br />";
  });

}

function codeAddress() {
    var address = document.getElementById("address").value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            //map: map, 
            position: results[0].geometry.location
        });
        if (results[0].geometry.viewport) 
          map.fitBounds(results[0].geometry.viewport);
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  }

function displaynames() {
  //set the query using the current bounds
  var queryStr = "SELECT geometry, name, INTPTLAT, INTPTLON FROM "+ tableid + " WHERE ST_INTERSECTS(geometry, RECTANGLE(LATLNG"+map.getBounds().getSouthWest()+",LATLNG"+map.getBounds().getNorthEast()+"))";   
  var queryText = encodeURIComponent(queryStr);
  var query = new google.visualization.Query('http://www.google.com/fusiontables/gvizdata?tq='  + queryText);

  //set the callback function
  query.send(displaynameText);
}

var infowindow = new google.maps.InfoWindow();

function displaynameText(response) {
if (!response) {
  alert('no response');
  return;
}
if (response.isError()) {
  alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
  return;
} 
  if (map.getZoom() < 9) return;
  FTresponse = response;

  numRows = response.getDataTable().getNumberOfRows();
  numCols = response.getDataTable().getNumberOfColumns();

  for(i = 0; i < numRows; i++) {
      var name = response.getDataTable().getValue(i, 1);
      var nameStr = name.toString()
      while (nameStr.length < 5) { nameStr = '0' + nameStr; }
      var point = new google.maps.LatLng(
          parseFloat(response.getDataTable().getValue(i, 2)),
          parseFloat(response.getDataTable().getValue(i, 3)));

      labels.push(new InfoBox({
      content: nameStr
      ,boxStyle: {
         border: "1px solid black"
        ,textAlign: "center"
        ,backgroundColor:"white"
        ,fontSize: "8pt"
        ,width: "50px"
     }
      ,disableAutoPan: true
      ,pixelOffset: new google.maps.Size(-25, 0)
      ,position: point
      ,closeBoxURL: ""
      ,isHidden: false
      ,enableEventPropagation: true
      }));
      labels[labels.length-1].open(map);
  }
}
</script>

<body onload="initialize();">
<form> 
<div id="panel_2" style="position:absolute; left:50%; top:0px; width:900px; height:30px; z-index:1; margin-left: -450px; visibility: hidden;">
<span class="style1">Show:</span> 
<input id="address" type="text" value="USA" ></input>
<input id="geocode" type="button" onclick="codeAddress();" value="Geocode"></input>   
</div>

<div id="map_canvas" style="position:absolute; left:50%; top:30px; width:900px; height:700px; z-index:1; margin-left: -450px;"></div>
</body>
</html>

有谁知道为什么会这样?

最好的,达科

4

0 回答 0