private void SetMinMax(GuidancePattern guidancePattern) { if (guidancePattern is APlus) { (guidancePattern as APlus).SetMinMax(_drawingUtil); } else if (guidancePattern is AbLine) { (guidancePattern as AbLine).SetMinMax(_drawingUtil); } else if (guidancePattern is AbCurve) { (guidancePattern as AbCurve).SetMinMax(_drawingUtil); } else if (guidancePattern is PivotGuidancePattern) { (guidancePattern as PivotGuidancePattern).SetMinMax(_drawingUtil); } else if (guidancePattern is MultiAbLine) { (guidancePattern as MultiAbLine).SetMinMax(_drawingUtil); } else if (guidancePattern is Spiral) { (guidancePattern as Spiral).SetMinMax(_drawingUtil); } }
private static GuidancePattern LoadGuidancePattern(XmlNode inputNode, out string patternId) { patternId = inputNode.GetXmlNodeValue("@A"); if (string.IsNullOrEmpty(patternId)) { return(null); } GuidancePattern pattern = GetPattern(inputNode); if (pattern == null) { return(null); } pattern.Description = inputNode.GetXmlNodeValue(@"B"); pattern.PropagationDirection = GetPropagationDirection(inputNode.GetXmlNodeValue("@E")); pattern.BoundingPolygon = ShapeLoader.LoadPolygon(inputNode.SelectNodes("PLN[0]")); pattern.Extension = GetExtension(inputNode.GetXmlNodeValue("@F")); pattern.GpsSource = GetGpsSource(inputNode); pattern.OriginalEpsgCode = inputNode.GetXmlNodeValue("@M"); return(pattern); }
private void WriteGuidancePattern(XmlWriter writer, GuidancePattern guidancePattern) { var patternType = ValidateAndGetPatternType(guidancePattern); // Bail out for inconsistent pattern type. if (string.IsNullOrEmpty(patternType)) { return; } var guidancePatternId = guidancePattern.Id.FindIsoId() ?? GenerateId(); TaskWriter.Ids.Add(guidancePatternId, guidancePattern.Id); writer.WriteStartElement(XmlPrefix); writer.WriteAttributeString("A", guidancePatternId); writer.WriteXmlAttribute("B", guidancePattern.Description); writer.WriteAttributeString("C", patternType); writer.WriteXmlAttribute("D", GetPropagationDirection(guidancePattern.PropagationDirection)); writer.WriteXmlAttribute("E", GetExtension(guidancePattern.Extension)); writer.WriteXmlAttribute("G", GetHeading(guidancePattern)); writer.WriteXmlAttribute("M", guidancePattern.OriginalEpsgCode); WriteGpsData(writer, guidancePattern.GpsSource); WritePattern(writer, guidancePattern); WriteBoundary(writer, guidancePattern.BoundingPolygon); writer.WriteEndElement(); }
private void ProcessPattern(GuidancePattern guidancePattern) { if (guidancePattern is APlus) { ProcessAPlus(guidancePattern as APlus); } else if (guidancePattern is AbLine) { ProcessAbLine(guidancePattern as AbLine); } else if (guidancePattern is AbCurve) { ProcessAbCurve(guidancePattern as AbCurve); } else if (guidancePattern is PivotGuidancePattern) { ProcessCenterPivot(guidancePattern as PivotGuidancePattern); } else if (guidancePattern is MultiAbLine) { ProcessMultiAbLine(guidancePattern as MultiAbLine); } else if (guidancePattern is Spiral) { ProcessSpiral(guidancePattern as Spiral); } }
private static void WritePattern(XmlWriter writer, GuidancePattern guidancePattern) { switch (guidancePattern.GuidancePatternType) { case GuidancePatternTypeEnum.AbCurve: WriteAbCurve(writer, guidancePattern as AbCurve); break; case GuidancePatternTypeEnum.AbLine: WriteAbLine(writer, guidancePattern as AbLine); break; case GuidancePatternTypeEnum.APlus: WriteAplus(writer, guidancePattern as APlus); break; case GuidancePatternTypeEnum.CenterPivot: WritePivot(writer, guidancePattern as CenterPivot); break; case GuidancePatternTypeEnum.Spiral: WriteSpiral(writer, guidancePattern as Spiral); break; } }
private static string GetHeading(GuidancePattern guidancePattern) { double?heading = null; switch (guidancePattern.GuidancePatternType) { case GuidancePatternTypeEnum.AbCurve: heading = (guidancePattern as AbCurve).Heading; break; case GuidancePatternTypeEnum.AbLine: heading = (guidancePattern as AbLine).Heading; break; case GuidancePatternTypeEnum.APlus: heading = (guidancePattern as APlus).Heading; break; } if (!heading.HasValue) { return(null); } return(heading.Value.ToString(CultureInfo.InvariantCulture)); }
public void Write(XmlWriter writer, GuidancePattern guidancePattern) { if (guidancePattern == null) { return; } WriteGuidancePattern(writer, guidancePattern); }
private static string ValidateAndGetPatternType(GuidancePattern guidancePattern) { switch (guidancePattern.GuidancePatternType) { case GuidancePatternTypeEnum.AbLine: { var abLine = guidancePattern as AbLine; if (abLine == null || abLine.A == null || abLine.B == null) { return(null); } } return("1"); case GuidancePatternTypeEnum.APlus: { var aPlus = guidancePattern as APlus; if (aPlus == null || aPlus.Point == null) { return(null); } return("2"); } case GuidancePatternTypeEnum.AbCurve: { var abCurve = guidancePattern as AbCurve; if (abCurve == null || abCurve.Shape == null || abCurve.Shape.Count < 1) { return(null); } return("3"); } case GuidancePatternTypeEnum.CenterPivot: { var pivot = guidancePattern as CenterPivot; if (pivot == null || pivot.Center == null) { return(null); } return("4"); } case GuidancePatternTypeEnum.Spiral: { var spiral = guidancePattern as Spiral; if (spiral == null || spiral.Shape == null) { return(null); } return("5"); } } return(null); }
public void ProccessGuidancePattern(GuidancePattern guidancePattern) { using (var graphics = _spatialViewer.CreateGraphics()) { _drawingUtil = new DrawingUtil(_spatialViewer.Width, _spatialViewer.Height, graphics); SetMinMax(guidancePattern); ProcessPattern(guidancePattern); } }
public ISOGuidancePattern ExportGuidancePattern(GuidancePattern adaptGuidancePattern) { ISOGuidancePattern gpn = new ISOGuidancePattern(); //ID string gpnID = adaptGuidancePattern.Id.FindIsoId() ?? GenerateId(); gpn.GuidancePatternId = gpnID; ExportIDs(adaptGuidancePattern.Id, gpnID); gpn.GuidancePatternDesignator = adaptGuidancePattern.Description; gpn.GuidancePatternType = ExportGuidancePatternType(adaptGuidancePattern.GuidancePatternType); gpn.PropagationDirection = ExportPropagationDirection(adaptGuidancePattern.PropagationDirection); gpn.Extension = ExportExtension(adaptGuidancePattern.Extension); gpn.Heading = ExportHeading(adaptGuidancePattern); if (adaptGuidancePattern.GpsSource != null) { gpn.GNSSMethod = ExportGNSSMethod(adaptGuidancePattern.GpsSource.SourceType); if (adaptGuidancePattern.GpsSource.HorizontalAccuracy != null) { gpn.HorizontalAccuracy = (decimal)adaptGuidancePattern.GpsSource.HorizontalAccuracy.AsConvertedDouble("m").Value; } if (adaptGuidancePattern.GpsSource.VerticalAccuracy != null) { gpn.VerticalAccuracy = (decimal)adaptGuidancePattern.GpsSource.VerticalAccuracy.AsConvertedDouble("m").Value; } } gpn.OriginalSRID = adaptGuidancePattern.OriginalEpsgCode; gpn.NumberOfSwathsLeft = (uint?)adaptGuidancePattern.NumbersOfSwathsLeft; gpn.NumberOfSwathsRight = (uint?)adaptGuidancePattern.NumbersOfSwathsRight; //Pattern LineStringMapper lineStringMapper = new LineStringMapper(TaskDataMapper); gpn.LineString = lineStringMapper.ExportGuidancePattern(adaptGuidancePattern); if (adaptGuidancePattern is PivotGuidancePattern pivot && pivot.DefinitionMethod == PivotGuidanceDefinitionEnum.PivotGuidancePatternCenterRadius && pivot.Radius != null) { gpn.Radius = (uint)pivot.Radius.AsConvertedInt("mm").Value; gpn.GuidancePatternOptions = ISOGuidancePatternOption.FullCircle; } //Boundary if (adaptGuidancePattern.BoundingPolygon != null) { PolygonMapper polygonMapper = new PolygonMapper(TaskDataMapper); gpn.BoundaryPolygons = polygonMapper.ExportMultipolygon(adaptGuidancePattern.BoundingPolygon, ISOPolygonType.Other).ToList(); } return(gpn); }
public ISOGuidanceGroup ExportGuidanceGroup(GuidanceGroup adaptGuidanceGroup) { ISOGuidanceGroup isoGroup = new ISOGuidanceGroup(); //ID string id = adaptGuidanceGroup.Id.FindIsoId() ?? GenerateId(); isoGroup.GuidanceGroupId = id; ExportIDs(adaptGuidanceGroup.Id, id); //Designator isoGroup.GuidanceGroupDesignator = adaptGuidanceGroup.Description; //Patterns if (adaptGuidanceGroup.GuidancePatternIds.Any()) { List <GuidancePattern> patterns = new List <GuidancePattern>(); foreach (int adaptID in adaptGuidanceGroup.GuidancePatternIds) { GuidancePattern adaptPattern = DataModel.Catalog.GuidancePatterns.SingleOrDefault(p => p.Id.ReferenceId == adaptID); if (adaptPattern != null) { patterns.Add(adaptPattern); } } GuidancePatternMapper patternMapper = TaskDataMapper.GuidancePatternMapper; isoGroup.GuidancePatterns = patternMapper.ExportGuidancePatterns(patterns).ToList(); } //Boundaries if (adaptGuidanceGroup.BoundingPolygon != null) { PolygonMapper polygonMapper = new PolygonMapper(TaskDataMapper); isoGroup.BoundaryPolygons = polygonMapper.ExportMultipolygon(adaptGuidanceGroup.BoundingPolygon, ISOPolygonType.Other).ToList(); } return(isoGroup); }
public IEnumerable <GuidancePattern> ImportGuidancePatterns(IEnumerable <ISOGuidancePattern> isoGuidancePatterns) { //Import patterns List <GuidancePattern> adaptGuidancePatterns = new List <GuidancePattern>(); foreach (ISOGuidancePattern isoGuidancePattern in isoGuidancePatterns) { GuidancePattern adaptGuidancePattern = ImportGuidancePattern(isoGuidancePattern); adaptGuidancePatterns.Add(adaptGuidancePattern); } //Add the patterns to the Catalog if (adaptGuidancePatterns.Any()) { if (DataModel.Catalog.GuidancePatterns == null) { DataModel.Catalog.GuidancePatterns = new List <GuidancePattern>(); } DataModel.Catalog.GuidancePatterns.AddRange(adaptGuidancePatterns); } return(adaptGuidancePatterns); }
private static decimal?ExportHeading(GuidancePattern guidancePattern) { double?heading = null; switch (guidancePattern.GuidancePatternType) { case GuidancePatternTypeEnum.AbCurve: heading = (guidancePattern as AbCurve).Heading; break; case GuidancePatternTypeEnum.AbLine: heading = (guidancePattern as AbLine).Heading; break; case GuidancePatternTypeEnum.APlus: heading = (guidancePattern as APlus).Heading; break; } if (heading.HasValue) { return(Convert.ToDecimal(heading)); } return(null); }
public ISOGuidancePattern ExportGuidancePattern(GuidancePattern adaptGuidancePattern) { ISOGuidancePattern gpn = new ISOGuidancePattern(); //ID string gpnID = adaptGuidancePattern.Id.FindIsoId() ?? GenerateId(); gpn.GuidancePatternId = gpnID; ExportIDs(adaptGuidancePattern.Id, gpnID); gpn.GuidancePatternDesignator = adaptGuidancePattern.Description; gpn.GuidancePatternType = ExportGuidancePatternType(adaptGuidancePattern.GuidancePatternType); gpn.PropagationDirection = ExportPropagationDirection(adaptGuidancePattern.PropagationDirection); gpn.Extension = ExportExtension(adaptGuidancePattern.Extension); gpn.Heading = ExportHeading(adaptGuidancePattern); gpn.GNSSMethod = ExportGNSSMethod(adaptGuidancePattern.GpsSource.SourceType); gpn.HorizontalAccuracy = (decimal)adaptGuidancePattern.GpsSource.HorizontalAccuracy.AsConvertedDouble("m"); gpn.VerticalAccuracy = (decimal)adaptGuidancePattern.GpsSource.VerticalAccuracy.AsConvertedDouble("m"); gpn.OriginalSRID = adaptGuidancePattern.OriginalEpsgCode; gpn.NumberOfSwathsLeft = (uint?)adaptGuidancePattern.NumbersOfSwathsLeft; gpn.NumberOfSwathsRight = (uint?)adaptGuidancePattern.NumbersOfSwathsRight; //Pattern LineStringMapper lineStringMapper = new LineStringMapper(TaskDataMapper); switch (adaptGuidancePattern.GuidancePatternType) { case GuidancePatternTypeEnum.AbCurve: AbCurve curve = adaptGuidancePattern as AbCurve; gpn.LineString = lineStringMapper.ExportLineString(curve.Shape[0], ISOLineStringType.GuidancePattern); //Only first linestring used. break; case GuidancePatternTypeEnum.AbLine: AbLine abLine = adaptGuidancePattern as AbLine; LineString line = new LineString { Points = new List <Point>() }; line.Points.Add(abLine.A); line.Points.Add(abLine.B); gpn.LineString = lineStringMapper.ExportLineString(line, ISOLineStringType.GuidancePattern); break; case GuidancePatternTypeEnum.APlus: APlus aPlus = adaptGuidancePattern as APlus; LineString aPlusLine = new LineString { Points = new List <Point>() }; aPlusLine.Points.Add(aPlus.Point); gpn.LineString = lineStringMapper.ExportLineString(aPlusLine, ISOLineStringType.GuidancePattern); break; case GuidancePatternTypeEnum.CenterPivot: PivotGuidancePattern pivot = adaptGuidancePattern as PivotGuidancePattern; LineString pivotLine = new LineString { Points = new List <Point>() }; pivotLine.Points.Add(pivot.Center); if (pivot.StartPoint != null) { pivotLine.Points.Add(pivot.StartPoint); if (pivot.EndPoint != null) { pivotLine.Points.Add(pivot.EndPoint); } } gpn.LineString = lineStringMapper.ExportLineString(pivotLine, ISOLineStringType.GuidancePattern); //gpn.Radius = ? //Not implemented //gpn.GuidancePatternOptions = ? //Not implemented break; case GuidancePatternTypeEnum.Spiral: Spiral spiral = adaptGuidancePattern as Spiral; gpn.LineString = lineStringMapper.ExportLineString(spiral.Shape, ISOLineStringType.GuidancePattern); break; } //Boundary if (adaptGuidancePattern.BoundingPolygon != null) { PolygonMapper polygonMapper = new PolygonMapper(TaskDataMapper); gpn.BoundaryPolygons = polygonMapper.ExportPolygons(adaptGuidancePattern.BoundingPolygon.Polygons, ISOPolygonType.Other).ToList(); } return(gpn); }
public GuidancePattern ImportGuidancePattern(ISOGuidancePattern isoGuidancePattern) { GuidancePattern pattern = null; LineStringMapper lineStringMapper = new LineStringMapper(TaskDataMapper); PointMapper pointMapper = new PointMapper(TaskDataMapper); switch (isoGuidancePattern.GuidancePatternType) { case ISOGuidancePatternType.AB: pattern = new AbLine(); AbLine abLine = pattern as AbLine; abLine.A = pointMapper.ImportPoint(isoGuidancePattern.LineString.Points.First()); abLine.B = pointMapper.ImportPoint(isoGuidancePattern.LineString.Points.Last()); break; case ISOGuidancePatternType.APlus: pattern = new APlus(); APlus aPlus = pattern as APlus; aPlus.Point = pointMapper.ImportPoint(isoGuidancePattern.LineString.Points.First()); break; case ISOGuidancePatternType.Curve: pattern = new AbCurve(); AbCurve abCurve = pattern as AbCurve; abCurve.Shape = new List <LineString>() { lineStringMapper.ImportLineString(isoGuidancePattern.LineString) }; //As with export, we only have 1 linestring. break; case ISOGuidancePatternType.Pivot: pattern = new PivotGuidancePattern(); PivotGuidancePattern pivot = pattern as PivotGuidancePattern; pivot.Center = pointMapper.ImportPoint(isoGuidancePattern.LineString.Points.First()); if (isoGuidancePattern.LineString.Points.Count == 3) { pivot.StartPoint = pointMapper.ImportPoint(isoGuidancePattern.LineString.Points[1]); pivot.EndPoint = pointMapper.ImportPoint(isoGuidancePattern.LineString.Points[2]); } //Radius & GuidancePatternOptions not implemented in ADAPT break; case ISOGuidancePatternType.Spiral: pattern = new Spiral(); Spiral spiral = pattern as Spiral; spiral.Shape = lineStringMapper.ImportLineString(isoGuidancePattern.LineString); break; } //ID ImportIDs(pattern.Id, isoGuidancePattern.GuidancePatternId); pattern.Description = isoGuidancePattern.GuidancePatternDesignator; pattern.GuidancePatternType = ImportGuidancePatternType(isoGuidancePattern.GuidancePatternType); pattern.PropagationDirection = ImportPropagationDirection(isoGuidancePattern.PropagationDirection); pattern.Extension = ImportExtension(isoGuidancePattern.Extension); //Heading if (isoGuidancePattern.Heading.HasValue) { double heading = Convert.ToDouble(isoGuidancePattern.Heading.Value); if (pattern is AbLine) { (pattern as AbLine).Heading = heading; } if (pattern is AbCurve) { (pattern as AbCurve).Heading = heading; } if (pattern is APlus) { (pattern as APlus).Heading = heading; } } pattern.GpsSource = new GpsSource(); pattern.GpsSource.SourceType = ImportGNSSMethod(isoGuidancePattern.GNSSMethod); pattern.GpsSource.HorizontalAccuracy = GetAccuracy(isoGuidancePattern.HorizontalAccuracy); pattern.GpsSource.VerticalAccuracy = GetAccuracy(isoGuidancePattern.VerticalAccuracy); pattern.NumbersOfSwathsLeft = (int?)(isoGuidancePattern.NumberOfSwathsLeft); pattern.NumbersOfSwathsRight = (int?)(isoGuidancePattern.NumberOfSwathsRight); pattern.OriginalEpsgCode = isoGuidancePattern.OriginalSRID; return(pattern); }
public GuidancePattern ImportGuidancePattern(ISOGuidancePattern isoGuidancePattern) { GuidancePattern pattern = null; switch (isoGuidancePattern.GuidancePatternType) { case ISOGuidancePatternType.AB: pattern = new AbLine(); break; case ISOGuidancePatternType.APlus: pattern = new APlus(); break; case ISOGuidancePatternType.Curve: pattern = new AbCurve(); break; case ISOGuidancePatternType.Pivot: pattern = new PivotGuidancePattern(); break; case ISOGuidancePatternType.Spiral: pattern = new Spiral(); break; } //ID ImportIDs(pattern.Id, isoGuidancePattern.GuidancePatternId); pattern.Description = isoGuidancePattern.GuidancePatternDesignator; pattern.GuidancePatternType = ImportGuidancePatternType(isoGuidancePattern.GuidancePatternType); pattern.PropagationDirection = ImportPropagationDirection(isoGuidancePattern.PropagationDirection); pattern.Extension = ImportExtension(isoGuidancePattern.Extension); //Heading if (isoGuidancePattern.Heading.HasValue) { double heading = Convert.ToDouble(isoGuidancePattern.Heading.Value); if (pattern is AbLine) { (pattern as AbLine).Heading = heading; } if (pattern is AbCurve) { (pattern as AbCurve).Heading = heading; } if (pattern is APlus) { (pattern as APlus).Heading = heading; } } pattern.GpsSource = new GpsSource(); pattern.GpsSource.SourceType = ImportGNSSMethod(isoGuidancePattern.GNSSMethod); pattern.GpsSource.HorizontalAccuracy = GetAccuracy(isoGuidancePattern.HorizontalAccuracy); pattern.GpsSource.VerticalAccuracy = GetAccuracy(isoGuidancePattern.VerticalAccuracy); pattern.NumbersOfSwathsLeft = (int?)(isoGuidancePattern.NumberOfSwathsLeft); pattern.NumbersOfSwathsRight = (int?)(isoGuidancePattern.NumberOfSwathsRight); pattern.OriginalEpsgCode = isoGuidancePattern.OriginalSRID; return(pattern); }
public ISOLineString ExportGuidancePattern(GuidancePattern adaptGuidancePattern) { ISOLineString lineString = new ISOLineString(TaskDataMapper.Version); lineString.LineStringType = ISOLineStringType.GuidancePattern; PointMapper pointMapper = new PointMapper(TaskDataMapper); List <Point> adaptPoints; switch (adaptGuidancePattern.GuidancePatternType) { case GuidancePatternTypeEnum.AbCurve: AbCurve curve = adaptGuidancePattern as AbCurve; adaptPoints = curve.Shape[0].Points; //Only first linestring used. break; case GuidancePatternTypeEnum.AbLine: AbLine abLine = adaptGuidancePattern as AbLine; adaptPoints = new List <Point>(); adaptPoints.Add(abLine.A); adaptPoints.Add(abLine.B); break; case GuidancePatternTypeEnum.APlus: APlus aPlus = adaptGuidancePattern as APlus; adaptPoints = new List <Point>(); adaptPoints.Add(aPlus.Point); break; case GuidancePatternTypeEnum.CenterPivot: PivotGuidancePattern pivot = adaptGuidancePattern as PivotGuidancePattern; adaptPoints = new List <Point>(); lineString.Points.Add(pointMapper.ExportPoint(pivot.Center, ISOPointType.GuidanceReferenceCenter)); if (pivot.DefinitionMethod == PivotGuidanceDefinitionEnum.PivotGuidancePatternStartEndCenter && pivot.StartPoint != null && pivot.EndPoint != null) { adaptPoints.Add(pivot.StartPoint); adaptPoints.Add(pivot.EndPoint); } break; case GuidancePatternTypeEnum.Spiral: Spiral spiral = adaptGuidancePattern as Spiral; adaptPoints = spiral.Shape.Points; break; default: return(null); } for (int i = 0; i < adaptPoints.Count; i++) { ISOPointType pointType = i == 0 ? ISOPointType.GuidanceReferenceA : (i == adaptPoints.Count - 1 ? ISOPointType.GuidanceReferenceB : ISOPointType.GuidancePoint); lineString.Points.Add(pointMapper.ExportPoint(adaptPoints[i], pointType)); } return(lineString); }