[fusion-users] Problem with layer hiding and showing.
Tómas Guðmundsson
tomas at snertill.is
Wed Aug 6 11:20:26 EDT 2008
Thank you for that Brian.
But I managed to finally solve this problem. I'm not sure if anyone else has countered it but at least, calling layer.show for many layers, that is wanting to display many layers at one time resulted in faulty behavior and not all layers were shown. So on line 879 in Mapguide.js (fusion/Mapguide/Mapguide.js) I added this function:
/** function : sneShowLayers()
* This function takes in an array of layers
* so that multiple layers can be displayed at once
* instead of just one at a time
*/
sneShowLayers: function(layers, noDraw) {
for (var i = 0; i < layers.length; i++) {
this.processLayerEvents(layers[i], true);
this.aShowLayers.push(layers[i].uniqueId);
}
iif (!noDraw) {
this.drawMap();
}
},
/** function : sneHideLayers()
* This function takes in an array of layers
* so that multiple layers can be hidden at once
* instead of just one at a time
*/
sneHideLayers: function( layers, noDraw ) {
for (var i = 0; i < layers.length; i++) {
this.processLayerEvents(layers[i], false);
this.aHideLayers.push(layers[i].uniqueId);
}
if (!noDraw) {
this.drawMap();
}
},
Very similar to the showLayer function it has been altered to take in an array of layers instead of just a single array. This way they will all be pushed into the array that will be shown for the next draw of the map. So to fully allow for let's say displaying all layers or hiding them all you have to traverse through the layer tree / layer legend and add every layer to a temporary array and then send it to this function with "map.sneHideLayers(layersToHideArray)" and / or "map.sneShowLayers(layersToShowArray)". Hope this helps as most people out there.
Kind regards,
Tómas.
From: Berdel, Brian [mailto:brian.berdel at mcmtrans.com]
Sent: 6. ágúst 2008 14:46
To: Tómas Guðmundsson; Kenneth Skovhede, GEOGRAF A/S
Cc: fusion-users at lists.osgeo.org
Subject: RE: [fusion-users] Problem with layer hiding and showing.
Here is code to show a layer (just replace layerName)
var mapWidget = Fusion.getWidgetById('Map');
var layer = mapWidget.aMaps[0].getLayerByName(layerName);
layer.show();
Brian
From: fusion-users-bounces at lists.osgeo.org [mailto:fusion-users-bounces at lists.osgeo.org] On Behalf Of Tómas Guðmundsson
Sent: Wednesday, August 06, 2008 10:18 AM
To: Kenneth Skovhede, GEOGRAF A/S
Cc: fusion-users at lists.osgeo.org
Subject: RE: [fusion-users] Problem with layer hiding and showing.
Thanks.
I am trying to use map.showLayers() but I'm not sure what parameters it needs.
Does anyone know where the definition of layer.show() and layer.hide() as well as
map.showLayers() and map.hideLayers().
Regards,
Tómas.
From: Kenneth Skovhede, GEOGRAF A/S [mailto:ks at geograf.dk]
Sent: 6. ágúst 2008 13:47
To: Tómas Guðmundsson
Cc: Mike Adair; fusion-users at lists.osgeo.org
Subject: Re: [fusion-users] Problem with layer hiding and showing.
I have no idea how to do this in fusion, but you will likely have to run through the layer list when doing a "layer.show()".
I think there is a call that updates the map without returning the image. You can use that, but it will require multiple server calls over http.
Regards, Kenneth Skovhede, GEOGRAF A/S
Tómas Guðmundsson skrev:
Thanks Kenneth,
I'm trying to figure it out how I put multiple GUIDS into the mapagent request.
Only way I know how to do it is with layer.show(). I'll look more into it but if you
Have it on the top of your head, any info would be great thanks.
Regards,
Tómas.
From: Kenneth Skovhede, GEOGRAF A/S [mailto:ks at geograf.dk]
Sent: 6. ágúst 2008 10:57
To: Tómas Guðmundsson
Cc: Mike Adair; fusion-users at lists.osgeo.org
Subject: Re: [fusion-users] Problem with layer hiding and showing.
the "ShowLayers" parameter in the "GETMAPIMAGE" call, can take multiple GUIDs, so you should send:
SHOWLAYERS=118e0096-0000-1000-8000-001b2418ab2d,1192c52c-0000-1000-8000-001b2418ab2d,119062dc-0000-1000-8000-001b2418ab2d
Regards, Kenneth Skovhede, GEOGRAF A/S
Tómas Guðmundsson skrev:
Mike, all.
With some debugging this is what I find:
console.log('showing :', group.layers[j], ' - ', group.layers[j].layerName);
showing : Object uniqueId=118e0096-0000-1000-8000-001b2418ab2d - HV_loki
showing : Object uniqueId=1192c52c-0000-1000-8000-001b2418ab2d - HV_brunnar
showing : Object uniqueId=119062dc-0000-1000-8000-001b2418ab2d - HV_lagnir
This is normal, this is what it should do. And this is printed out when each layer
calls a method "layer.show()". Now, there is only one mapagent call that displays
this.
clientagent Fusion Viewer
showLayers 119062dc-0000-1000-8000-001b2418ab2d
operation GETMAPIMAGE
And evidently on my map, the only layer that get's displayed is HV_lagnir. If I change
the order, the last one always appears. However, the legend and "group.layers[j].visible"
all result in true. It would be kind of silly to wait for 3 images to display 3 layers,
so I'm wondering how this can be solved.
Regards,
Tómas
-----Original Message-----
From: fusion-users-bounces at lists.osgeo.org [mailto:fusion-users-bounces at lists.osgeo.org] On Behalf Of Tómas Guðmundsson
Sent: 6. ágúst 2008 09:05
To: Mike Adair
Cc: fusion-users at lists.osgeo.org
Subject: RE: [fusion-users] Problem with layer hiding and showing.
Mike,
I'm afraid that all I found was the 'showlayers' parameter. And it
was some kind of a hash,
clientagent Fusion Viewer
showLayers 0f682be6-0000-1000-8000-001b2418ab2d
operation GETMAPIMAGE
I don't quite know how to decrypt that but any help would be appreciated.
F.y.i. this is the kind of hash that would be correct with the layers
appropriately displayed.
clientagent Fusion Viewer
showLayers 0f65c98c-0000-1000-8000-001b2418ab2d
operation GETMAPIMAGE
The delta is only in the first part.
Regards,
Tómas.
-----Original Message-----
From: Mike Adair [mailto:madair at dmsolutions.ca]
Sent: 5. ágúst 2008 19:20
To: Tómas Guðmundsson
Cc: fusion-users at lists.osgeo.org
Subject: Re: [fusion-users] Problem with layer hiding and showing.
Tomas,
You should check the value of the 'showlayers' and 'hidelayers'
parameters in the sequence of mapagent calls to GETMAPIMAGE. Those are
the parameters that turn layers on or off. If they are what you are
expecting, then it's possible that there is a problem with specifying
those params, e.g. they should be comma-separated and they are not, or
vice versa.
Mike
Tómas Guðmundsson wrote:
Sorry about that. Everything about "If I do nothing else but reload
the map (i.e. pan the map, zoom or refresh it) the correct layers are
displayed on the map (all 3 or none at all).
So I figure this has something to do with timing or something like
that, of the fetching of the map itself?"
Is wrong. So ignore that.
Rgds.
Tómas
*From:* fusion-users-bounces at lists.osgeo.org
[mailto:fusion-users-bounces at lists.osgeo.org] *On Behalf Of *Tómas
Guðmundsson
*Sent:* 5. ágúst 2008 13:36
*To:* fusion-users at lists.osgeo.org
*Subject:* [fusion-users] Problem with layer hiding and showing.
Hi all.
I currently have function that I am using that systematically goes
through an array it's passed and walks through the layer legend to see
if it finds a layer. So for every layername in a layerarray, I check
if that layer exists and then if the checkbox is checked I show it,
else I hide it. Now I've been debugging this and for an array of 3
layers (this also happens for layers more than 1), I get 3 times the
debug message "showing layer", when I check the checkbox again I get
the debug message "hiding layer" 3 times as well.
So I know this is working properly, however Mapguide Server does not
think so. Or at least the images I get back from the server are
missing one layer (the first one, every time). So according to the
legend all 3 layers are visible. However, the map shows everyone
except the first one. Now I figured this was weird, especially since
when I try to hide them, they all are hidden except the first one
which is now visible. And now for the final twist.
If I do nothing else but reload the map (i.e. pan the map, zoom or
refresh it) the correct layers are displayed on the map (all 3 or none
at all).
So I figure this has something to do with timing or something like
that, of the fetching of the map itself?
Please let me know if this is not clear to you and I'll try to explain
better, but I find it weird I can not hide more than 2 layers at a time.
Kind regards,
Tómas
------------------------------------------------------------------------
_______________________________________________
fusion-users mailing list
fusion-users at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/fusion-users
_______________________________________________
fusion-users mailing list
fusion-users at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/fusion-users
_______________________________________________
fusion-users mailing list
fusion-users at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/fusion-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/fusion-users/attachments/20080806/eafb3123/attachment-0001.html
More information about the fusion-users
mailing list