[Geoserver-users] TileCache + GetFeatureinfo(Geoserver1.6.4)?

Dear All:
I have a problem on building getFeatureinfo. I have use Geoserver 1.6.4, and Tilecache. I pointed my geoserver sample page to my tilecache. then I still want getfeatureinfo function of Geoserver. I try to modified it, but not success.

        var map;
        var testlayer;
        var tiled;
        function setHTML(response) { 
            document.getElementById('nodelist').innerHTML = response.responseText;

        };
        
        OpenLayers.IMAGE_RELOAD_ATTEMPTS = 5;
        OpenLayers.DOTS_PER_INCH = 25.4 / 0.28;
        
        function init(){
            var bounds = new OpenLayers.Bounds(
                143.83482400000003, -43.648056,

                148.47914100000003, -39.573891
            );
            var options = {
                controls: [],
                maxExtent: bounds,
                maxResolution: 0.018141863281250004,

                projection: "EPSG:4326",
                units: 'degrees'
            };
            map = new OpenLayers.Map('map', options);
            
            
            // setup tiled layer

            tiled = new OpenLayers.Layer.WMS(
                "Geoserver layers - Tiled", "[http://127.0.0.1:2010/tilecache/tilecache.py](http://127.0.0.1:2010/tilecache/tilecache.py)",

                {
                    layers: 'tasmania',
                    styles: '',
                    height: '658',
                    width: '800',
                    srs: 'EPSG:4326',

                    format: 'image/png',
                    tiled: 'true',
                    tilesOrigin : "143.83482400000003,-43.648056"
                },
                {buffer: 0} 

            );
            

        
            map.addLayer( tiled);
            
            // setup controls and initial zooms
            map.addControl(new OpenLayers.Control.PanZoomBar());

            map.addControl(new OpenLayers.Control.Navigation());
            map.addControl(new OpenLayers.Control.Scale($('scale')));
            map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));

            map.addControl(new OpenLayers.Control.LayerSwitcher());
            //map.addControl(new OpenLayers.Control.OverviewMap());
            map.zoomToExtent(bounds);

            testlayer = new OpenLayers.Layer.WMS(

                "Geoserver layers - Untiled", "[http://127.0.0.1:2008/geoserver/wms](http://127.0.0.1:2008/geoserver/wms)",
                {
                    layers: 'tasmania',

                    styles: '',
                    height: '658',
                    width: '800',
                    srs: 'EPSG:4326',
                    format: 'image/png'

                },
                {singleTile: true, ratio: 1} 
            );
// here I would like to add stuff like this
//then geoserver only contain one layer, which is testlayer
             var geoserver = map;

                 geoserver.addLayer(testlayer);
             
            
            // support GetFeatureInfo
            geoserver.events.register('click', geoserver, function (e) {
                document.getElementById('nodelist').innerHTML = "Loading... please wait...";

                var url =  geoserver.layers[0].getFullRequestString(
                    {
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",

                        BBOX: geoserver.getExtent().toBBOX(),
                        X: e.xy.x,
                        Y: e.xy.y,
                        INFO_FORMAT: 'text/html',
                        QUERY_LAYERS: geoserver.layers[0].params.LAYERS,

                        FEATURE_COUNT: 50,
                        WIDTH: geoserver.size.w,
                        HEIGHT: geoserver.size.h
                    },
                    "[http://127.0.0.1:2008/geoserver/wms](http://127.0.0.1:2008/geoserver/wms)"

                );
                OpenLayers.loadURL(url, '', this, setHTML, setHTML);
                OpenLayers.Event.stop(e);
            });
        }

b

because I am not a JavaScript expert. it is hard for me to replace the layer, such as map.layers[0]. how can use tilecache as base layer, and have getFeatureInfo on top of it at same time?
Much much thanks


Xiaoyu Guan (Sam)
Geo-information Science
Wageningen UR

Dear All.
the problem have been solved. I simply add another WMS layer to map and hide it. then GetFeatureinfor can request from this WMS. please check the following codes.

var map;
var testlayer;
var tiled;
function setHTML(response) {
document.getElementById(‘nodelist’).innerHTML = response.responseText;

};

OpenLayers.IMAGE_RELOAD_ATTEMPTS = 5;
OpenLayers.DOTS_PER_INCH = 25.4 / 0.28;

function init(){
var bounds = new OpenLayers.Bounds(
143.83482400000003, -43.648056,

148.47914100000003, -39.573891
);
var options = {
controls: ,
maxExtent: bounds,
maxResolution: 0.018141863281250004,

projection: “EPSG:4326”,
units: ‘degrees’
};
map = new OpenLayers.Map(‘map’, options);

// setup tiled layer

tiled = new OpenLayers.Layer.WMS(
“Geoserver layers - Tiled”, “http://127.0.0.1:2010/tilecache/tilecache.py”,

{
layers: ‘tasmania’,
styles: ‘’,
height: ‘658’,
width: ‘800’,
srs: ‘EPSG:4326’,

format: ‘image/png’,
tiled: ‘true’,
tilesOrigin : “143.83482400000003,-43.648056”
},
{buffer: 0}

);

testlayer = new OpenLayers.Layer.WMS(

“Geoserver layers - Untiled”, “http://127.0.0.1:2008/geoserver/wms”,
{
layers: ‘tasmania’,

styles: ‘’,
height: ‘658’,
width: ‘800’,
srs: ‘EPSG:4326’,
format: ‘image/png’

},
{singleTile: true, ratio: 1,displayInLayerSwitcher: false /* Not show this layer */}
);

map.addLayers([tiled,testlayer]);

// setup controls and initial zooms
map.addControl(new OpenLayers.Control.PanZoomBar());

map.addControl(new OpenLayers.Control.Navigation());
map.addControl(new OpenLayers.Control.Scale($(‘scale’)));
map.addControl(new OpenLayers.Control.MousePosition({element: $(‘location’)}));

map.addControl(new OpenLayers.Control.LayerSwitcher());
//map.addControl(new OpenLayers.Control.OverviewMap());
map.zoomToExtent(bounds);

// support GetFeatureInfo
geoserver=map.layers.slice(1); // copy map.layers to a new object without TileCache layer
map.events.register(‘click’, geoserver, function (e) {
document.getElementById(‘nodelist’).innerHTML = “Loading… please wait…”;

var url = geoserver[0].getFullRequestString(
{
REQUEST: “GetFeatureInfo”,
EXCEPTIONS: “application/vnd.ogc.se_xml”,

BBOX: geoserver[0].getExtent().toBBOX(),
X: e.xy.x,
Y: e.xy.y,
INFO_FORMAT: ‘text/html’,
QUERY_LAYERS: geoserver[0].params.LAYERS,

FEATURE_COUNT: 50,
WIDTH: map.size.w,
HEIGHT: map.size.h
},
http://127.0.0.1:2008/geoserver/wms

);
OpenLayers.loadURL(url, ‘’, this, setHTML, setHTML);
OpenLayers.Event.stop(e);
});
}

All the best

Xiaoyu

On Thu, Jul 31, 2008 at 2:02 PM, Xiaoyu Guan <guanxiaoyu@anonymised.com> wrote:

Dear All:
I have a problem on building getFeatureinfo. I have use Geoserver 1.6.4, and Tilecache. I pointed my geoserver sample page to my tilecache. then I still want getfeatureinfo function of Geoserver. I try to modified it, but not success.

        var map;
        var testlayer;
        var tiled;
        function setHTML(response) { 
            document.getElementById('nodelist').innerHTML = response.responseText;

        };
        
        OpenLayers.IMAGE_RELOAD_ATTEMPTS = 5;
        OpenLayers.DOTS_PER_INCH = 25.4 / 0.28;
        
        function init(){
            var bounds = new OpenLayers.Bounds(
                143.83482400000003, -43.648056,

                148.47914100000003, -39.573891
            );
            var options = {
                controls: [],
                maxExtent: bounds,
                maxResolution: 0.018141863281250004,

                projection: "EPSG:4326",
                units: 'degrees'
            };
            map = new OpenLayers.Map('map', options);
            
            
            // setup tiled layer

            tiled = new OpenLayers.Layer.WMS(
                "Geoserver layers - Tiled", "[http://127.0.0.1:2010/tilecache/tilecache.py](http://127.0.0.1:2010/tilecache/tilecache.py)",

                {
                    layers: 'tasmania',
                    styles: '',
                    height: '658',
                    width: '800',
                    srs: 'EPSG:4326',

                    format: 'image/png',
                    tiled: 'true',
                    tilesOrigin : "143.83482400000003,-43.648056"
                },
                {buffer: 0} 

            );
            

        
            map.addLayer( tiled);
            
            // setup controls and initial zooms
            map.addControl(new OpenLayers.Control.PanZoomBar());

            map.addControl(new OpenLayers.Control.Navigation());
            map.addControl(new OpenLayers.Control.Scale($('scale')));
            map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));

            map.addControl(new OpenLayers.Control.LayerSwitcher());
            //map.addControl(new OpenLayers.Control.OverviewMap());
            map.zoomToExtent(bounds);

            testlayer = new OpenLayers.Layer.WMS(

                "Geoserver layers - Untiled", "[http://127.0.0.1:2008/geoserver/wms](http://127.0.0.1:2008/geoserver/wms)",
                {
                    layers: 'tasmania',

                    styles: '',
                    height: '658',
                    width: '800',
                    srs: 'EPSG:4326',
                    format: 'image/png'

                },
                {singleTile: true, ratio: 1} 
            );
// here I would like to add stuff like this
//then geoserver only contain one layer, which is testlayer
             var geoserver = map;

                 geoserver.addLayer(testlayer);
             
            
            // support GetFeatureInfo
            geoserver.events.register('click', geoserver, function (e) {
                document.getElementById('nodelist').innerHTML = "Loading... please wait...";

                var url =  geoserver.layers[0].getFullRequestString(
                    {
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",

                        BBOX: geoserver.getExtent().toBBOX(),
                        X: e.xy.x,
                        Y: e.xy.y,
                        INFO_FORMAT: 'text/html',
                        QUERY_LAYERS: geoserver.layers[0].params.LAYERS,

                        FEATURE_COUNT: 50,
                        WIDTH: geoserver.size.w,
                        HEIGHT: geoserver.size.h
                    },
                    "[http://127.0.0.1:2008/geoserver/wms](http://127.0.0.1:2008/geoserver/wms)"

                );
                OpenLayers.loadURL(url, '', this, setHTML, setHTML);
                OpenLayers.Event.stop(e);
            });
        }

b

because I am not a JavaScript expert. it is hard for me to replace the layer, such as map.layers[0]. how can use tilecache as base layer, and have getFeatureInfo on top of it at same time?
Much much thanks


Xiaoyu Guan (Sam)
Geo-information Science
Wageningen UR


Xiaoyu Guan (Sam)
Geo-information Science
Wageningen UR