ThinkGeo.com    |     Documentation    |     Premium Support

WMS bounding box problem

Hi,


I have a peculiar problem with some WMS services using the daily build - the same code sends a different request to the wms server when comparing the release and daily builds of thinkgeo - in the daily build the BBOX parameters have been switched around (X and Y muddled up) compared to the actual map area in view


 


Below are the 2 strings that are sent to the wms server - only difference is replacing the MapSuiteCore.dll




 


Daily DLL


==========


map.tgsnopec.com/ArcGIS/services/27th_Licence_Round_Position/MapServer/WMSServer?REQUEST=GetMap&WIDTH=656&HEIGHT=534&LAYERS=0&FORMAT=image/png&TRANSPARENT=TRUE&BBOX=6215798.45708755,-49098.702847145,6891223.92808164,780637.456276681&CRS=EPSG:4326&VERSION=1.1.1&STYLES=&EXCEPTIONS=application/vnd.ogc.se_xml&srs=EPSG:23031

 



Release DLL

============

map.tgsnopec.com/ArcGIS/services/27th_Licence_Round_Position/MapServer/WMSServer?REQUEST=GetMap&BBOX=-49098.702847145,6215798.45708755,780637.456276681,6891223.92808164&WIDTH=656&HEIGHT=534&LAYERS=0&FORMAT=image/png&TRANSPARENT=TRUE&CRS=EPSG:4326&VERSION=1.1.1&STYLES=&EXCEPTIONS=application/vnd.ogc.se_xml&srs=EPSG:23031

 

 


the code to add the wms layer is:


 


Dim myLayer1 As New WMSRasterLayerTGS(New Uri(wmsUrl))



myLayer1.Proxy = System.Net.WebProxy.GetDefaultProxy()

myLayer1.ActiveLayerNames.Add(layer)

myLayer1.Name = caption

myLayer1.TimeoutInSecond = 30

myLayer1.UpperThreshold = Double.MaxValue

myLayer1.LowerThreshold = 0

myLayer1.KeyColors.Add(GeoColor.StandardColors.White)

myLayer1.IsTransparent = True

myLayer1.Exceptions = "application/vnd.ogc.se_xml"



myLayer1.Parameters.Add("format", "image/png")

myLayer1.Parameters.Add("srs", utmzone)

myLayer1.Parameters.Add("version", "1.1.1")



Dim opacity As Double = 255

Double.TryParse(menuWMSOpacity.Text, opacity)

If opacity < 0 Then opacity = 0

If opacity < 255 Then

opacity = opacity * 255 / 100

End If

If opacity > 255 Then opacity = 255

myLayer1.Transparency = opacity



myLayer1.Open()



Dim sOverlay As New CustomShapeLayerOverlay

sOverlay.Name = caption

sOverlay.Layers.Add(myLayer1.Name, myLayer1)



Map1.Overlays.Add(caption, sOverlay)


 


Any ideas? 


 


Thanks,


 


Jeremy



May I ask what version of the Daily Builds you are using? I assume you are using the 5.5.0.91 for the Release Build?

Sorry should have said that… 
  
 Release version 5.5.0.91   works OK 
 Daily Build 5.5.157.0   BBOX incorrect 
 version 5.0.81.0   works OK

Hi Jeremy,


I was able to recreate this issue however I cannot explain this difference. For now I would recommend sticking with the Production Build if you are using WMS Layers. I will report this to the development team and report back if I have any new information.



Hello Jeremy, 
  
 Seems that your WMS service follows the WMS1.3 schema, which  is different from the WMS1.1.0 schema, especially for BBox parameter, you can check it at opengeospatial.org/standards/wms , but in previous versions, we deal with all WMS following the 1.1.1 schema, that’s why gives a value which is very different from now. 
  
 Now we did some enhancements days before to support WMS1.3. Please get the latest version and have another try. 
  
 Regards, 
  
 Gary

Hi Gary/Ryan,



Yes I am aware of the differences between 1.1 and 1.3 WMS servers -  however the fact remains that the X/Y coordinates have been incorrectly  reversed in the thinkgeo request.



to quote from the 1.3 WMS spec pdf:






WMS service metadata shall declare one or more bounding boxes (as defined in 6.7.4) for each Layer.

A Bounding Box metadata element may either be stated explicitly or may be inherited from a parent Layer. In XML,

the <boundingbox> metadata element includes the following attributes:

⎯ CRS indicates the Layer CRS that applies to this bounding box.

⎯ minx, miny, maxx, maxy indicate the limits of the bounding box using the axis units and order of the

specified CRS.</boundingbox>




 


and from the 1.1 WMS spec:


 




The Bounding Box (BBOX) is a set of four comma-separated decimal, scientific notation,

or integer values (if integers are provided where floating point is needed, the decimal

point is assumed at the end of the number). These values specify the minimum X,

minimum Y, maximum X, and maximum Y ranges, in that order, expressed in units of

the SRS of the request, such that a rectangular area is defined in those units.




 


As you can see, there should be no change in the ordering of the bounding box coordinates - they should be ordered "minX, minY, maxX, maxY" - in the recent thinkgeo codebase they are ordered "minY, minX, maxY, maxX".


Regards,


Jeremy



Jeremy,


The reason why the query string was wrong is that your wsm server version is 1.3.0 and you change it to 1.1.1 in the code, it's a bug so we have changed 

it to follow the parameters if the user provides them, please get the 6.0.11.0 or 6.0.0.11 and have a try.


By the way, there are actually some differences between 1.3.0 and 1.1.1 about the BBox sequence. You can get the infomations from the following websites


mapserver.org/ogc/wms_server...-0-support  (at page WMS 1.3.0 Support)

dev.openlayers.org/releases/...s-v13.html  (this one also shows the difference)


And you can try the two Urls , they can get the same picture from the server, you can see the only diffences are the version and the BBOX sequence.


map.tgsnopec.com/ArcGIS/serv...HEIGHT=256

map.tgsnopec.com/ArcGIS/serv...HEIGHT=256


Also you can visit the other wms servers which support 1.3.0 with the new format of BBOX.


Regarding the wms 1.3.0 document, we are confused that because we made our wms support 1.3.0 by the documents from OGC days before, and now it seems that

it's different. We has submitted it to our internal issue system and will do some enhancements here soon.


Thanks,


Johnny.



Hi Guys,


I started a similar thread here. I should have searched the forum more thoroughly before I started the thread. I am finding the same as Jeremy regarding the specification for bounding box in WMS 1.1 and 1.3. There is no difference between the two in the official document. I have only done testing on a 1.3 WMS server. I have now tested with production build 6.0.0.15 and am still having the problem. I attached a sample project in my original post that clearly illustrates the problem.


Thanks very much for any additional help.


Steve


 



Hello again,


After taking another look at the WMS 1.3 specification, and also the links provided by Johnny I think I can begin to see the real problem. The bounding box X and Y should be reversed for EPSG between 4000 and 5000. That is why, when I request an image with the Crs of the WMSRasterLayer set to "EPSG:4326", everything works fine. But the X and Y should NOT be reversed when the Crs is set to "EPSG:26915", yet the ThinkGeo request for bounding box still reverses X and Y in this case. 


To complicate things further, if you use "CRS:84", "CRS:83", or "CRS:27" the X and Y axis is not reversed. The WMS 1.3 specification is adding needless complications.


Hope that helps clarify the issue.


Steve



Hi everyone,


We did a research and found that there are some problems in the axis order, we wiil work on this and fix it as soon as possible.


Thanks,


Johnny



Hi Steven, 
  
 Just let you know we are still working on it. Sorry for the Inconvinience. 
  
 Thanks, 
 Johnny 
  


Steven,


As there is not official documents show what exactly the X/Y's order of one projection is, we decided to follow the MapServer and Openlayers: Invert the X/Y's order which code is between 4000 and 5000, also we added an API "AxisOrder" to let users choose to invert or not, e.g. if you set wmsLayer.AxisOrder= AxisOrder.Inverted, it will ignore the wms version and projection code to invert the X/Y's order. Please get 6.0.25.0 or 6.0.0.25 and have try.


Best regards,


Johnny 



Johnny, 
  
 My WMS layer v1.3 is displaying fine now without my workaround.  
  
 Thanks! 
  
 Steve

Hello Steven, 
  
 I’m glad it’s working now, just let us know your problems. 
  
 Regards, 
  
 Gary