ThinkGeo.com    |     Documentation    |     Premium Support

GraticuleAdornmentLayer out of scale

Howard, when I add the GraticuleAdornmentLayer on to the WorldMapKitWmsWpfOverlay, it does not scale.  Also, when the map zooms and pans, the grid does not scale with the map.  Is this because of the projection difference between WMK and the grid line?

 


TIA.




Hi Klaus,



Do you set projection or st. on the overlay? if yes, please set the same projection in the layer too. Here is the code:


wpfMap1.MapUnit = GeographyUnit.Meter;

WorldMapKitWmsWpfOverlay worldMapKitOverlay = new WorldMapKitWmsWpfOverlay();
worldMapKitOverlay.Projection = WorldMapKitProjection.SphericalMercator;
wpfMap1.Overlays.Add("WorldOverlay", worldMapKitOverlay);

ManagedProj4Projection proj4 = new ManagedProj4Projection();
proj4.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(4326);
proj4.ExternalProjectionParameters = ManagedProj4Projection.GetGoogleMapParameters();
proj4.Open();

GraticuleAdornmentLayer graticuleAdornmentLayer = new GraticuleAdornmentLayer();
graticuleAdornmentLayer.Projection = proj4;
graticuleAdornmentLayer.GraticuleLineStyle.OuterPen.Color = GeoColor.FromArgb(125, GeoColor.StandardColors.Navy);
wpfMap1.AdornmentOverlay.Layers.Add("graticule", graticuleAdornmentLayer);
wpfMap1.CurrentExtent = new RectangleShape(-13939426.6371, 6701997.4056, -7812401.86, 2626987.386962);



Let me know if you have any more queries.



Thanks,

Howard



I was not setting graticule overlay projection so that could be the problem.  Is there a way to extract the current map projection from a layer?   


Thanks for the sample.  It still needs tuning as map zooming and panning does not rescale the latitudes.  Longitudes are being scaled to map width OK.


My map is in DecimalDegress so I modified the sample as follows:



  wpfMap1.MapUnit = GeographyUnit.DecimalDegree;
            WorldMapKitWmsWpfOverlay worldMapKitOverlay = new WorldMapKitWmsWpfOverlay();
            worldMapKitOverlay.Projection = WorldMapKitProjection.DecimalDegrees;
            wpfMap1.Overlays.Add("WorldOverlay", worldMapKitOverlay);

            ManagedProj4Projection proj4 = new ManagedProj4Projection();
            proj4.InternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(4326);
            proj4.ExternalProjectionParameters = ManagedProj4Projection.GetEpsgParameters(4326);
            proj4.Open();


            GraticuleAdornmentLayer graticuleAdornmentLayer = new GraticuleAdornmentLayer();
            graticuleAdornmentLayer.Projection = proj4;
            graticuleAdornmentLayer.GraticuleLineStyle.OuterPen.Color = GeoColor.FromArgb(125, GeoColor.StandardColors.Navy);
            wpfMap1.AdornmentOverlay.Layers.Add("graticule", graticuleAdornmentLayer);
            wpfMap1.CurrentExtent = //new RectangleShape(-13939426.6371, 6701997.4056, -7812401.86, 2626987.386962);
                new RectangleShape(-180.0, 83.0, 180.0, -90.0);
            wpfMap1.Refresh();

 


This sample locks up upon map refresh.  Ideas?


Thanks again.



If your map is in Decimal Degrees, then you should not have to apply projection to the GraticuleAdornmentLayer because it is natively in Decimal Degrees. Actually, we have a sample app in the "How Do I" samples, "Create a GraticuleAdornmentLayer" in the "New Features compared with Current Desktop Edition" section that shows how to do that. See the code below:


 


 



        private void WpfMap_Loaded(object sender, RoutedEventArgs e)   
        {   
            wpfMap1.MapUnit = GeographyUnit.DecimalDegree;   
  
            WorldMapKitWmsWpfOverlay worldMapKitOverlay = new WorldMapKitWmsWpfOverlay();   
            wpfMap1.Overlays.Add("WorldOverlay", worldMapKitOverlay);   
  
            GraticuleAdornmentLayer graticuleAdornmentLayer = new GraticuleAdornmentLayer();   
            graticuleAdornmentLayer.GraticuleLineStyle.OuterPen.Color = GeoColor.FromArgb(125, GeoColor.StandardColors.Navy);   
            wpfMap1.AdornmentOverlay.Layers.Add("graticule", graticuleAdornmentLayer);   
  
            wpfMap1.CurrentExtent = new RectangleShape(-139.2, 92.4, 120.9, -93.2);   
            wpfMap1.Refresh();   
        }   



Val, Howard, thanks.  There is no issue at all.  I was not looking at the grid lines correctly.    
  
 When you zoom out, the lines still appear but with N/A as label when out of map extent .  I was not correlating this to the map unit.

I am glad you have it figured out. We are always happy to help. I know Map Suite API is pretty vast.