Getting around the 500 row limit

前端 未结 4 1803
暖寄归人
暖寄归人 2021-01-07 11:27

I have written a Google Fusion Tables script I\'m happy with (below), but it\'s loading only 500 rows of points in my table, which has over 20,000 rows. This is my first tim

相关标签:
4条回答
  • 2021-01-07 11:49

    I solved the problem by using the json call method. Code below.

            <!DOCTYPE html>
            <html>
              <head>
                <meta charset="UTF-8">
                <title>David's Build Up</title>
    
                <link href="./stylesheets/example.css" media="screen" rel="stylesheet" type="text/css" />
    
    
                <link rel="shortcut icon" href="/images/favicon.ico" />
                <noscript><meta http-equiv="refresh" content="0;url=/no_javascript.html"></noscript>
    
                    <!-- Find box coordinates javascript -->
                    <script
                    src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
                </script>
    
                    <script type ="text/javascript" src="http://www.movable-type.co.uk/scripts/latlon.js"></script>
    
                    <!-- Type label text javascript -->     
                    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
                  <script type="text/javascript" src="./js/label.js"></script>
    
                    <!-- Visulization javascript -->
                    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    
                    <!-- Initialize visualization -->
                    <script type="text/javascript">
                      google.load('visualization', '1', {});
                    </script>
    
    
                <script type="text/javascript">
    
                        function drawBox(topleftx, toplefty, bottomrightx, bottomrighty) {
    
                          var bounds = new google.maps.LatLngBounds(
                            new google.maps.LatLng( topleftx, toplefty ),
                            new google.maps.LatLng( bottomrightx, bottomrighty )
                          );
    
                        var overlay = new google.maps.Rectangle({
                          map: carto_map,
                          bounds: bounds,
                          strokeColor: "#0000ff",
                          strokeOpacity: 0.20,
                          strokeWeight: 2,
                          fillColor: "#0000ff",
                          fillOpacity: 0.050,
                        });
                        }
    
                  function initialize() {
    
                            // Set the map parameters
                            var cartodbMapOptions = {
                                zoom: 5 ,
                                center: new google.maps.LatLng( 40.313043, -97.822266 ),
                                mapTypeId: google.maps.MapTypeId.ROADMAP
                            }
                        // Initialize the map
                        carto_map = new google.maps.Map(document.getElementById("map"),cartodbMapOptions);
    
                            // Query to grab the data
                    var query = "SELECT Latitude, Longitude, Impressions FROM " +
                        '[encrypted table ID here]';
                    var encodedQuery = encodeURIComponent(query);
    
                    // Construct the URL to grab the data
                    var url = ['https://www.googleapis.com/fusiontables/v1/query'];
                    url.push('?sql=' + encodedQuery);
                    url.push('&key=AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ');
                    url.push('&callback=?');
    
                            // Set the number of rows
                            var numRows = 3500;
    
                    // Get the variables from the table, in a loop
                    $.ajax({
                      url: url.join(''),
                      dataType: 'jsonp',
                      success: function (data) {
                        var rows = data['rows'];
                        var ftData = document.getElementById('ft-data');
                        for (var i in rows) {
                          var centerX = rows[i][0];
                          var centerY = rows[i][1];
                                        var imps = rows[i][2];
                                        // Set the center points
                                        var centerPoint = new LatLon(centerX,centerY);
                                        var latLng = new google.maps.LatLng(centerX,centerY);
                                        // Set top left points
                                        var toplefty = centerPoint.destinationPoint(-45, 6)._lon;
                                        var topleftx = centerPoint.destinationPoint(-45, 7.7)._lat;
                                        // Set bottom right points
                                        var bottomrighty = centerPoint.destinationPoint(135, 6)._lon;       
                                        var bottomrightx = centerPoint.destinationPoint(135, 7.7)._lat;
                                        // Draw the box
                                        drawBox(topleftx, toplefty, bottomrightx, bottomrighty);
                                        // Drop markers
                                        var marker = new google.maps.Marker({
                                   position: latLng,
                                   draggable: false,
                                         markertext: imps,
                                         flat: true,
                                   map: carto_map
                                  });
                                   var label = new Label({
                                     map: carto_map,
                                         position: latLng,
                                         draggable: true
                                   });
                                   label.bindTo('text', marker, 'markertext');
                                     marker.setMap(null);
                        };
                      }
                        });
    
                  }
                </script>
              </head>
    
              <body onload="initialize()">
                    <div id="map"></div>
                    <div id="ft-data"></div>
              </body>
            </html>
    
    0 讨论(0)
  • 2021-01-07 11:59

    The Gviz API does have a 500 row limit for a given query.

    Any table is limited to 100,000 mappable rows, but that's well outside your reported 20,000 rows.

    The new Javascript API, currently accepting Trusted Testers, offers JSON format support for any number of rows returned for a query. You can apply for the TT program by requesting membership in this group: https://groups.google.com/group/fusion-tables-api-trusted-testers

    -Rebecca

    0 讨论(0)
  • 2021-01-07 12:02

    The fusiontables/gvizdata URL is intended for Gviz charts and so is limited to 500 points. There are other ways to query that don't have that limitation. See https://developers.google.com/fusiontables/docs/sample_code for examples.

    0 讨论(0)
  • 2021-01-07 12:13

    I routinely refresh a 2500 row table by deleting all rows and inserting new ones. The loop in my code that constructs the INSERT sql has a nested loop that just counts to 400, sends that sql, and then starts building another one with the next 400 records.

    0 讨论(0)
提交回复
热议问题