ThinkGeo.com    |     Documentation    |     Premium Support

How can I customize to LayerSwitcher and your skin control?

 I dislike LayerSwitcher skin. I want to customize it but I don't know how to customize it.


If I customize it I don't know how to switch layer between visible and invisible.


I need guide or sample code.


 


and I need to change your skin (zoom pan overview) . How do I?


 


regards


sumeth



Hello sumeth, 



Thanks for your post, we have overlay switcher instead of layer switcher because overlay is the smallest unit of imaging while layer is not. In another world, an overlay is an image passing to Client from Server, so on client side you can easily show/hide an overlay. Layer is a Server side concept, it’s more related with data and one or more layer will be drawn on one overlay, that is to say if you want to hide a layer, you need to redraw the overlay containing that very layer on server side and pass it back to client. That’s why we don’t have the LayerSwitcher.  



If you mean you want to customize the OverlaySwitcher, here are two important JavaScript functions provided by OpenLayers. 



One is Map.setBaseLayer(layer) which is to switch between base overlays; you can find the reference at: 

dev.openlayers.org/releases/OpenLay...tBaseLayer

While another one is Layer.display(isVisible) which is to set a dynamic overlay’s visibility; you can find the reference at: 

dev.openlayers.org/releases/OpenLay...er.display

The attached file is a sample for you to implement the OverlaySwitcher, please feel free to change it. 



Or if you only think the OverlaySwitcher's skin is acceptable, and only want to change some position, here is the code how to do that: 


        function OnMapCreated(map) {
            var overlaySwitcher = map.getControlsByClass("OpenLayers.Control.LayerSwitcher")[0];
           
            // Set the position of OverlaySwitcher
            overlaySwitcher.div.style.position = "fixed";
            overlaySwitcher.div.style.right = "200px";
            overlaySwitcher.div.style.top = "200px";
            overlaySwitcher.layersDiv.style.paddingRight = "0px";
            
            // Set the forground color for base layer
            overlaySwitcher.baseLbl.style.color = "red";
            overlaySwitcher.baseLbl.style.fontWeight = "bolder";
            overlaySwitcher.baseLayersDiv.style.color = "blue";
 
            // Set the forground color for none base layers
            overlaySwitcher.dataLbl.style.color = "yellow";
            overlaySwitcher.dataLbl.style.fontWeight = "bold";
            overlaySwitcher.dataLayersDiv.style.color = "black";
        }
 



And for the second question, you can see the attached file for details. 



Please feel free to let us know if you meet any questions. 



Regards, 



Gary



CustomizeOverlaySwitcher.zip (3.07 KB)
ChangeTheStyleOfPanZoomBar.txt (3.58 KB)

 I downloaded the files in CustomizeOverlaySwitcher.zip but can't make it works, could you please post a sample working project for this ?


Thank you very much.



Hello Gautier, 
  
 I just change code base on HowDoISamples, so please replace the CustomizeOverlaySwitcher into HowDoISamples. 
  
 Please let us know if you still can’t run this. 
  
 Regards, 
  
 Gary

Hi gary, 
  
 I test code today. It have problem when I pan map. 
 I uncheck layer for hide.then I pan map,layer hided is show 
  
 watch this video : mediafire.com/?d4zalw3gype7b48

Sorry but I didn’t understand the HowDoISamples message ? 
  
 Thank you.

Hello sumeth, 
  
 Thanks for your video, this problem looks weird, could you please provide your sample? How did you hide the layer? 
  
 Thanks for the help. 
  
 Regards, 
  
 Gary

Hello sumeth,  
  
 Thanks for your video, this problem looks weird, could you please provide your sample? How did you hide the layer?  
  
 Thanks for the help.  
  
 Regards,  
  
 Gary

 Hello Gautier,


 
When you install our product, there is a HowDoISamples in the same folder where you install.
 
You can get the installer from gis.thinkgeo.com/Products/MapSuiteF...ault.aspx.
 
Any more questions please feel free to let us know.
 
Regards,
 
Cary

I copy your code to HowDoISample. 

Then, I run your code. 

Next, I uncheck Layers for hide. 

Next, I pan map. (Layers hide is show now)  

Next, I check Layers for Show again. (It has not happen.Because Layers is show now) 

Next, I uncheck again. (Layers is hide) 



summary : When I pan the map with  visible Layers ,that make Layers  is invisible.



Sorry to be so novice but I can't make it work, I join a screenshot of what I have so tell me please precisely what to do to make it work.


Thank you.


 


 



Hello Gautier, 
  
 In the Samples folder, there are CSharp VS2010 Winforms.sln and VB VS2010 Winforms.sln, please choose one language then use Visio Studio to open it, then you will find UseGoogleYahooWms in the Overlays folder, replace it with the sample code you download, run the sample, you can see the effect. 
  
 Please feel free to let us know if you still can’t let it work. 
  
 Regards, 
  
 Gary

Gary, 
 Do you have result same me?

Hello sumeth, 
  
 Yes I can see your action by your video, thanks for that. 
  
 But it’s not the same as the sample I provide, so you should did some changes, can you provide that codes? 
  
 If I can recreate the problem very easily, the problem will be resolve very fast. 
  
 Thanks for your help. 
  
 Regards, 
  
 Gary

Sorry Gary, I forget I change WorldLayer to Overlay. 
  
 Line 37 - 40: 
                LayerOverlay worldOverlay = new LayerOverlay("WorldOverlay", false, TileType.MultipleTile);  << I change this line 
                 worldOverlay.Layers.Add(worldLayer); 
                 worldOverlay.Name = "Layers"; 
                 //worldOverlay.SetBaseEpsgProjection("EPSG:900913");     <<< and comment this 
  
  
 I change 1 line of your code. 
  


Hello sumeth, 
  
 Thanks for your code, I can recreate the problem now, I will post the result here as soon as I resolve this. 
  
 Thanks for your patience. 
  
 Regards, 
  
 Gary

I will be wait for you answer. 
 thanks for your patience too. 
 I think Mapsuite team have support good. 
  
 Best Regards, 
 Sumeth

Hello sumeth, 
  
 This problem is because Openlayer display function did not synchronize the Server code, so the layer still visible in the the server side, when you pan the map, it will refresh the map in the server side, redraw everything. 
  
 To fix this, you need synchronize it manually, like callback, then set Overlay.IsVisible to hidden it. 
  
 Regards, 
  
 Gary

Do you have sample for me? 
  
 User has more requirement  but I  follow test a requirement  alone.  (T_T) 
 No more time for me. 
 help me please. 
  
 thanks.

Hello sumeth, 



We don't have existing sample that fits this requirement, if you need us do work according to some special requirements, you can submit a ticket for this, I believe you have some free ticket from beginning. 



Sorry we don't have enough resource to build every sample for every post. 



Regards, 



Gary