ThinkGeo.com    |     Documentation    |     Premium Support

Problem with WMSOverlay

Hello,


I am still evaluating your software.


I am trying to add WMSOverlays.  I can add a WMSOverlay from a local Geoserver that I am running but when I attempt to connect to a NASA wms page, the site crashes.  I can open the NASA wms link fine in uDig (desktop Viewer)


Here is my code for both the Geoserver WMSOverlay and my attempt at a NASA WMSOverlay 





Map1.MapUnit = GeographyUnit.DecimalDegree; 

//NASA Blue Marble 

WMS WmsOverlay wmsBlueMarble = new WmsOverlay("BMNG", new Uri("wms.jpl.nasa.gov/wms.cgi")); 

wmsBlueMarble.Name = "BMNG"; 

wmsBlueMarble.Parameters.Add("LAYERS", "BMNG"); 

Map1.Overlays.Add("BMNG", wmsBlueMarble); 



// coming from local GeoServer WmsOverlay 

wmsOverlay = new WmsOverlay("WMSOverlay", 

new Uri("ztserver:8080/geoserver/wms")); 

wmsOverlay.Name = "Use Wms Service"; 

wmsOverlay.Parameters.Add("LAYERS", "tgr06037cty00"); 

Map1.Overlays.Add("WMSOverlay", wmsOverlay);


 Thanks, Leon



 


Leon,
The NASA wms server doesn’t support JPEG image format, but in SilverlightEdition, it uses Jpeg as the default image format. That’s one of the reasons. The error also is caused by missing Styles parameter in your setting. Please use the code below to have a try. It works fine on my machine.
            WmsOverlay wmsBlueMarble = new WmsOverlay("BMNG", new Uri("wms.jpl.nasa.gov/wms.cgi"));
            wmsBlueMarble.Name = "BMNG";
            wmsBlueMarble.Parameters.Add("LAYERS", "BMNG");
            wmsBlueMarble.Parameters.Add("STYLES", "");
            wmsBlueMarble.Parameters["FORMAT"] = "image/png";
            Map1.Overlays.Add(wmsBlueMarble);
 
            Map1.CurrentExtent = new RectangleShape(-125, 72, 50, -46);
 
Note: It seems that the NASA wms server is very slow, so some exceptions will be thrown if you drag the map while it’s still in loading images.
Thanks,
Johnny

Hi,


I'm also still evaluating this software and tried to use nasa wms, but Johnny's code doesn't work on WPF Desktop edition. The map didn't show anything.


Here is the code (the sam with Johnny's).


 


            WmsOverlay wmsBlueMarble = new WmsOverlay(new Uri("wms.jpl.nasa.gov/wms.cgi"));

            wmsBlueMarble.Parameters.Add("layers", "BMNG");

            wmsBlueMarble.Parameters.Add("format", "image/png");

            wmsBlueMarble.Parameters.Add("styles", "");

            Map1.Overlays.Add(wmsBlueMarble);

            Map1.Refresh();


Regards,


Yuliam


 


 



Hi Yuliam, 
  
 It seems that there is something wrong with NASA WMS server these days, it can get can the capability but unable to return the image. We tried several different explorers, but all failed. 
  
 Thanks, 
 Johnny 


Thanks Jon for your reply. 



It seems that nasa wms uri is not provided any more based on this source 



onearth.jpl.nasa.gov/ 



"This server no longer provides full WMS services for any of the datasets. Furthermore, the MODIS daily mosaics are no longer being updated. The tiled WMS access, described in the Tiled WMS and Google Earth KML support will stay operational. This includes access to the archived of MODIS daily mosaics, which were built from 2006 to the end of 2010." 



So I have to setup nasa wms server on my local machine by following this step. 



forum.worldwindcentral.com/showthread.php?t=24183. 



And it works :)


BUT, it worked only in WebEdition :(


I tried in WpfDesktopEdition, it didn't work.


Here is my code in WebEdition


 WmsOverlay wmsBlueMarble = new WmsOverlay("global_mosaica", new Uri("localhost:8080/wms?"));

 wmsBlueMarble.Parameters.Add("request", "GetMap");

 wmsBlueMarble.Parameters.Add("layers", "esat");

 wmsBlueMarble.Parameters.Add("srs", "EPSG:4326");

 wmsBlueMarble.Parameters.Add("format", "image/png");

 Map1.CustomOverlays.Add(wmsBlueMarble);


And here is my code in WpfDesktopEdition


 WmsOverlay wmsBlueMarble = new WmsOverlay(new Uri("localhost:8080/wms?"));

 wmsBlueMarble.Parameters.Add("request", "GetMap");

 wmsBlueMarble.Parameters.Add("layers", "esat");

 wmsBlueMarble.Parameters.Add("srs", "EPSG:4326");

 wmsBlueMarble.Parameters.Add("format", "image/png");

 Map1.Overlays.Add(wmsBlueMarble);

 


 


What's wrong with WpfDesktopEdition?


Is both edition not replaceable?


 


Regards,


Yuliam



 


Hi, Yuliam
Thanks for your post and the information you provided. It’s a great help for us to quickly find where your problem probably lies.
In fact, there are some differences between WmsOverlay in WebEdition and in WpfDesktopEdition. After applying your code sample to my test project, the result turned out to be exactly what you said, WmsOverlay in WebEdition worked, the other one didn’t. So I looked into the request parameter for both of them and found that there was a parameter named “STYLES” in WmsOverlay of WebEdition missing in the WmsOverlay of WpfDesktopEdition. So I added the STYLES parameter to the Parameters collection of WmsOverlay, and it worked, as far as on my WmsServer.
So, you can have a try to add STYLES parameter, and if your problem cannot be resolved in this way, could you please provide your WMS Service address, so that I can get detailed information to help you out?
Any further questions please let me know.
Thank you very much.
James

Hi James, 
  
 Thanks for the quick response. 
  
 I just realized that actually in the wms server log file there was an error "SEVERE: Required parameter is missing: STYLES" when using WpfDesktopEdition. I tried to add "STYLES" parameter with any string, and it worked like what you said. 
  
 But what should be filled into "STYLES" parameter, or where should this "STYLES" refer to? 
  
 Thank you, 
 Yuliam

Yuliam, 
  
 You can get "STYLES" parameter from server capabilities xml, MapSuite provides API for GetServerCapabilitiesXml, the WMS specification specify that capabilities must contains "STYLES" information. 
  
 Thanks, 
 James

Hi James, 



I had displayed nasa map using my local nasa wms (blue marble). The issue is when the map is zooming or panning, it will request the tile cache to the nasa wms server based on current extent 

and UI becomes unresponsive (freeze) until the map gets the response from the nasa wms and ready to re-render the map. 



I believe this is not caused by connection problem since the application and the nasa wms server are both placed in my local machine. 



Is there a way to make the request in background thread for WmsOverlay? 



This issue doesn't happen for WorldMapKitWmsWpfOverlay and GoogleMapsOverlay, the UI is responsive when the map hasn't receive the response from the server (think geo server / google server). 



Regards, 

Yuliam



 


Hi, Yuliam
Sorry for the delayed response. I’m not quite sure about why you have such a problem, since the WorldMapKitWmsWpfOverlay and the WmsOverlay is quite the same, in the way they request Tiles and render Tiles, that is, render the Tiles one by one. We do not have additional threads opened in both of them. However, if you would like to start an additional thread to handle the request and response, you can try to override the Draw and DrawCore method.
BTW, I don’t see any UI control frozen while requesting Tiles in the HowDoI sample, UseWMSOverlay, could you please send us your code sample that can recreate this problem?
Any further questions please let me know.
Thanks.
James

Hi James, 
  
 Have you tried adding another control in the same page for example a button, and then you pan or zoom quickly to another location in the map world? 
  
 It will cause the UI frozen. 
  
 Here is the example. 
  
 ]
<Page x:Class=“MapSuiteClient.Page1”
      xmlns=“schemas.microsoft.com/winfx/2006/xaml/presentation
      xmlns:x=“schemas.microsoft.com/winfx/2006/xaml
      xmlns:mc=“schemas.openxmlformats.org/markup-compatibility/2006” 
      xmlns:d=“schemas.microsoft.com/expression/blend/2008” 
      mc:Ignorable=“d” 
      d:DesignHeight=“300” d:DesignWidth=“300”
      Title=“Page1” 
      xmlns:my=“clr-namespace:ThinkGeo.MapSuite.WpfDesktopEdition;assembly=WpfDesktopEdition”>
    <Grid>
        <my:WpfMap Name=“Map1” Loaded=“Map1_Loaded” />
        <Button Height=“20” VerticalAlignment=“Top” Content=“Button”/>
    </Grid>
</Page>
 
 
  
 using System;
using System.Windows.Controls;
using ThinkGeo.MapSuite.WpfDesktopEdition;

namespace MapSuiteClient
{
    /// <summary>
    /// Interaction logic for Page1.xaml
    /// </summary>
    public partial class Page1 : Page
    {
        public Page1()
        {
            InitializeComponent();
        }

        private void Map1_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            WmsOverlay wmsBlueMarble = new WmsOverlay(new Uri(“localhost:8765/wms?”));
            wmsBlueMarble.Parameters.Add(“request”, “GetMap”);
            wmsBlueMarble.Parameters.Add(“layers”, “bmng200412”);
            wmsBlueMarble.Parameters.Add(“srs”, “EPSG:4326”);
            wmsBlueMarble.Parameters.Add(“format”, “image/png”);
            wmsBlueMarble.Parameters.Add(“STYLES”, “default”);
            Map1.Overlays.Add(wmsBlueMarble);
        }
    }
}
 
 
  
 Using that sample code. 
  
 When I pan or zoom to another world location frequently and quickly, it will cause the button can’t be pressed. 
  
 Regards, 
 Yuliam

Hi Yuliam,


When I try to recreate your problem by applying your sample into the test application, after a frenzied panning and zooming, the button doesn’t seem to get frozen. As far as I can see, the only difference between our applications is that we’re connecting to different WMS Servers, and here I post my test application, you can see if it works at your side, if the problem is still there, could you please try to update your assembly to the latest daily build version and try again?
Let me know when you get the result please.
Thanks.
James

MapSuiteClient.zip (9.34 KB)