ThinkGeo.com    |     Documentation    |     Premium Support

Multiple WMSOverlays

Hi,


I am attempting to add two WMSOverlays to the map using the following code:




protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.White);
                Map1.CurrentExtent = new RectangleShape(-131.22, 55.05, -54.03, 16.91);
                Map1.MapUnit = GeographyUnit.DecimalDegree;

                WmsOverlay wms = new WmsOverlay("WMS Overlay");
                wms.Parameters.Add("layers", "Countries02");
                wms.Parameters.Add("STYLE", "SIMPLE");
                wms.ServerUris.Add(new Uri("wmssamples.thinkgeo.com/WmsServer.aspx"));
                wms.TileType = TileType.MultipleTile;
                wms.TileHeight = 256;
                wms.TileWidth = 256;

                WmsOverlay wms1 = new WmsOverlay("WMS Overlay1");
                wms1.Parameters.Add("layers", "USStates");
                wms1.Parameters.Add("STYLE", "SIMPLE");
                wms1.ServerUris.Add(new Uri("wmssamples.thinkgeo.com/WmsServer.aspx"));
                wms1.TileType = TileType.MultipleTile;
                wms1.TileHeight = 256;
                wms1.TileWidth = 256;

                Map1.CustomOverlays.Add(wms);
                Map1.CustomOverlays.Add(wms1);
            }
        }
 

Only the 'wms' overlay is displayed on the map. I would expect that the 'wms1' overlay would display on top of the 'wms' overlay.



Hi Steve,



First we should understand what is base overlay and dynamic overlay. We only allow one base overlay display on the map at one time, but we allow multiple overlays which are None-BaseOverlay overlap on the base overlay.



In your code, both WMS overlays are base overlay type so that they don’t show at the same time. You can turn the OverlaySwitcher on to see what’s going on by the following code.Map1.MapTools.OverlaySwitcher.Enabled = true;


If you want to display two WMS overlays at one time, one of them should not be base overlay. Please add the following code which makes your map right.wms1.IsBaseOverlay = false;


Please refer to the following two posts for more information.

gis.thinkgeo.com/Support/Dis....aspx#5749

gis.thinkgeo.com/Support/Dis....aspx#5014



If you have any questions please let me know.



Thanks,

Howard



Howard,  
  
 Does Map Suite support loading WMS Layers from multiple servers?  
 In my experience I am getting the following error when I attempt to to this: 
  
 "Value does not fall within the expected range." 
   
    at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
    at MS.Internal.XcpImports.Collection_AddValue[T](PresentationFrameworkCollection`1 collection, CValue value) 
    at MS.Internal.XcpImports.Collection_AddDependencyObject[T](PresentationFrameworkCollection`1 collection, DependencyObject value) 
    at System.Windows.PresentationFrameworkCollection`1.AddDependencyObject(DependencyObject value) 
    at System.Windows.Controls.UIElementCollection.AddInternal(UIElement value) 
    at System.Windows.PresentationFrameworkCollection`1.Add(T value) 
    at ThinkGeo.MapSuite.SilverlightEdition.WmsOverlay.DrawCore(RectangleShape extent) 
    at ThinkGeo.MapSuite.SilverlightEdition.WmsOverlay.Draw(RectangleShape extent, Boolean useAnimation) 
    at ThinkGeo.MapSuite.SilverlightEdition.Map.ZoomTo(RectangleShape extent, Boolean useAnimation) 
    at ThinkGeo.MapSuite.SilverlightEdition.Map.Refresh() 
    at TheDemoApp.Web2DInterface.controls.main.MapControl.InitMap() 
  
 Additionally the only way to control the requests of tiles from WmsRasterLayer to math tile server (geowebcache for example) is modifying the scales and changing the extent like: 
 Map1.MaxExtent.UpperLeftPoint.X = -2.003750834E7; 
 Map1.MaxExtent.UpperLeftPoint.Y = -2.003750834E7; 
 Map1.MaxExtent.LowerRightPoint.X = 2.003750834E7; 
 Map1.MaxExtent.LowerRightPoint.Y = 2.003750834E7; 
 Is this the best way to do this or iis some better way to accomplish this task, for example extending the WmsOverlay class? 


Hi Steve, 
  
 From your exception, it seems you are using Silverlight Edition; it doesn’t support loading from multiple server by now, but we’ll add this feature in the next version. Could you provide us how to recreate this exception? 
  
 Currently, Only Web Edition supports loading from multi-server. 
  
 I’m not sure why you ask WmsRasterLayer, for it doesn’t support in the latest Silverlight Edition. Technically, scale and max extent is the main point we are using for tile server in web edition. 
  
 I’m a little confused what edition are you really using? Silverlight Edition or Web Edition? Because in the exception is thrown by Silverlight Edition while WmsRasterLayer is in Web Edition. 
   
 Please provide us more information if possible. 
  
 Thanks, 
 Howard