ThinkGeo.com    |     Documentation    |     Premium Support

WMS is scaled and shifted or not displayed

Hi,



I have done a short Sub to add a WMS.

When adding the WMS to the map the WMS is shifted (not at correct Location).

Have a look at the Screen shot. WMS should display Germany but it’s scaled and shifted and now part of Switzerland :-(…



This happens when using EPSG 25832. Other EPSG will hide the WMS.

What’s going wrong?



My Code Looks like this:


WinformsMap1.MapUnit = GeographyUnit.Meter
 
loadWMS("<a href=“sg.geodatenzentrum.de/wms_dtk200?" tabindex=“0”>sg.geodatenzentrum.de/wms_dtk200?</a>”, 25832, “DTK200”)
 
Sub loadWMS(url As String, epsg As Integer, layer As String)
        Try
            Dim theUrl As New System.Uri(url)
            Dim wms As New WmsRasterLayer(theUrl)
            wms.Open()
            wms.Transparency = 150
            If epsg > 0 Then
                wms.Crs = “EPSG:” & epsg
            End If
 
            wms.ActiveLayerNames.Add(layer)
 
            Dim wmsOverlay As New LayerOverlay
            wmsOverlay.Name = “WMS”
            wmsOverlay.Layers.Add(wms)
            WinformsMap1.Overlays.Add(wmsOverlay)
        Catch ex As Exception
 
        End Try
    End Sub




Hi Hartwig,



I am sorry it looks you forget upload the screen shot.



I did some modify of your code(it’s a c# version), and as below is my test code and test result.



Please let me know whether it have problem, it looks the wms mainly contains Germany but still have some places in other countries.







Test code:



 private void DisplayMap_Load(object sender, EventArgs e)
        {
            winformsMap1.MapUnit = GeographyUnit.Meter;
            winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);



            winformsMap1.CurrentExtent = new RectangleShape(192531.239288, 6163612.41831, 1083997.36936, 5150683.56113);
            ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"…\SampleData\Data\Countries02.shp");
            worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.Country1(“CNTRY_NAME”);



            LayerOverlay overlay = new LayerOverlay();
            overlay.Layers.Add(worldLayer);
            winformsMap1.Overlays.Add(overlay);



            ManagedProj4Projection proj4 = new ManagedProj4Projection();
            proj4.InternalProjectionParametersString = ManagedProj4Projection.GetDecimalDegreesParametersString();
            proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(25832);
            proj4.Open();



            worldLayer.FeatureSource.Projection = proj4;



            loadWMS("sg.geodatenzentrum.de/wms_dtk200?", 25832, “DTK200”);



            winformsMap1.Refresh();
        }



        private void loadWMS(string url, int epsg, string layer)
        {
            Uri theUrl = new System.Uri(url);
            WmsRasterLayer wms = new WmsRasterLayer(theUrl);
            wms.SendingWebRequest += new EventHandler<SendingWebRequestEventArgs>(wms_SendingWebRequest);



            wms.Transparency = 150;
            if (epsg > 0)
            {
                wms.Crs = “EPSG:” + epsg;
            }
            wms.Open();



            wms.ActiveLayerNames.Add(layer);



            LayerOverlay wmsOverlay = new LayerOverlay();
            wmsOverlay.Name = “WMS”;
            wmsOverlay.Layers.Add(wms);
            winformsMap1.Overlays.Add(wmsOverlay);
        }



        void wms_SendingWebRequest(object sender, SendingWebRequestEventArgs e)
        {
            Debug.WriteLine(e.WebRequest.RequestUri.AbsoluteUri);
        }




Regards,



Don

Hi Don,



I’m adding OSM and then the WMS…

That is what it Looks like:



It’s the same Code.

Any Clou?



Regards

Hardy


Hi Hartwig, 
  
 I think that’s because the OSM is not under 25832. 
  
 If your WMS support the projection of OSM please choose that. 
  
 wiki.openstreetmap.org/wiki/Perl/Projected_version_of_an_OSM_extract 
  
 Regards, 
  
 Don

Hi Don,



it’s working fine!



But a general question to projection:

Which projection MapSuite uses internally?

What would you suggest to do when dealing with several data (PostGIS, Shape, WMS, Raster etc.) from different CRS like EPSG: 25832, 31467,4326…



In my test I’m using OSM (no projection set), a PostGIS layer (proj4 ->Ext:GetSphericalMercatorParametersString Int:25832) and even the WMS (requested in 3857).

When to decide which CRS to use?



Regards

Hardy

Hi Hardy, 
  
 Because we cannot reprojection most base layer like GoogleMap, BingMap and OSMMap, so we have to reprojection other layers like your WMS layer, shape file feature layer or any other layer. 
  
 Our default projection is 4326, for Google & Bing the default projection is 900913. 
  
 So if you have a map, you have to decide the projection based on your base map, if your OSM is 3857 and 4326, you need to decide to use one of them, and projection all your other layers to it. If any layer cannot be reprojection, it cannot shows correct. 
  
 Regards, 
  
 Don

Don,



thanks for Clearing the projection area.





Hardy

It’s our pleasure, Handy. Anything please feel free to let us know. 
  
 Thanks, 
 Johnny