I'm trying to retrieve a list of all values from a raster layer (GeoTIFF) in GeoServer (2.5.x).

I tried to modify the code from http://trac.osgeo.org/openlayers/wiki/GetFeatureInfo but I can't seem to find a way to do this. I create a custom control that uses the `OpenLayers.Handler.Box` as input. This gives me back the right bounds (selected rectangle coordinates) but how do I send the bounds to GeoServer WMS?

I can code a Python module to send the bounds to and extract the values from the raster and send it back to my web application but I thought this must be possible from within OpenLayers? 

Does anyone have an example of how do extract a range of values from a raster using GeoServer and OpenLayers?

My code so far:


    function findLayerClick(event) {
        mouseLoc = map.getLonLatFromPixel(event.xy);
        layerlist = 'mylayer';
        //GetCoverage
        var url = sec.getFullRequestString({
                                            REQUEST: "GetFeatureInfo",
                                            EXCEPTIONS: "application/vnd.ogc.se_xml",
                                            BBOX: map.getExtent().toBBOX(),
                                            X: event.xy.x,
                                            Y: event.xy.y,
                                            INFO_FORMAT: 'text/plain',
                                            QUERY_LAYERS: layerlist,
                                            FEATURE_COUNT: 50,
                                            WIDTH: map.size.w,
                                            HEIGHT: map.size.h},
                                            "http://localhost:8080/geoserver/wms");
        
        var request = OpenLayers.Request.GET({
          url: url,
          callback: extractFeatures
        });
      }
      
      function extractFeatures(e) {
        console.log(e);
      }


My map, layers, and the control handling the box select:

    function init() {
        wgs84 = new OpenLayers.Projection('EPSG:4326');
        googleProjection = new OpenLayers.Projection('EPSG:900913');
        
    var options = {
          controls: [
                      new OpenLayers.Control.LayerSwitcher(),
                      new OpenLayers.Control.Navigation({zoomWheelEnabled: true, handleRightClicks: true}),
                      new OpenLayers.Control.PanZoom(),
                      new OpenLayers.Control.DragPan(),
                      new OpenLayers.Control.ScaleLine({maxWidth:200})
                    ],
          
          div: 'map-canvas',
          theme: null,
          units: 'm',
          projection: googleProjection,
          displayProjection: wgs84,
          maxResolution: 'auto',
          
          eventListeners: {
              'movestart': function(e) {
              },
              'zoomend': function(e) {
                  zoomBoxControl.deactivate();
              }
          }
        };
        
        map = new OpenLayers.Map(options);

        var ghyb = new OpenLayers.Layer.Google(
            "Google Physical",
            {
              type: google.maps.MapTypeId.TERRAIN,
              minZoomLevel: 1,
              numZoomLevels: 11,
              sphericalMercator: true,
              projection: 'EPSG:900913'
            }
        );

        //this is the raster layer
        sec = new OpenLayers.Layer.WMS(
          "mylayer",
          "http://localhost:8080/geoserver/wms",
          {layers: 'mylayer', format:'image/png', transparent:'true'},
          {opacity: 1.0, visibility: true, displayInLayerSwitcher: true, isBaseLayer: false}
        );
         
         OpenLayers.Util.extend(control, {
          draw: function () {
              this.drag = new OpenLayers.Handler.Box( control,
                  {"done": this.notice},
                  {keyMask: OpenLayers.Handler.MOD_CTRL});
              this.drag.activate();
          },
        
          notice: function (bounds) {
            mybounds = bounds;
            
            
            console.log(mybounds);
            
            var lowerLeft = map.getLonLatFromPixel(new OpenLayers.Pixel(mybounds.left, mybounds.bottom));
            var upperRight = map.getLonLatFromPixel(new OpenLayers.Pixel(mybounds.right, mybounds.top));
            
            mybounds = new OpenLayers.Bounds();
            mybounds.extend(lowerLeft);
            mybounds.extend(upperRight);
            
            //findLayerClick(mybounds);
            return(true);
          }
        });
      }


The `findLayerClick` function returns back a valid value of a clicked pixel but i need the list (table, array or whatever) of values in the selected range. Hope someone can help me.