ThinkGeo.com    |     Documentation    |     Premium Support

Multi Page Printer Layer

How would we go about a Multi Page report with the printer layers ?



Gregory, 
  
 We can add multi PagePrinterLayer in one winformmap, and add title, map, datagrid etc for each of them. 
  
 Regards, 
  
 Gary

Gregory, 
  
 I’m planning to write a sample for you to create multi page report but I find a bug in the progress. 
  
 I will fix that first and then give you some sample code to help you resolve this problem. 
  
 Thank you for your patience. 
  
 Regards 
  
 Gary 
  


Gregory, 



Thank you for your patience. 



Please download our latest version tomorrow and try this code in our printer sample. 


PagePrinterLayer page2 = new PagePrinterLayer();
            page2.PageSize = PrinterPageSize.Custom;

            float pageWidth = (float)PrinterHelper.ConvertLength(8.5, PrintingUnit.Inch, PrintingUnit.Point);
            float pageHeight = (float)PrinterHelper.ConvertLength(11, PrintingUnit.Inch, PrintingUnit.Point);
            double centerPointX = PrinterHelper.ConvertLength(10, PrintingUnit.Inch, PrintingUnit.Point);
            double centerPointY = PrinterHelper.ConvertLength(0, PrintingUnit.Inch, PrintingUnit.Point);
            page2.SetPosition(pageWidth, pageHeight, centerPointX, centerPointY, PrintingUnit.Point);

            printerOverlay.PrinterLayers.Add("PageLayer2", page2);
  



I hope this can help. 



Regards, 



Gary



Wow thank you gary!  
 If i could give you a big hug, i would :)

Quick question, is there an example for the printerOverlay using google maps ?

Gregory, 
  
 I’m glad it’s useful. 
  
 But sorry to say, for now, our printerOverlay only support printerLayer, so we have a MapPrinterLayer to receive some other layer and translate it to the printerLayer format, but it only support vertex type layer, it still have problems when use some layer with projection. 
  
 We will keep working on that and make some new version. 
  
 Regards, 
  
 Gary

in the mean time, i need to do a pdf export.. of three maps that can be static images... can this be done ?



I have a Overlays:


Dim google As New GoogleOverlay("Google Map")

Map1.CustomOverlays.Add(google)


Dim DataTabLayer As New TabFeatureLayer("tabfile.tab")

Dim DataTabOverlay As New LayerOverlay("DataTabOverlay", False, TileType.SingleTile)

DataTabOverlay.Layers.Add("DataTabLayer", DataTabLayer)

Map1.CustomOverlays.Add(DataTabOverlay)



adornmentOverlay.Layers.Add("LengendLayer", legendLayer)

Map1.CustomOverlays.Add(adornmentOverlay)



Dim PointFeatureLayer As New InMemoryFeatureLayer(myColumnCollection, QueryResultFeatures)

Dim PointLabelLayer As New InMemoryFeatureLayer(myColumnCollection, QueryResultFeatures)



Map1.DynamicOverlay.Layers.Add("PointFeatureLayer ", PointFeatureLayer )

Map1.DynamicOverlay.Layers.Add("PointLabelLayer", PointLabelLayer )





Dim RetailersFeatureLayer As New InMemoryFeatureLayer(myColumnCollection, QueryResultFeatures)

Map1.DynamicOverlay.Layers.Add(RetailersFeatureLayer)


 


I want to export a pdf with all of the overlays..... is that possible ?


 



Gregory, 



Yes, you can use the PdfExtension to made that. 



Please download the sample and check the code, sorry I have deleted the data because it's too big to upload. 



Regards, 



Gary



PdfExtensionSamples.zip (30.2 KB)

Have you got a Web Sample ?

Gregory, 



Thank you for your patience. 



Please try the code below: 


public partial class DisplayASimpleMap : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Map1.CurrentExtent = new RectangleShape(-135.47672664498, 53.1062529845545, -76.20327335502, 12.4645242175181);
                Map1.MapUnit = GeographyUnit.DecimalDegree;
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);

                ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(MapPath("~/SampleData/world/cntry02.shp"));
                worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
                worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.StartCap = DrawingLineCap.Round;
                worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.EndCap = DrawingLineCap.Round;
                worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                LayerOverlay staticOverlay = new LayerOverlay("World");
                staticOverlay.IsBaseOverlay = false;
                staticOverlay.Layers.Add("WorldLayer", worldLayer);
                Map1.CustomOverlays.Add(staticOverlay);
            }
        }
        protected void Button1_Click(object sender, EventArgs args)
        {
            PdfGeoCanvas pdfGeoCanvas = new PdfGeoCanvas();

            PdfDocument document = new PdfDocument();
            PdfPage page = document.AddPage();

            pdfGeoCanvas.DrawingArea = new Rectangle(0, 0, 579, 397);

            Collection<SimpleCandidate> labelsInLayers = new Collection<SimpleCandidate>();
            LayerOverlay worldLayer = (LayerOverlay)Map1.CustomOverlays["World"];
            ShapeFileFeatureLayer shapeFile = (ShapeFileFeatureLayer)worldLayer.Layers["WorldLayer"];

            pdfGeoCanvas.BeginDrawing(page, Map1.CurrentExtent, GeographyUnit.DecimalDegree);
            shapeFile.Open();
            shapeFile.Draw(pdfGeoCanvas, labelsInLayers);
            shapeFile.Close();
            pdfGeoCanvas.EndDrawing();

            string filename = @"C:\Test\MapSuite PDF Map.pdf";
            document.Save(filename);
            Process.Start(filename);
        }
    }



Any more questions please feel free to let me know. 



Regards, 



Gary