docs: function(force) {
          if (force || this.invalidBounds()) {
              var viewBounds = this.getViewBounds();
              var origin = this.getOrigin();
              var rotationOrigin = new OpenLayers.Geometry.Point(origin.lon, origin.lat);
              var viewBoundsWidth = viewBounds.getWidth();
              var viewBoundsHeight = viewBounds.getHeight();
              var aspectRatio = viewBoundsWidth / viewBoundsHeight;
              var maxHeight = Math.sqrt(this.dx * this.dy * this.maxFeatures / aspectRatio);
              var maxWidth = maxHeight * aspectRatio; 
              var gridWidth = Math.min(viewBoundsWidth * this.ratio, maxWidth);
              var gridHeight = Math.min(viewBoundsHeight * this.ratio, maxHeight);
              var center = viewBounds.getCenterLonLat();
              this.gridBounds = new OpenLayers.Bounds(
                  center.lon - (gridWidth / 2),
                  center.lat - (gridHeight / 2),
                  center.lon + (gridWidth / 2),
                  center.lat + (gridHeight / 2)
              );
              var rows = Math.floor(gridHeight / this.dy);
              var cols = Math.floor(gridWidth / this.dx);
              var gridLeft = origin.lon + (this.dx * Math.ceil((this.gridBounds.left - origin.lon) / this.dx));
              var gridBottom = origin.lat + (this.dy * Math.ceil((this.gridBounds.bottom - origin.lat) / this.dy));
              var features = new Array(rows * cols);
              var x, y, point;
              for (var i=0; i<cols; ++i) {
                  x = gridLeft + (i * this.dx);
                  for (var j=0; j<rows; ++j) {
                      y = gridBottom + (j * this.dy);
                      point = new OpenLayers.Geometry.Point(x, y);
                      if (this.rotation) {
                          point.rotate(this.rotation, rotationOrigin);
                      }
                      features[(i*rows)+j] = new OpenLayers.Feature.Vector(point);
                  }
              }
              this.destroyFeatures(this.features, {silent: true});
              this.addFeatures(features, {silent: true});
          }
      }