ThinkGeo.com    |     Documentation    |     Premium Support

Problems with ordering of the Overlays

Can you take a look at the following:


 


In your MapParser Class on initOverlays function you have the following:


 



 for (var i = 0; i < json.layers.length; i++) {
            if (!json.layers.isBaseLayer) {
                var overlayJson = json.layers;
                var otype = overlayJson.otype.toUpperCase();
                if (otype == 'LAYER') {
                    var overlay = this.getLayerByJson(overlayJson, json.cid);
                    if (overlay) {
                        layers.push(overlay);
                        json.layers.splice(i, 1);
                    }
                }
            }
        }

 


I guess this is wrong. can you confirm this?


it's messing my layers order.


 



here is a quick fix, but there are other places on that function that should be reviewed.


  

 
  for (var i = 0; i < json.layers.length; i++) {
            var treatedLayer = 0;
            if (!json.layers[treatedLayer].isBaseLayer) {
                var overlayJson = json.layers[treatedLayer];
                var otype = overlayJson.otype.toUpperCase();
                if (otype == 'LAYER') {
                    var overlay = this.getLayerByJson(overlayJson, json.cid);
                    if (overlay) {
                        layers.push(overlay);
                        json.layers.splice(treatedLayer, 1);
                    }
                }
            } else {
                treatedLayer++;
            }
        }


Hope that you guys give me a nice discount on my acquisition of release version of developer and server unlimited. :P



Hi, Rui 
  
 I think you have some misunderstanding about the order of Overlays in WebEdition. To clarify,  we have StaticOverlay, DynamicOverlay, BackgroundOverlay, MarkerOverlay and CustomOverlays. The new order that from bottom to top will be BackgroundOverlay, StaticOverlay, base overlays in CustomOverlays, DynamicOverlay, none-base overlays in CustomOverlays, MarkerOverlay, MarkerOverlay in CustomOverlays. 
  
 If you want to buy our products; please contact the support@thinkgeo.com. If you still have problems about it please let me know. 
  
 Thanks, 
 Khalil

So you are saying there is no bug? 
 That’s weird… because i’m allways using this.MapControl.CustomOverlays.Add(myOverlay); and they were not showing up in the order i add them… 
 and with my js were.  
 If you take a closer look at your javascript and make some draft on a piece of paper you will come to the same conclusion i did. 
  
 When you do that tell me that my javascript is worthless, and i will say you are right. 
  


First off, I suggest that you enable the OverlaySwitcher map tool to see the overlays that you have added to map.  
 Also I am sure there is no bug for the order of the Overlays. 
 If you could recreate it and please send us a simple sample for this problem. Many thanks to you. 
  
 Khalil

OK Khalil, if you’re sure there is no problem with the ordering of the overlays, fine for me. Maybe i’m doing something wrong. 
  
 Thanks.

Could you just take a look to a small video i've made and comment on that?


5cad8a93.thesefiles.com


thanks


 


some quickfix i came up with



        var icount = json.layers.length;
        for (var i = 0, treatedLayer = 0; i < icount; i++) {
            if (json.layers[treatedLayer].isBaseLayer) {
                var overlayJson = json.layers[treatedLayer];
                var overlay = this.getLayerByJson(overlayJson, json.cid);
                if (overlay) {
                    layers.push(overlay);
                }
                json.layers.splice(treatedLayer, 1);
            } else {
                treatedLayer++;
            }
        }


(...)


        icount = json.layers.length;
        for (var i = 0, treatedLayer = 0; i < icount; i++) {
            if (!json.layers[treatedLayer].isBaseLayer) {
                var overlayJson = json.layers[treatedLayer];
                var otype = overlayJson.otype.toUpperCase();
                if (otype == 'LAYER') {
                    var overlay = this.getLayerByJson(overlayJson, json.cid);
                    if (overlay) {
                        layers.push(overlay);
                        json.layers.splice(treatedLayer, 1);
                    }
                }
            } else {
                treatedLayer++;
            }
        }


Thanks for your video. I have understand your problem. You mean if you have two base layers, but the second base layer won’t be added into the layers array, also the none base layers have the same results; that’s true? 
 I suggest that you first check that whether the result is right. 
 In fact, you could enable the OverlaySwitcher map tool to see that whether we have added these base layers to map. Also I want to say that we only support one base layer at one map. 
  
 Thanks, 
 Khalil

No Khalil my problem is not that, the problem is that the code to handle the overlays will have the same behavior. And is with the overlays that turns into a problem. 
 imagine: 
 jsonlayers: 
     Overlay1 
     Overlay2 
     Overlay3 
 i=0 
 length=3 
 layers 
  
 add the overlay1 to layers, than splice. 
  
 jsonlayers: 
     Overlay2 
     Overlay3 
 i=1 
 length=2 
 layers 
     Overlay1 
  
 add onther overlay, in this case since i==1 it will add overlay3 
  
 jsonlayers: 
     Overlay2 
 i=2 
 length=1 
 layers 
     Overlay1 
     Overlay3 
  
 and that it… my overlays are messed :( 'cause the overlay2 will be added on top of overlay3 
  
 see now? 


Rui, 
  
 Ok, I have got your idea. We will fix it in the next release Web Edition.  
 Thanks for your suggestion. Sorry for the inconvenience caused to you. 
  
 Thanks, 
 Khalil

Hello Kalil.


i've noticed that you guys corrected part of the problem.


In attachment you can compare my code and yours. Fill free to use it. :)



javascriptFiles.zip (1.75 KB)

Hi, Rui 
  
 Thanks for your response and attached code for this problem. 
  
 We will consider to use it. 
  
 Thanks, 
  
 Khalil