using System; using System.Globalization; using ThinkGeo.MapSuite.Core; using ThinkGeo.MapSuite.WpfDesktopEdition; namespace Distance { public class MeasureTrackInteractiveOverlay : TrackInteractiveOverlay { public MeasureTrackInteractiveOverlay() : base() { TrackShapeLayer.Open(); TrackShapeLayer.Columns.Add(new FeatureSourceColumn("length")); TrackShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.FromArgb(150, GeoColor.StandardColors.DarkRed), 4, false); TrackShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(150, GeoColor.StandardColors.DarkRed), GeoColor.FromArgb(200, GeoColor.StandardColors.DarkRed), 1); TrackShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = new TextStyle("length", new GeoFont("Arial", 10, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColor.SimpleColors.Black)); TrackShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.TextLineSegmentRatio = 100; TrackShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.YOffsetInPixel = 10; TrackShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; ThinkGeo.MapSuite.WpfDesktopEdition.Tile tile = new LayerTile(); tile.IsAsync = false; OverlayCanvas.Children.Add(tile); } protected override void DrawCore(RectangleShape targetExtent, RefreshType refreshType) { UpdateTrackingFeature(); base.DrawCore(targetExtent, refreshType); } private void UpdateTrackingFeature() { if (TrackShapeLayer.InternalFeatures.Count > 0) { Feature feature = TrackShapeLayer.InternalFeatures[0]; BaseShape shape = feature.GetShape(); WellKnownType wkType = shape.GetWellKnownType(); if (wkType == WellKnownType.Line) { double length = ((LineShape)shape).GetLength(GeographyUnit.DecimalDegree, DistanceUnit.Feet); feature.ColumnValues["length"] = String.Format(CultureInfo.InvariantCulture, "{0} feet", length); } else if (wkType == WellKnownType.Polygon) { double area = ((PolygonShape)shape).GetArea(GeographyUnit.DecimalDegree, AreaUnit.SquareFeet); feature.ColumnValues["length"] = String.Format(CultureInfo.InvariantCulture, "{0} square feet", area); } else { feature.ColumnValues["length"] = String.Empty; } } } } }