User Tools

Site Tools


source_code_desktopeditionsample_vehicledirection_cs_090728.zip

Source Code DesktopEditionSample VehicleDirection CS 090728.zip

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections.ObjectModel;
using System.Windows.Forms;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.DesktopEdition;
namespace VehicleDirection
{
    public partial class Form1 : Form
    {
        private int count1 = 0;
        private int count2 = 0;
        Collection<PointShape> pointShapes1;
        Collection<PointShape> pointShapes2;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            LoadStreetData();
            InMemoryFeatureLayer inMemoryFeatureLayer = new InMemoryFeatureLayer();
            inMemoryFeatureLayer.Open();
            inMemoryFeatureLayer.Columns.Add(new FeatureSourceColumn("Angle"));
            inMemoryFeatureLayer.Close();
            pointShapes1 = ReadTextFile(@"..\..\Data\GPSreadings1.txt");
            pointShapes2 = ReadTextFile(@"..\..\Data\GPSreadings2.txt");
            Feature newFeature1 = new Feature(pointShapes1[count1]);
            newFeature1.ColumnValues["Angle"] = System.Convert.ToString(pointShapes1[count1].Z);
            inMemoryFeatureLayer.InternalFeatures.Add("Vehicle1", newFeature1);
            Feature newFeature2 = new Feature(pointShapes2[count2]);
            newFeature2.ColumnValues["Angle"] = System.Convert.ToString(pointShapes2[count2].Z);
            inMemoryFeatureLayer.InternalFeatures.Add("Vehicle2", newFeature2);
            RotatedImageStyle rotatedImageStyle = new RotatedImageStyle(new GeoImage(@"..\..\Data\vehicle2.png"), "Angle");
            inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear();
            inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(rotatedImageStyle);
            inMemoryFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            LayerOverlay pointOverLayer = new LayerOverlay();
            pointOverLayer.Layers.Add(inMemoryFeatureLayer);
            winformsMap1.Overlays.Add("Points Overlay", pointOverLayer);
            timer1.Start();
            winformsMap1.CurrentExtent = new RectangleShape(-66.8581, 10.4995, -66.8456, 10.4915);
            winformsMap1.Refresh();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (count1 == pointShapes1.Count) count1 = 0;
            if (count2 == pointShapes2.Count) count2 = 0;
            try
            {
                winformsMap1.Overlays["Points|Overlay"].Lock.EnterWriteLock();
                LayerOverlay pointOverLay = (LayerOverlay)winformsMap1.Overlays["Points|Overlay"];
                InMemoryFeatureLayer inMemoryFeatureLayer = (InMemoryFeatureLayer)pointOverLay.Layers[0];
 
                Feature feature = inMemoryFeatureLayer.InternalFeatures["Vehicle1"];
                feature.ColumnValues["Angle"] = System.Convert.ToString(pointShapes1[count1].Z);
                PointShape pointShape1 = feature.GetShape() as PointShape;
                pointShape1.X = pointShapes1[count1].X;
                pointShape1.Y = pointShapes1[count1].Y;
                pointShape1.Id = "Vehicle1";
                Feature feature2 = inMemoryFeatureLayer.InternalFeatures["Vehicle2"];
                feature2.ColumnValues["Angle"] = System.Convert.ToString(pointShapes2[count2].Z);
                PointShape pointShape2 = feature2.GetShape() as PointShape;
                pointShape2.X = pointShapes2[count2].X;
                pointShape2.Y = pointShapes2[count2].Y;
                pointShape2.Id = "Vehicle2";
                inMemoryFeatureLayer.Open();
                inMemoryFeatureLayer.EditTools.BeginTransaction();
                inMemoryFeatureLayer.EditTools.Update(pointShape1);
                inMemoryFeatureLayer.EditTools.Update(pointShape2);
                inMemoryFeatureLayer.EditTools.CommitTransaction();
                inMemoryFeatureLayer.Close();
            }
            finally
            {
                winformsMap1.Overlays["Points|Overlay"].Lock.ExitWriteLock();
                count1 = count1 + 1;
                count2 = count2 + 1;
            }
            winformsMap1.Refresh();
        }
        private Collection<PointShape> ReadTextFile(string textFile)
        {
            Collection<PointShape> pointShapes = new Collection<PointShape>();
            StreamReader SR = File.OpenText(textFile);
            string S;
            S = SR.ReadLine();
            while (S != null)
            {
                double X = System.Convert.ToDouble(S.Substring(0, 8));
                double Y = System.Convert.ToDouble(S.Substring(9, 7));
                double Angle = System.Convert.ToDouble(S.Substring(17, 3));
                PointShape pointShape = new PointShape(X, Y, Angle);
                pointShapes.Add(pointShape);
                S = SR.ReadLine();
            }
            SR.Close();
            return pointShapes;
        }
        private void LoadStreetData()
        {
            winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 233, 232, 214));
            ShapeFileFeatureLayer ParksShapeLayer = new ShapeFileFeatureLayer(@"..\..\Data\parks.shp");
            ShapeFileFeatureLayer.BuildIndexFile(@"..\..\Data\parks.shp", BuildIndexMode.DoNotRebuild);
            ParksShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            ParksShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Park1;
            ShapeFileFeatureLayer ParksLabelLayer = new ShapeFileFeatureLayer(@"..\..\Data\parks.shp");
            ParksLabelLayer.RequireIndex = false;
            ParksLabelLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("Name", "Arial", 10, DrawingFontStyles.Bold, GeoColor.StandardColors.SeaGreen, GeoColor.StandardColors.White, 2);
            ParksLabelLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            ShapeFileFeatureLayer StreetsShapeLayer = new ShapeFileFeatureLayer(@"..\..\Data\streets.shp");
            ShapeFileFeatureLayer.BuildIndexFile(@"..\..\Data\streets.shp", BuildIndexMode.DoNotRebuild);
            StreetsShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            ValueStyle valueStyle = new ValueStyle();
            valueStyle.ColumnName = "Type";
            valueStyle.ValueItems.Add(new ValueItem("A", LineStyles.LocalRoad2));
            valueStyle.ValueItems.Add(new ValueItem("M", LineStyles.MajorRoad1));
            StreetsShapeLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);
            ShapeFileFeatureLayer StreetsLabelLayer = new ShapeFileFeatureLayer(@"..\..\Data\streets.shp");
            StreetsLabelLayer.RequireIndex = false;
            TextStyle textStyle = new TextStyle();
            textStyle.TextColumnName = "St_name";
            textStyle.TextSolidBrush = new GeoSolidBrush(GeoColor.StandardColors.Black);
            textStyle.Font = new GeoFont("Arial", 7);
            textStyle.TextLineSegmentRatio = 10;
            textStyle.GridSize = 100;
            textStyle.SplineType = SplineType.StandardSplining;
            textStyle.DuplicateRule = LabelDuplicateRule.OneDuplicateLabelPerQuadrant;
            StreetsLabelLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(textStyle);
            StreetsLabelLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.GridSize = 5;
            StreetsLabelLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            LayerOverlay staticOverlay = new LayerOverlay();
            staticOverlay.Layers.Add("Parks", ParksShapeLayer);
            staticOverlay.Layers.Add("Streets", StreetsShapeLayer);
            staticOverlay.Layers.Add("Parks Labels", ParksLabelLayer);
            staticOverlay.Layers.Add("Streets Labels", StreetsLabelLayer);
            winformsMap1.Overlays.Add("Street Overlay", staticOverlay);
        }
    }
}

Program.cs

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

RotatedImageStyle.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using ThinkGeo.MapSuite.Core;
namespace VehicleDirection
{
    class RotatedImageStyle : Style
    {
        private GeoImage geoImage;
        private string angleColumnName;
    public RotatedImageStyle()
        : this(new GeoImage(), string.Empty)
    { }
    public RotatedImageStyle(GeoImage geoImage, string angleColumnName)
    {
        this.geoImage = geoImage;
        this.angleColumnName = angleColumnName;
    }
    public GeoImage GeoImage
    {
        get { return geoImage; }
        set { GeoImage = value; }
    }
    public string AngleColumnName
    {
        get { return angleColumnName; }
        set { AngleColumnName = value; }
    }
    protected override void DrawCore(IEnumerable<Feature> features, GeoCanvas canvas, Collection<SimpleCandidate> labelsInThisLayer, Collection<SimpleCandidate> labelsInAllLayers)
    {
            foreach (Feature feature in features)
            {
                float angleData = Convert.ToSingle(feature.ColumnValues[angleColumnName]);
                PointShape pointShape = (PointShape)feature.GetShape();
                canvas.DrawWorldImageWithoutScaling(geoImage, pointShape.X, pointShape.Y, DrawingLevel.LevelFour, 0, 0, 360 - angleData); //angleData);
            }
 
    }
    protected override Collection<string> GetRequiredColumnNamesCore()
    {
        Collection<string> columns = new Collection<string>();
        if (!columns.Contains(angleColumnName))
        {
            columns.Add(angleColumnName);
        }
        return columns;
    }
    }
}
source_code_desktopeditionsample_vehicledirection_cs_090728.zip.txt · Last modified: 2015/09/09 03:32 by admin