ThinkGeo.com    |     Documentation    |     Premium Support

Need to switch baseOverlay but without the default overlayswitcher

 Hi,


I need to add the possibility to switch base overlay but not with the default overlay switcher then my question is should I the javascript to perform this operation on the client side?


 


thanks a lot.


 


jm


 



 Hello Jean-marie,


 
Thanks for your post but sorry I'm confused what's the meaning of "not with the default overlay switcher"?
 
You don't want to use openlayer overlay switcher or you just don't want to our server side overlay switcher?
 
If it's the second situation, you can directly call openlayer overlay switcher in client side, please check the code below:

 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";
        }

Regards,
 
Gary

Hi Gary, 
  
 Sorry I was typing too fast…!   No my question is how can I control changing base layer but from within my own UI.  I want to switch from google map to wms, to bing,…  But I want the control to be inside my UI.  I have been looking on the documentation and forum but was unsuccessful finding the command to do so.  Pleas let me know what JavaScript API to call and how to parametrize it. 
  
 Thanks. 
 Jm

Hello Jean-marie,


 
Yes, you can control the overlay switcher in client side by openlayer, below is some code you can refer:
Server side:

public ActionResult DisplayASimpleMap()
        {
            Map map = new Map("Map1",
                new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage),
                new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage));
            map.MapUnit = GeographyUnit.DecimalDegree;
            map.CurrentExtent = new RectangleShape(-125, 72, 50, -46);

            ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(Server.MapPath("~/App_Data/cntry02.shp"));
            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
            worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;



            LayerOverlay layerOverlay = new LayerOverlay();
            layerOverlay.IsBaseOverlay = false;
            layerOverlay.Layers.Add(worldLayer);
            WorldMapKitWmsWebOverlay wmsOverlay = new WorldMapKitWmsWebOverlay();

            map.MapBackground = new BackgroundLayer(new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF")));
            map.CustomOverlays.Add(wmsOverlay);
            map.CustomOverlays.Add(layerOverlay);
            return View(map);
        }


Client side:

     (script language="javascript"  type="text/javascript")
         var tgmap;
         var counter = 0;
         function OnMapCreated(map) {
             tgmap = map;
         }

         function mapClick(e) {
             var layers = tgmap.layers;
             if (counter == 0) {
                 tgmap.setBaseLayer(layers[1]);
                 counter = 1;
             }
             else {

                 tgmap.setBaseLayer(layers[0]);
                 counter = 0;
             }
         }

     (/script)

Regards,
 
Gary