User Tools

Site Tools


source_code_serviceseditionsample_mergelinelayers_cs_091201.zip

Source Code ServicesEditionSample MergeLineLayers CS 091201.zip

Program.cs

 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Windows.Forms;  
 
 namespace MergeLineLayers  
 {  
     static class Program  
     {  
         /// <summary>  
         /// The main entry point for the application.  
         /// </summary>  
         [STAThread]  
         static void Main()  
         {  
             Application.EnableVisualStyles();  
             Application.SetCompatibleTextRenderingDefault(false);  
             Application.Run(new TestForm());  
         }  
     }  
 }  
 

TestForm.cs

 using System;  
 using System.IO;  
 using System.Collections.Generic;  
 using System.Collections.ObjectModel;  
 using System.Drawing;  
 using System.Windows.Forms;  
 using ThinkGeo.MapSuite.Core;  
 
 namespace MergeLineLayers  
 {  
     public partial class TestForm : Form  
     {  
         private MapEngine mapEngine = new MapEngine();  
         private Bitmap bitmap = null;  
 
 
         public TestForm()  
         {  
             InitializeComponent();  
         }  
 
         private void TestForm_Load(object sender, EventArgs e)  
         {  
             // Sets the full extent and the background color  
             mapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(new RectangleShape(-88.86,35.62,-76.98,24.45), Map.Width, Map.Height);  
             mapEngine.BackgroundFillBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);  
 
             // Adds the static layers to the MapEngine  
             //Adds the state background layer.  
             ShapeFileFeatureLayer stateLayer = new ShapeFileFeatureLayer(@"..\..\Data\USStates.shp", ShapeFileReadWriteMode.ReadOnly);  
             stateLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.State1;  
             stateLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.StaticLayers.Add("StateLayer", stateLayer);  
 
             //Adds the three layers for the roads of Georgia, South Carolina and Florida.  
             ShapeFileFeatureLayer GeorgiaLayer = new ShapeFileFeatureLayer(@"..\..\Data\Georgia_road.shp", ShapeFileReadWriteMode.ReadOnly);  
             GeorgiaLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.LightPink, 2,GeoColor.StandardColors.Black, 3, true);  
             GeorgiaLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.StaticLayers.Add("GeorgiaRoadLayer", GeorgiaLayer);  
 
             ShapeFileFeatureLayer SouthCoralinaLayer = new ShapeFileFeatureLayer(@"..\..\Data\SouthCarolina_road.shp", ShapeFileReadWriteMode.ReadOnly);  
             SouthCoralinaLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.LightGreen, 2,GeoColor.StandardColors.Black, 3, true);  
             SouthCoralinaLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.StaticLayers.Add("SouthCoralinaRoadLayer", SouthCoralinaLayer);  
 
             ShapeFileFeatureLayer FloridaLayer = new ShapeFileFeatureLayer(@"..\..\Data\Florida_road.shp", ShapeFileReadWriteMode.ReadOnly);  
             FloridaLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.LightCyan, 2,GeoColor.StandardColors.Black, 3, true);  
             FloridaLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.StaticLayers.Add("FloridaRoadLayer", FloridaLayer);  
 
             DrawImage();  
         }  
 
         private void btnMerge_Click(object sender, EventArgs e)  
         {  
             //deletes the files for the merge shapefile if they already exist.  
             if (File.Exists(@"..\..\Data\SouthEast_road.shp"))  
             {  
                 DeleteMergeFiles();  
             }  
 
             //Adds to collection the three layers to be merged.  
             Collection<ShapeFileFeatureLayer> shapeFileFeatureLayerToMerge = new Collection<ShapeFileFeatureLayer>();  
             shapeFileFeatureLayerToMerge.Add((ShapeFileFeatureLayer)mapEngine.StaticLayers["GeorgiaRoadLayer"]);  
             shapeFileFeatureLayerToMerge.Add((ShapeFileFeatureLayer)mapEngine.StaticLayers["SouthCoralinaRoadLayer"]);  
             shapeFileFeatureLayerToMerge.Add((ShapeFileFeatureLayer)mapEngine.StaticLayers["FloridaRoadLayer"]);  
 
             //Gets the collection of DbfColumn to be used for the merge layer.  
             ShapeFileFeatureLayer shapeFileFeatureLayer = (ShapeFileFeatureLayer)mapEngine.StaticLayers["GeorgiaRoadLayer"];  
             shapeFileFeatureLayer.Open();  
             Collection<DbfColumn> dbfColumns = ((ShapeFileFeatureSource)shapeFileFeatureLayer.FeatureSource).GetDbfColumns();  
             shapeFileFeatureLayer.Close();  
 
             //Calls the MergeShapeFiles function.  
             ShapeFileFeatureLayer mergeLayer = MergeShapeFiles(shapeFileFeatureLayerToMerge, dbfColumns,@"..\..\Data\SouthEast_road.shp");  
 
             //Removes the three original road layers and add the new merge pop layer.  
             mapEngine.StaticLayers.Remove("GeorgiaRoadLayer");  
             mapEngine.StaticLayers.Remove("SouthCarolinaRoadLayer");  
             mapEngine.StaticLayers.Remove("FloridaRoadLayer");  
 
             ShapeFileFeatureLayer PopLayer = new ShapeFileFeatureLayer(@"..\..\Data\SouthEast_road.shp", ShapeFileReadWriteMode.ReadOnly);  
             PopLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.LightPink, 2, GeoColor.StandardColors.Black, 3, true);  
             PopLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             mapEngine.StaticLayers.Add("SouthEastRoadLayer", PopLayer);  
 
 
             DrawImage();  
 
         }  
 
 
         private ShapeFileFeatureLayer MergeShapeFiles( Collection<ShapeFileFeatureLayer> ShapeFileFeatureLayersToMerge, Collection<DbfColumn> DbfColumns, string OutputShapeFilePath)  
         {  
             //creates the shapefileFeatureSource for the merging.  
             ShapeFileFeatureSource.CreateShapeFile(ShapeFileType.Polyline, OutputShapeFilePath, DbfColumns);  
             ShapeFileFeatureSource mergeFeatureSource = new ShapeFileFeatureSource(OutputShapeFilePath, ShapeFileReadWriteMode.ReadWrite);  
             mergeFeatureSource.Open();  
             mergeFeatureSource.BeginTransaction();  
 
             //Loops thru the layers to merge.  
             int count = 0;  
             foreach (ShapeFileFeatureLayer shapefileFeatureLayer in ShapeFileFeatureLayersToMerge)  
             {  
                 shapefileFeatureLayer.Open();  
                 Collection<Feature> features = shapefileFeatureLayer.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns);  
                 shapefileFeatureLayer.Close();  
 
                 //loops thru the features to add to the merge layer.  
                 foreach (Feature feature in features)  
                 {  
                     //Gets the shape of the current feature.  
                     MultilineShape multiLineShape = (MultilineShape)feature.GetShape();  
                     multiLineShape.Id = Convert.ToString(count);  
 
                     //Gets the relevant columns to add.  
                     Dictionary<string, string> columnValues = new Dictionary<string, string>();  
                     foreach (DbfColumn dbfColumn in DbfColumns)  
                     {  
                         columnValues.Add(dbfColumn.ColumnName, feature.ColumnValues[dbfColumn.ColumnName]);  
                     }  
 
                     Feature newFeature = new Feature(multiLineShape, columnValues);  
                     mergeFeatureSource.AddFeature(newFeature);  
                     count += 1;  
                 }  
             }  
 
 
             //Commits and closes the open resources.  
             mergeFeatureSource.CommitTransaction();  
             mergeFeatureSource.Close();  
 
 
             //Creates the merge shapefile to return.  
             ShapeFileFeatureLayer mergeShapeFile = new ShapeFileFeatureLayer(OutputShapeFilePath, ShapeFileReadWriteMode.ReadOnly);  
             return mergeShapeFile;  
 
         }  
 
         private void DeleteMergeFiles()  
         {  
             File.Delete(@"..\..\Data\SouthEast_road.shp");  
             File.Delete(@"..\..\Data\SouthEast_road.ids");  
             File.Delete(@"..\..\Data\SouthEast_road.idx");  
             File.Delete(@"..\..\Data\SouthEast_road.dbf");  
             File.Delete(@"..\..\Data\SouthEast_road.shx");  
         }  
 
         private void DrawImage()  
         {  
             if (bitmap != null) { bitmap.Dispose(); }  
             bitmap = new Bitmap(Map.Width, Map.Height);  
             mapEngine.OpenAllLayers();  
             mapEngine.DrawStaticLayers(bitmap, GeographyUnit.DecimalDegree);  
             mapEngine.CloseAllLayers();  
             Map.Image = bitmap;  
         }  
 
         private void ToolBar_ButtonClick(object sender, ToolBarButtonClickEventArgs e)  
         {  
             switch (e.Button.Tag.ToString())  
             {  
                 case "Zoom In":  
                     mapEngine.CurrentExtent.ScaleDown(50);  
                     break;  
                 case "Zoom Out":  
                     mapEngine.CurrentExtent.ScaleUp(50);  
                     break;  
                 case "Full Extent":  
                     mapEngine.CurrentExtent = ExtentHelper.GetDrawingExtent(new RectangleShape(-180.0, 83.0, 180.0, -90.0), Map.Width, Map.Height);  
                     break;  
                 case "Pan Left":  
                     mapEngine.CurrentExtent = ExtentHelper.Pan(mapEngine.CurrentExtent, PanDirection.Left, 20);  
                     break;  
                 case "Pan Right":  
                     mapEngine.CurrentExtent = ExtentHelper.Pan(mapEngine.CurrentExtent, PanDirection.Right, 20);  
                     break;  
                 case "Pan Up":  
                     mapEngine.CurrentExtent = ExtentHelper.Pan(mapEngine.CurrentExtent, PanDirection.Up, 20);  
                     break;  
                 case "Pan Down":  
                     mapEngine.CurrentExtent = ExtentHelper.Pan(mapEngine.CurrentExtent, PanDirection.Down, 20);  
                     break;  
                 default:  
                     break;  
             }  
             DrawImage();  
         }  
 
         private void btnClose_Click(object sender, EventArgs e)  
         {  
             this.Close();  
         }  
 
 
     }  
 }  
 
source_code_serviceseditionsample_mergelinelayers_cs_091201.zip.txt · Last modified: 2015/09/08 05:34 by admin