User Tools

Site Tools


source_code_desktopeditionsample_onewaystreetbuilder_cs_100311.zip

Source Code DesktopEditionSample OneWayStreetBuilder CS 100311.zip

Program.cs

 using System;  
 using System.Collections.Generic;  
 using System.Linq;  
 using System.Windows.Forms;  
 
 namespace OneWayStreetMaker  
 {  
     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.Collections.Generic;  
 using System.Collections.ObjectModel;  
 using System.Drawing.Imaging;  
 using System.IO;  
 using System.Windows.Forms;  
 using ThinkGeo.MapSuite.Core;  
 using ThinkGeo.MapSuite.DesktopEdition;  
 
 
 namespace  OneWayStreetMaker  
 {  
     public partial class TestForm : Form  
     {  
         private ShapeFileFeatureLayer layer;  
         private InMemoryFeatureLayer editLayer;  
         private InMemoryFeatureLayer flagLayer;  
 
         public TestForm()  
         {  
             InitializeComponent();  
         }  
 
         private void TestForm_Load(object sender, EventArgs e)  
         {  
             winformsMap1.CurrentExtent = new RectangleShape(-97.7496, 30.3015, -97.7387, 30.2932);  
             winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.LightGoldenrodYellow);  
             winformsMap1.ExtentOverlay.DoubleLeftClickMode = MapDoubleLeftClickMode.Disabled;  
 
             LayerOverlay overlay = new LayerOverlay();  
 
             //Displays the street shapefile.  
             string filePath = @"..\..\Data\AustinWithOneWayRoad.shp";  
             layer = new ShapeFileFeatureLayer(filePath, ShapeFileReadWriteMode.ReadWrite);  
             layer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad1;  
             layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.LocalRoad1("FENAME");  
             layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.OverlappingRule = LabelOverlappingRule.AllowOverlapping;  
             layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels;  
             layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
 
             overlay.Layers.Add(layer);  
 
             //Overlay for the edit layers for the selected line segment and its end points.  
             LayerOverlay editOverlay = new LayerOverlay();  
 
             //Layer for the selected line.  
             editLayer = new InMemoryFeatureLayer();  
             editLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.FromArgb(150, GeoColor.StandardColors.LightPink), 8, true);  
             editLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             editOverlay.Layers.Add(editLayer);  
 
             //Layer for the end points (Start and End).  
             flagLayer = new InMemoryFeatureLayer();  
             flagLayer.Open();  
             flagLayer.Columns.Add(new FeatureSourceColumn("Flag"));  
             ValueStyle valueStyle = new ValueStyle();  
             valueStyle.ColumnName = "Flag";  
 
             PointStyle style1 = new PointStyle(new GeoFont("Arial", 12,DrawingFontStyles.Bold), 083, new GeoSolidBrush(GeoColor.StandardColors.Green)); // (new GeoImage(m1));  
             valueStyle.ValueItems.Add(new ValueItem("Start", style1));  
 
             PointStyle style2 = new PointStyle(new GeoFont("Arial", 12,DrawingFontStyles.Bold), 069, new GeoSolidBrush(GeoColor.StandardColors.Red)); //(new GeoImage(m2));  
             valueStyle.ValueItems.Add(new ValueItem("End", style2));  
             flagLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);  
 
             flagLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;  
             editOverlay.Layers.Add(flagLayer);  
 
             winformsMap1.Overlays.Add("Street",overlay);  
             winformsMap1.Overlays.Add("Edit", editOverlay);  
 
             winformsMap1.Refresh();  
         }  
 
         private void winformsMap1_MouseDoubleClick(object sender, MouseEventArgs e)  
         {  
             //Gets the closest line to where the user double clicks.  
             PointShape position = ExtentHelper.ToWorldCoordinate(winformsMap1.CurrentExtent, new ScreenPointF(e.X, e.Y), winformsMap1.Width, winformsMap1.Height);  
             layer.Open();  
             Collection<Feature> features = layer.FeatureSource.GetFeaturesNearestTo(position, GeographyUnit.DecimalDegree, 1, ReturningColumnsType.AllColumns);  
             if (features.Count > 0)  
             {  
                 //Gets the lines for regular and reverse order for displaying.  
                 LineShape line = ((MultilineShape)features[0].GetShape()).Lines[0];  
                 LineShape reverseLine = (LineShape)line.CloneDeep();  
                 reverseLine.ReversePoints();  
 
                 UpdateEditLayers(features, line);  
 
                 winformsMap1.Refresh(winformsMap1.Overlays["Edit"]);  
 
                 DialogResult result = MessageBox.Show  
                 ("Do you want to convert the selected road to one way? Click 'Yes' to set the direction from Start to End, or click 'No' to set the direction from End to Start, and click 'Cancel' to quit.", "Change Confirm",  
                 MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);  
                 Feature editFeature = features[0];  
                 switch (result)  
                 {  
                     case DialogResult.Yes:  
                         editFeature.ColumnValues["ONE_WAY"] = "1";  
                         editFeature.ColumnValues["INDICATOR"] = "0";  
                         UpdateFeature(editFeature);  
 
                         break;  
                     case DialogResult.No:  
                         editFeature.ColumnValues["ONE_WAY"] = "1";  
                         editFeature.ColumnValues["INDICATOR"] = "1";  
 
                         UpdateFeature(editFeature);  
 
                         UpdateEditLayers(features, reverseLine);  
 
                         winformsMap1.Refresh(winformsMap1.Overlays["Edit"]);  
                         break;  
                     case DialogResult.Cancel:  
                     default:  
                         break;  
                 }  
             }  
         }  
 
         private void UpdateFeature(Feature feature)  
         {  
             try  
             {  
                 layer.Open();  
                 layer.FeatureSource.BeginTransaction();  
                 layer.FeatureSource.UpdateFeature(feature);  
                 layer.FeatureSource.CommitTransaction();  
                 MessageBox.Show("Update Successfully!");  
             }  
             catch (Exception ex)  
             {  
                 MessageBox.Show("Failed update, please try again.\r\n Error Message:\r\n" + ex.Message);  
             }  
         }  
 
         private void UpdateEditLayers(Collection<Feature> features, LineShape lineShape)  
         {  
             editLayer.InternalFeatures.Clear();  
             editLayer.InternalFeatures.Add(features[0]);  
             // Render start and end flag  
             flagLayer.InternalFeatures.Clear();  
 
             Dictionary<string, string> values = new Dictionary<string, string>();  
             values.Add("Flag", "Start");  
             Feature start = new Feature(new PointShape(lineShape.Vertices[0].X, lineShape.Vertices[0].Y), values);  
             flagLayer.InternalFeatures.Add(start);  
 
             Dictionary<string, string> values1 = new Dictionary<string, string>();  
             values1.Add("Flag", "End");  
             int count = lineShape.Vertices.Count;  
             Feature end = new Feature(new PointShape(lineShape.Vertices[count|- 1].X, lineShape.Vertices[count|- 1].Y), values1);  
             flagLayer.InternalFeatures.Add(end);  
         }  
 
         private void winformsMap1_MouseMove(object sender, MouseEventArgs e)  
         {  
             //Displays the X and Y in screen coordinates.  
             statusStrip1.Items["toolStripStatusLabelScreen"].Text = "X:" + e.X + " Y:" + e.Y;  
 
             //Gets the PointShape in world coordinates from screen coordinates.  
             PointShape pointShape = ExtentHelper.ToWorldCoordinate(winformsMap1.CurrentExtent, new ScreenPointF(e.X, e.Y), winformsMap1.Width, winformsMap1.Height);  
 
             //Displays world coordinates.  
             statusStrip1.Items["toolStripStatusLabelWorld"].Text = "(world) X:" + Math.Round(pointShape.X, 4) + " Y:" + Math.Round(pointShape.Y, 4);  
         }  
 
         private void btnClose_Click(object sender, EventArgs e)  
         {  
             this.Close();  
         }  
 
 
 
     }  
 }  
 
source_code_desktopeditionsample_onewaystreetbuilder_cs_100311.zip.txt · Last modified: 2015/09/09 03:32 by admin