Thanks for the explanation Andreas, that makes sense. I added the following code and that has solved the problem.
var selection = new OpenLayers.Layer.Vector("Selected Walk", { }); map.addLayer(selection) selection.addFeatures(walkFeat) walkFeat = selection.features[0] Thanks again Tom -----Original Message----- From: Andreas Hocevar [mailto:ahoce...@opengeo.org] Sent: 17 February 2013 10:24 To: Thomas Colley Cc: Users@geoext.org Subject: Re: [Users] Fit GeoExt PrintPage to extent of a feature Hey, the code needs the map, and it gets the map through the feature.layer.map reference. If you don't add the feature to a layer, you may want to do something like the following instead of using the fit() method: printMapPanel.map.zoomToExtent(feature.getBounds()); Andreas. On Sun, Feb 17, 2013 at 11:02 AM, Thomas Colley <it...@neath-porttalbot.gov.uk> wrote: > Thanks for your reply Andreas > > There are 2 WMS layers on my map, walks (linestrings) and start points > (points). When a user clicks on a start point a WMSGetFeatureInfo > request is made across both layers to bring back the start point > feature that contains all of the attribute information to be displayed > in the popup and sent through to mapfish for the printed map and the > feature for the walk itself just for the geometry. The GML response is > then read and the individual features are extracted. > > These features are then passed into the PrintWalk procedure. I guess > it makes sense that the features returned by the GetFeatureInfo don't > actually belong to any layer. I will create a Vector Layer to add the > walk feature to and hopefully that will solve the problem. > > Just out of interest is there a reason the code looks for a feature to > belong to a layer as all it needs is the geometry of the feature itself? > > Thanks very much for your advice > > Tom > > map.events.register('click',this,function(e){ > var lonLat = map.getLonLatFromPixel(new > OpenLayers.Pixel(e.xy.x, e.xy.y)); > var params={ > REQUEST: "GetFeatureInfo", > EXCEPTIONS: "application/vnd.ogc.se_xml", > BBOX: map.getExtent().toBBOX(), > X: parseInt(e.xy.x), > Y: parseInt(e.xy.y), > INFO_FORMAT: 'application/vnd.ogc.gml', > QUERY_LAYERS: > ['web_walks_start_points','web_walks'], > FEATURE_COUNT: 2, > Srs: 'EPSG:27700', > Layers: ['web_walks_start_points','web_walks'], > Styles: '', > WIDTH: map.size.w, > HEIGHT: map.size.h > }; > > var > request=OpenLayers.loadURL(GeoServerURL,params,this,function(_response > ){ > > var gmlLayer=new OpenLayers.Format.GML({ > featureNS: 'http://www.npt.gov.uk/', > featurePrefix: 'npt', > geometryName: 'geom', > extractAttributes: true > }); > > var > features=gmlLayer.read(_response.responseText); > > if (features.length!=2){ > return; > } > > startFeat = features[0] > walkFeat = features[1] > > blurb = OpenLayers.Request.GET({ > url: "1.html", //test > web page, will dynamically point to formatted feature page for popup > callback: function Pop(){ > var popup = new > OpenLayers.Popup.FramedCloud( > 'infopop', > lonLat, > new > OpenLayers.Size(10, 10), > blurb.responseText + > '<input type="button" value="Print..." > onclick="PrintWalk(walkFeat,startFeat);">', > { offset: { x: 0, y: 0 > }, size: new OpenLayers.Size(0, 0) }, > true > ); > map.addPopup(popup, true); > } > }); > }); > > OpenLayers.Event.stop(e); > }) > > > -----Original Message----- > From: andreas.hoce...@gmail.com [mailto:andreas.hoce...@gmail.com] On > Behalf Of Andreas Hocevar > Sent: 15 February 2013 17:02 > To: Thomas Colley > Cc: Users@geoext.org > Subject: Re: [Users] Fit GeoExt PrintPage to extent of a feature > > This looks like the feature you pass to PrintWalk does not belong to a > layer. You will need to provide more context so we can see what is > wrong. > > Andreas. > > On Fri, Feb 15, 2013 at 10:01 AM, Thomas Colley > <it...@neath-porttalbot.gov.uk> wrote: >> Hi Everyone >> >> >> >> I am trying to add a print function to a map using GeoExt and the >> Geoserver print module. >> >> >> >> Users click on a feature to bring up an information popup with a >> print > >> button in it. When the print button is clicked I would like the >> PrintPage extent to fit to the feature. I am not having much luck so >> far. Below is the print function. >> >> >> >> PrintWalk = function(feature) { >> >> var featGeom = feature.geometry >> >> printPage.fit(feature, true); >> >> } >> >> >> >> The error I get is: >> >> TypeError: fitTo.layer is null GeoExt.js > (line >> 166) >> >> >> >> I have also tried printPage.fit(featGeom, true); instead it is >> looking > >> for the geometry rather than the feature itself but then I get >> >> TypeError: map.getExtent is not a function GeoExt.js > (line >> 167) >> >> >> >> The feature geometry being passed through is a multilinestring. >> >> >> >> Using printPage.fit(map, true) prints fine. >> >> >> >> I would be very grateful if anyone has any ideas what I'm doing wrong. >> >> >> >> Thanks >> >> >> >> Tom >> >> >> >> >> >> >> _______________________________________________ >> Users mailing list >> Users@geoext.org >> http://www.geoext.org/cgi-bin/mailman/listinfo/users >> > > > > -- > Andreas Hocevar > OpenGeo - http://opengeo.org/ > Expert service straight from the developers. > > -- Andreas Hocevar OpenGeo - http://opengeo.org/ Expert service straight from the developers. _______________________________________________ Users mailing list Users@geoext.org http://www.geoext.org/cgi-bin/mailman/listinfo/users