ThinkGeo.com    |     Documentation    |     Premium Support

Wms client exception

Hi.


 I have a problem show tiled wms map on winforms edition.


 We are using OpenStreetMap map data rendered by mapnik from postgres and the tiles provided by TileCache.


I attached the wms GetCapabilities data, and bellow shown the sample code what i use.



m_map.MapUnit = GeographyUnit.DecimalDegree;

Uri serverUri = new Uri(".../tilecache.py?");
TiledWmsLayer wmsLayer = new TiledWmsLayer(serverUri);

wmsLayer.Open();

wmsLayer.ActiveLayerNames.Add(wmsLayer.GetServerLayerNames().First());
wmsLayer.Crs = wmsLayer.GetServerCrss().First();
wmsLayer.OutputFormat = wmsLayer.GetServerOutputFormats().First();
wmsLayer.Exceptions = wmsLayer.GetServerExceptionFormats().First();

LayerOverlay overlay = new LayerOverlay();
overlay.Layers.Add(wmsLayer);

m_map.Overlays.Add(overlay);

wmsLayer.Close();

m_map.Refresh(overlay);

 


After i start the application a blank page shows and the following text on it: WMS client exception, see client trace.


 


Janos Panczel



wms.txt (1.9 KB)

Janos,


Thanks for your post and questions, and welcome you to ThinkGeo Desktop Discussion forum.
 
The URL you provided is not valid one, the following statement will throw an exception, and can you make sure about it?


Uri serverUri = new Uri(".../tilecache.py?");

 
Just make sure you are using the Desktop Edition, if so, I think we have provided the OpenStreetMapOverlay for easy to use. See following code sample on this.
code.thinkgeo.com/projects/show/156
 
Any more questions please let me know.
 
Thanks.
 
Yale

Greetings.


 


Thank you for your response. I will try the OpenStreetMapOverlay.


Our WMS server uses OSM map data at the moment, but this could/shoud change, so it is important for us to use a WMS overlay, not an OpenStreetMap overlay.


 


The server address is not valid, because for security reason i dont have permisson to give it on public channels. But i can send you in private if you give me a contact.


 


János



Janos, 
  
 Please let us know your result for trying OpenStreetMapOverlay, and if you want to provide the really server address, you can send email to support@thinkgeo.com and let him forward to Yale and James. We will test it and find the problem. 
  
 Thanks 
 James

Janos,


I got the really url from ThinkGeo support, I compare our HowDoI sample "LoadAWmsImage" and I did some test and got following results:


run this method to test, wmsLayer.GetRequestUrl(winformsMap1.CurrentExtent, winformsMap1.Width, winformsMap1.Height)


HowDoI sample:


wmssamples.thinkgeo.com/WmsServer.aspx?REQUEST=GetMap&BBOX=-143.428125,-76.3125,116.728125,109.3125&WIDTH=740&HEIGHT=528&LAYERS=Countries02,USStates,USMajorCities&FORMAT=IMAGE/PNG&SRS=EPSG:4326&VERSION=1.1.1&STYLES=&MAPUNIT=DecimalDegree&CLIENTMODE=TiledWmsRasterSource&ClientId=

and show a image like



 


Your code:


...? REQUEST=GetMap&BBOX=55.6875,-801.45,1096.3125,-58.95&WIDTH=740&HEIGHT=528&LAYERS=osm&FORMAT=IMAGE/PNG&SRS=EPSG:900913&VERSION=1.1.1&STYLES=&MAPUNIT=DecimalDegree&CLIENTMODE=TiledWmsRasterSource&ClientId=

and show a html like



So I think probably your url is not a standard wms server, I will keep testing another case and let you know the result.


Thanks


James



James,


we found the problem that caused the bad response of request. The OnlineResource link was wrong due to a ModPython bug. We found a workaround by adding a '/' right before the '?' sign as you can see: 'OurServerUrl:Port/tilecache2/tilecache.py/?'. Without it, the tilecache2/tilecache part was cut.


Our WMS server runs on py and cgi too, so actually, you can use both of them if it helps (we only use the python one and are planning to eliminate the cgi):



        
  • 'OurServerUrl:Port/tilecache2/tilecache.py/?'

  •     
  • 'OurServerUrl:Port/tilecache/tilecache.cgi?' (no '/' before '?')


We found that there is a function called GetRequestUrl in TiledWmsLayer class. Using this function parameterized with the bounds of the whole world (in EPSG:900913 spherical mercator projection) the return value was a valid url that resulted in the image of the whole world if we typed it into a browser. (The bbox was -20037508.34,-20037508.34,20037508.34,20037508.34 in minx, miny, maxx, maxy order.) The whole request:


OurServerUrl:PORT/tilecache2/tilecache.py/?REQUEST=GetMap&BBOX=-20037508.34,-20037508.34,20037508.34,20037508.34&WIDTH=256&HEIGHT=256&LAYERS=osm&FORMAT=IMAGE/PNG&SRS=EPSG:900913&VERSION=1.1.1&STYLES=&MAPUNIT=DecimalDegree&CLIENTMODE=TiledWmsRasterSource


This way we could ensure that the server responds correctly. Unfortunately the main problem still stand: the map didn't show. The WinformsMap rendered a map filled with images stating 'WMS Client Exception'  and 'See Client Trace'. However we could not find the Client Trace. Could you please tell me where can I find this?


I also tried setting TiledWmsLayer.DrawingExceptionMode to DrawingExceptionMode.ThrowException thinking that it would throw an exception rather rendering it on the map, but it did not change anything.


We suspect that our server does not like the request of the WinformsMap in the means of bounding boxes. E.g. your bbox parameters '55.6875,-801.45,1096.3125,-58.95' results in


An error occurred: can't find resolution index for 4.064941. Available resolutions are: 

[156543.03390000001, 78271.516950000005, 39135.758475000002, 19567.879237500001, 9783.9396187500006, 4891.9698093750003, 2445.9849046875001, 1222.9924523437501, 611.49622617187504, 305.74811308593752, 152.87405654296876, 76.43702827148438, 38.21851413574219, 19.109257067871095, 9.5546285339355475, 4.7773142669677737, 2.3886571334838869, 1.1943285667419434, 0.59716428337097172, 0.29858214168548586]'


This is tipically the sign of a bad bounding box. I would notice that our server is just capable of returning 256*256px images.


Finally, we are not experienced what bbox values are valid but we noticed that bbox -20037508.34,0,20037508.34,20037508.34 is not good for our WMS server (reply:  An error occurred: Current y value 0.000000 is too far from tile corner y 20037508.338400), but 0,0,20037508.34,20037508.34 is.


Thanks


János



Janos, 
  
 Thanks for your more information that help me to find way to solve your problem. 
  
 After I did more test, I found that your wms server supports very large bounding box and the map size must related with bbox, the width/height ratio must the same as bbox’s width and height, so you can do the following thing you can display map without problem, the make it easy I just resize winformaMap to let Width and Height the same to 740, and then add following code: 
             winformsMap1.ZoomLevelSnapping = ZoomLevelSnappingMode.None; 
             winformsMap1.CurrentExtent = new RectangleShape(-20037508.34, 20037508.34, 20037508.34, -20037508.34); 
  
 The url will be  
 OurServerUrl:PORT/tilecache2/tilecache.py/?REQUEST=GetMap&BBOX=-20037508.34,-20037508.34,20037508.34,20037508.34&WIDTH=740&HEIGHT=740&LAYERS=osm&FORMAT=IMAGE/PNG&SRS=EPSG:900913&VERSION=1.1.1&STYLES=&MAPUNIT=DecimalDegree&CLIENTMODE=TiledWmsRasterSource&ClientId= 
  
 Please let me know if you still has problem. 
 Thanks 
 James

János 
  
   I wanted to add something to this…  I think I know the real issue here.  The TiledWmsLayer was designed for our Tiled WMS Server and not any other third part server.  Tiling in WMS Servers is not a standard thing yet and there are a few competing draft standards out there.  We designed our layer to fit with the tile seizes in our Tiled WMS Server and did not follow the competing drafts as none of them are were solid.  From the error message your WMS server is generating it seems like it is one of the other standards and it expects that we query the images only at certain scales that is serves.  We need to find out which tiling strategy your server is using.  Once we know that we can create a new Layer that is designed around that servers tiling scheme.  There are a few draft standards and we need to find out which one it is.  Can you send us the xml from the GetCapabilities request? 
  
 David