Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

SETUP

OpenLayers / GeoServer + PostGIS

REQUIREMENT

I have a map with multiple WMS layers and of these I need to refresh a few after inserting a polygon in one of the layers.

PROBLEM

Given below are three options of the AJAX success callback function on successful insert of polygon geometry in the PostGIS backend and the corresponding errors/observations.

Option 1:

if(data == "SUCCESS")
{
   map.getLayersByName('dummy_nodes')[0].redraw(true);
   map.getLayersByName('bldg_logical')[0].redraw(true);  
}

// Throws error: Uncaught TypeError: Cannot call method 'redraw' of undefined

Option 2:

var tempLayer;
if(data == "SUCCESS")
{
   map.getLayersByName('dummy_nodes')[0].redraw(true);
   console.log("Prev cmd is successful");
   tempLayer = map.getLayersByName('bldg_logical')[0]
   tempLayer.redraw(true);  
}

// Outputs: 'Prev cmd is successful'
// tempLayer gives proper layer object: OpenLayers.Layer.WMS.OpenLayers.Class.initialize {metadata: Object, options: Object, singleTile: true, ratio: 1, isBaseLayer: false…}
// But still throws error: Uncaught TypeError: Cannot call method 'redraw' of undefined

Option 3:

if(data == "SUCCESS")
{
   map.getLayersByName('dummy_nodes')[0].redraw(true);
}

// Works fine (but I need both layers to be refreshed)

QUESTIONS

Could anyone let me know why the error occurs?
Is my usage wrong?
Does it have to do anything with the order in which the layers have been added to the map?

Thanks.

share|improve this question
    
Are you doing anything besides this in the ajax call? Also I would reference the layers directly not with a method lookup. –  Frank Phillips Jun 15 at 6:19
add comment

1 Answer

It looks to me like your layers named 'bldg_logical' don't exist. 'Undefined' means you have an uninitialized property. This implies that the getLayersByName method isn't finding any layers named 'bldg_logical'.

share|improve this answer
    
If you check the Option 2 section, the tempLayer variable gets the Layer object ie., getLayersByName works and the first element is present in the result array which implies the bldg_logical layer is present. So why should it throw an undefined error in that case? –  Siva Jul 23 '13 at 10:04
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.