====== Source Code ServicesEditionSample MergePointLayers CS 091201.zip ======
====Program.cs====
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace MergePointLayers
{
static class Program
{
///
/// The main entry point for the application.
///
[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 MergePointLayers
{
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 pops of Georgia, South Carolina and Florida.
ShapeFileFeatureLayer GeorgiaLayer = new ShapeFileFeatureLayer(@"..\..\Data\Georgia_pop.shp", ShapeFileReadWriteMode.ReadOnly);
GeorgiaLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.LightPink, 9, GeoColor.StandardColors.Black);
GeorgiaLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
mapEngine.StaticLayers.Add("GeorgiaPopLayer", GeorgiaLayer);
ShapeFileFeatureLayer SouthCoralinaLayer = new ShapeFileFeatureLayer(@"..\..\Data\SouthCarolina_pop.shp", ShapeFileReadWriteMode.ReadOnly);
SouthCoralinaLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.LightGreen, 9, GeoColor.StandardColors.Black);
SouthCoralinaLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
mapEngine.StaticLayers.Add("SouthCoralinaPopLayer", SouthCoralinaLayer);
ShapeFileFeatureLayer FloridaLayer = new ShapeFileFeatureLayer(@"..\..\Data\Florida_pop.shp", ShapeFileReadWriteMode.ReadOnly);
FloridaLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.LightCyan, 9, GeoColor.StandardColors.Black);
FloridaLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
mapEngine.StaticLayers.Add("FloridaPopLayer", 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_pop.shp"))
{
DeleteMergeFiles();
}
//Adds to collection the three layers to be merged.
Collection shapeFileFeatureLayerToMerge = new Collection();
shapeFileFeatureLayerToMerge.Add((ShapeFileFeatureLayer)mapEngine.StaticLayers["GeorgiaPopLayer"]);
shapeFileFeatureLayerToMerge.Add((ShapeFileFeatureLayer)mapEngine.StaticLayers["SouthCoralinaPopLayer"]);
shapeFileFeatureLayerToMerge.Add((ShapeFileFeatureLayer)mapEngine.StaticLayers["FloridaPopLayer"]);
//Gets the collection of DbfColumn to be used for the merge layer.
ShapeFileFeatureLayer shapeFileFeatureLayer = (ShapeFileFeatureLayer)mapEngine.StaticLayers["GeorgiaPopLayer"];
shapeFileFeatureLayer.Open();
Collection dbfColumns = ((ShapeFileFeatureSource)shapeFileFeatureLayer.FeatureSource).GetDbfColumns();
shapeFileFeatureLayer.Close();
//Calls the MergeShapeFiles function.
ShapeFileFeatureLayer mergeLayer = MergeShapeFiles(shapeFileFeatureLayerToMerge, dbfColumns,@"..\..\Data\SouthEast_pop.shp");
//Removes the three original pop layers and add the new merge pop layer.
mapEngine.StaticLayers.Remove("GeorgiaPopLayer");
mapEngine.StaticLayers.Remove("SouthCarolinaPopLayer");
mapEngine.StaticLayers.Remove("FloridaPopLayer");
ShapeFileFeatureLayer PopLayer = new ShapeFileFeatureLayer(@"..\..\Data\SouthEast_pop.shp", ShapeFileReadWriteMode.ReadOnly);
PopLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimpleCircleStyle(GeoColor.StandardColors.LightPink, 9, GeoColor.StandardColors.Black);
PopLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
mapEngine.StaticLayers.Add("SouthEastPopLayer", PopLayer);
DrawImage();
}
private ShapeFileFeatureLayer MergeShapeFiles( Collection ShapeFileFeatureLayersToMerge, Collection DbfColumns, string OutputShapeFilePath)
{
//creates the shapefileFeatureSource for the merging.
ShapeFileFeatureSource.CreateShapeFile(ShapeFileType.Point, 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 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.
PointShape pointShape = (PointShape)feature.GetShape();
pointShape.Id = Convert.ToString(count);
//Gets the relevant columns to add.
Dictionary columnValues = new Dictionary();
foreach (DbfColumn dbfColumn in DbfColumns)
{
columnValues.Add(dbfColumn.ColumnName, feature.ColumnValues[dbfColumn.ColumnName]);
}
Feature newFeature = new Feature(pointShape, 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_pop.shp");
File.Delete(@"..\..\Data\SouthEast_pop.ids");
File.Delete(@"..\..\Data\SouthEast_pop.idx");
File.Delete(@"..\..\Data\SouthEast_pop.dbf");
File.Delete(@"..\..\Data\SouthEast_pop.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();
}
}
}