ThinkGeo.com    |     Documentation    |     Premium Support

Issues With Adding layers

We are creating a map that requires a lot of layers, there is nothing we can do but have all these layers available to the user.

To solve this we contacted a member at thinkgeo to help us with an issue of hiding layers on map load. This function works but when you try to add some of the layers back in , we get some of this map not being uploaded again. I know we have been warned from using so many layers but we cant take any out.





Any Help would be much appreciated.



I have attached a picture to highlight the problem. 

Here is the code in our java script to get the is visible and invisible layers to work


OnMapCreated = function (map) {
      for (var i = 0; i < map.layers.length; i++) {
          var layer = map.layers;

          if (layer && layer.initVisibility == false) {
              layer.events.register(“visibilitychanged”, layer, function (layer) {
                  Map1.ajaxCallAction(’@(ViewContext.RouteData.Values[“Controller”].ToString())’, ‘ChangeOverlayVisibility’, { id: layer.object.id, visibility: layer.object.visibility }, function () { });
              })
              }
          }
  }


And here is our server side code

[MapActionFilter]
        public void ChangeOverlayVisibility(Map map, GeoCollection<object> args)
        {
            LayerOverlay overlay = map.CustomOverlays[args[0].ToString()] as LayerOverlay;
            if (overlay != null)
            {
                bool visible = bool.Parse(args[1].ToString());
                overlay.IsVisible = visible;
            }
        }





1 Like

Hi Gordon,



Looks like your attachment is missing, would you please attach it again?

I have some insights based on your description: I think you need to call the layer.redraw method in the ajax callback explicitly. The similar codes works fine in my end, please have a check:




function addLayers() {
            var map = Map1.getOpenLayersMap();
            for (var i = 0; i < map.layers.length; i++) {
                var layer = map.layers<i>;
                if (layer.id.indexOf(“lo”) >= 0) {
                     layer.setVisibility(!layer.getVisibility());
                }
           }
  }
 
   OnMapCreated = function (map) {
           for (var i = 0; i < map.layers.length; i++) {
                var layer = map.layers<i>;
                if (layer && layer.initVisibility == false) {
                     layer.events.register(“visibilitychanged”, layer, function (layer) {
                         Map1.ajaxCallAction(’@(ViewContext.RouteData.Values[“Controller”].ToString())’‘ChangeOverlayVisibility’, { id: layer.object.id, visibility: layer.object.visibility }, 
                        function () {
                            Map1.redrawLayer(layer.object.id)
                        });
                })
                }
            }
}

Hope it helps.

Thanks,

Troy




1 Like

I have Attached the image to the original question. And the Code above didnt work

Hi Gordon,



From the screenshot, looks like you mean some tiles are empty after you checked the layer visibility option in layerSwitchTool. Do you mean that? Have you try to zoomIn/out to see if those tiles show? I think it would be better if you can take a video and then send it to us to see the issue? There is a cool tool for that: techsmith.com/jing.html



We have tried a few layers but not too much, those layers visibility switch well. Now, I am guessing if this is related with too many layers adding into the map and result to a performance issue? Could you narrow down the issue by comment out the layers one by one to see if just some of the layers have the problem ?



If you still can’t figure out the issue, I think you may contact my colleague again with the whole code and data if possible, so that we can have a further review on it.



Hope it helps.

Thanks,

Troy


The only problem is that we need to have all the layers there. We can limit a few of them by adding them to other layers of the same type, but we still need all of this information. 



And with the Video i have created one but i cant add in the attachment, it says that this file type is not accepted.I noticed that the javascript wasnt firing when the overlay switcher was clicked on that may be our problem. but shouldnt the overlay switcher handle these cases?

Hi Gordon,



Yes, we understand all the layers can’t be missing. I just want to narrow down this issue in case this is related with some of the layers. So, would you please have a try by commenting the layers one by one? 

We tested to add 10 layeroverlays marked as invisible and 10 marked as visible. The test still works fine. Please try the attached sample. I think the first thing is we can recreate this issue and once we recreate it in our end, I think that would be fast for us to figure it out.



As for the video, our forum doesn’t support .swf file type and you can upload it in screencast.com/ and share the source url with us.

Thanks,

Troy

DisplayASimpleMap.7z (1.27 MB)

Here is the Link troy 
 screencast.com/t/coyENDtkMfjd

Hi Gordon, 
  
 Sorry for the delay. 
 We looked into it and concluded that it seems to be a rendering bug with Chrome 36.0.1985.143, which is resolved in 37.0.2062.102 according to our testing. So I think the best thing worth to try is to update your Chrome and then have an another try. Since chrome updates happen automatically on most system, everyone using chrome should eventually get the new version to make them using the latest version. 
  
 If upgrade the chrome still not fix this issue, we will take a fresh look at it then. 
 Thanks, 
 Troy