ThinkGeo.com    |     Documentation    |     Premium Support

MapPrinterLayer: How to wrap map at the dateline

With a layer overlay I write the code below to warap the google map at the dateline. 


googleOverlay.WrappingMode = WrappingMode.WrapDateline;


How can I do this for the MapPrinterLayer. Here is my code(I have coloured orange the code with problem.):


// Create the MapPrinterLayer and set the position

            MapPrinterLayer mapPrinterLayer = new MapPrinterLayer();

            //Map Printer Layer is in feet (State Plane Texas North Central Feet NAD83)

            mapPrinterLayer.MapUnit = GeographyUnit.Meter;

            //Set the extent of the MapPrinterLayer with world coordinates.

            RectangleShape currentExtent = new RectangleShape(17897271, -1367305, 19514067, -2411741);

           // mapPrinterLayer.MapExtent = currentExtent;

            mapPrinterLayer.BackgroundMask = new AreaStyle(new GeoPen(GeoColor.StandardColors.Black, 1));

            mapPrinterLayer.Open();



            // Set the maps position slightly above the page center and 8 inches wide and 7 inches tall

            RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch,wpfPrint);

            mapPrinterLayer.SetPosition(8, 7, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y + 1, PrintingUnit.Inch);



            // Setup the intial extent and ensure they snap to the default ZoomLevel

            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();



            mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(zoomLevelSet.ZoomLevel03.Scale, new RectangleShape(-10000000, 10000000, 10000000, -10000000), mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);





          

            GoogleMapsLayer googleMapLayer = new GoogleMapsLayer();

            googleMapLayer.DrawingExceptionMode = DrawingExceptionMode.DrawException;

            

       

            LayerOverlay googleOverlay = new LayerOverlay();

            googleOverlay.Layers.Add(googleMapLayer);

            googleOverlay.WrappingMode = WrappingMode.WrapDateline;

           

            googleMapLayer.WebProxy = System.Net.WebProxy.GetDefaultProxy();

            googleMapLayer.CacheDirectory = @"C:\temp\GEMapLayerCache2";

            googleMapLayer.TileMode = GoogleMapsTileMode.MultiTile;

            googleMapLayer.MapType = GoogleMapsMapType.Satellite;

      

            mapPrinterLayer.Layers.Add(googleMapLayer);

            

            // Add the MapPrinterLayer to the PrinterInteractiveOverlay

            PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)wpfPrint.InteractiveOverlays["PrintPreviewOverlay"];

            printerInteractiveOverlay.PrinterLayers.Add("MapLayer", mapPrinterLayer);


 


 


 



Bimal,


  WrapDateLineMode in printing is currently not supported. WrapDateLineMode is a pretty complicated and has many intricate parts. We offer pretty good flexibility in the Map Control itself when Google Map wrap mode for example is more restrictive. We are still working on fixing some existing issues with that mode and we want to fully consolidate that mode before embarking on further improvments. If this is something that you truly need soon, we can get our proffesional services team work with you. Let us know. Thank you.



Yes please. I am working on data from the Pacific Islands and need this to keep all the Islands close to each other. If I allow printing the way it is then everything will be concentrated on the sides of the page and I really don’t need this. 
  
 I will appreciate if you can add this feature. I am sure this will assist many others who work on data close tot he international dateline. 
  
 Thanks.

Bismal,


 I will present that idea for improvement to the Development team next week. I will let you know what they think. Thank you for your idea.



Hi Bismal, 
  
 Thanks for let us know your problem. It looks our WrapDateLineMode have issue when printing Google Map, but for your scenario could you try this change as below, which maybe helpful? 
  
 Replace your code  
  
  
mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(zoomLevelSet.ZoomLevel03.Scale, new RectangleShape(-10000000, 10000000, 10000000, -10000000), mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);
 
  
 to 
  
  
currentExtent = new RectangleShape(-20026376.3937099, 44927335.4270966, -11308059.9924964, -44927335.4270971);
            mapPrinterLayer.MapExtent = ExtentHelper.ZoomToScale(zoomLevelSet.ZoomLevel03.Scale, currentExtent, mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);
 
  
 I think this change can set Pacific to the center of map when printing. 
  
 We will go on working for this function for make it works better. 
  
 Regards, 
  
 Don

Hi Don,


Although what you are saying works, the shape files I load do not come out properly near the dateline. If I cannot work on countries that fall on either side of the dateline and crossing over in some cases, then this product does not meet my requirements.


 



Bimal,


  Can you send us a screenshot of you are seeing so that we see exactely what you mean by "the shapefiles I load do no come out properly near the dateline"? And what shapefiles are you using? Thank you.



Please find attached in word format. The first screenshot is what I see in the normal view and the second one is what the print layer does to the shape file.


 

 



ScreenshotWpfMap.docx (85.1 KB)

Bimal,


  Thank you for attaching the word document. I can see the shift in both x and y in the picture below and now I know what you mean. But I have not been able to recreate the problem. Can you send us a little sample that we can run and see the problem happening? Thank you.



Hi Val,


I am attaching a shp file that I am having issues with wrapping on the print map layer. If you can make this work with your printing sample found here: wiki.thinkgeo.com/wiki/Map_S...ng_Samples


If you can get your sample from the link above and get my shape file to wrap around the pacific, that will be good.



PopGIS_EEZ_merc.zip (202 KB)

Bimal,


 Thank you for responding but you forgot to include the dbf and shx files of your attached shapefile, PopGIS_EEZ_merc. shp, shx and dbf are the three necessary files for any shapefile. Thank you.



Val,


Please find attached in zipped format.



POP.zip (205 KB)

Bimal, 
  
 The sample you mentioned which is in our code community couldn’t running properly when I reference the latest version of WpfDesktopEdition, it always throws exception “Image from image path: is missing or invalid.” 
  
 I will report this problem to our development team and hope they can fix it soon. 
  
 Thanks, 
 James

Hi Mapsuite, 
  
 Any more progress on this? Wrapping in the printlayer is very important for me too. 
  
 Phil

Hello Phil, 
  
 Sorry for the long time waiting, our product team are still working on this, once we fixed this problem, I will post here and let you know asap. 
  
 Regards, 
  
 Gary

thanks Gary

Hi there, did you manage to get this done. I need this feature as I am working with countries around the dateline.

Hi Guys,


Does the latest dlls 6.0.127.0 or 6.0.0.127 solve your problem? Here is my code snippet, and screeshot.



            ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer(@"POP\PopGIS_EEZ_merc.shp");
            layer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(100, GeoColor.StandardColors.Green));
            layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            layer.WrappingExtent = new RectangleShape(-20037508, 20037508, 20037508, -20037508);
            layer.WrappingMode = WrappingMode.WrapDateline;


Regards,


Edgar