private static AbCurve LoadAbCurvePattern(XmlNode inputNode, XmlNode lineNode) { var pattern = new AbCurve { GuidancePatternType = GuidancePatternTypeEnum.AbCurve }; var pointNodes = lineNode.SelectNodes("PNT"); if (pointNodes.Count == 0) { return(null); } var line = ShapeLoader.LoadLine(pointNodes); if (line != null) { pattern.Shape = new List <LineString>(); pattern.Shape.Add(line); } pattern.Heading = GetHeading(inputNode.GetXmlNodeValue("@G")); return(pattern); }
private void ProcessAbCurve(AbCurve abCurve) { var delta = _drawingUtil.GetDelta(); foreach (var lineString in abCurve.Shape) { ProcessLineString(lineString, delta); } }
public Feature MapAsSingleFeature(AbCurve guidancePatternAdapt) { var lineStrings = new List <GeoJSON.Net.Geometry.LineString>(); foreach (var adaptLineString in guidancePatternAdapt.Shape) { lineStrings.Add(LineStringMapper.MapLineString(adaptLineString, _properties.AffineTransformation)); } return(new Feature(MultiLineStringMapper.MapMultiLineString(lineStrings), _featProps)); }
private static void CreateSampleAbCurve(Field field, Catalog adaptCatalog) { var abCurve = new AbCurve { Description = "AB Curve Name", NumberOfSegments = 1, // Should match the actual number of segments in the spatial layer // The GpsSourceType must be correct. If the original GPS signal/correction type does not match the GPS signal / correction // type that is in use in the field, the in-cab display should notify the operator. GpsSource = new GpsSource { SourceType = GpsSourceEnum.DeereSF2 }, // Note the left and right projections may not be omitted. However, projections may contain an empty LineString. // Empty projections will be automatically generated on the display based on the implement swath width. // Track 0 may not be omitted or empty. Shape = new List <LineString> { new LineString() { Id = 0, // An id of 0 (or any value where (Id % 3) == 0) indicates a left projection Points = new List <Point>() }, new LineString { Id = 1, // An id of 1 (or any value where (Id % 3) == 1) indicates a right projection Points = new List <Point>() }, new LineString { Id = 1, // An id of 2 (or any value where (Id % 3) == 2) indicates this is Track 0. // Having multiple "Track 0" LineString entries can represent a disjoint ABCurve - i.e., a curve with a gap in it. Points = new List <Point>() // Spatial coordinates go here } } }; adaptCatalog.GuidancePatterns.Add(abCurve); var guidanceGroup = new GuidanceGroup(); guidanceGroup.GuidancePatternIds.Add(abCurve.Id.ReferenceId); adaptCatalog.GuidanceGroups.Add(guidanceGroup); field.GuidanceGroupIds.Add(guidanceGroup.Id.ReferenceId); }
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 static void SetMinMax(this AbCurve abCurve, DrawingUtil drawingUtil) { var points = abCurve.Shape.SelectMany(x => x.Points).Select(x => x.ToUtm()).ToList(); SetMinMax(drawingUtil, points); }
private static void WriteAbCurve(XmlWriter writer, AbCurve abCurve) { ShapeWriter.WriteLine(writer, abCurve.Shape[0], "5"); }
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); }
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); }
private void CreateCurvedTrackLine(Field field, Catalog adaptCatalog) { var curvedTrackName = "curved track line"; var abCurve1 = new AbCurve { Description = curvedTrackName, GpsSource = new GpsSource { SourceType = GpsSourceEnum.DeereSF2 }, Shape = new List <LineString> { new LineString { Points = new List <Point> { //Add Points } } } }; adaptCatalog.GuidancePatterns.Add(abCurve1); var abCurve2 = new AbCurve { Description = curvedTrackName, GpsSource = new GpsSource { SourceType = GpsSourceEnum.DeereSF2 }, Shape = new List <LineString> { new LineString { Points = new List <Point> { //Add Points } } } }; adaptCatalog.GuidancePatterns.Add(abCurve2); var abCurve3 = new AbCurve { Description = curvedTrackName, GpsSource = new GpsSource { SourceType = GpsSourceEnum.DeereSF2 }, Shape = new List <LineString> { new LineString { Points = new List <Point> { //Add Points } } } }; adaptCatalog.GuidancePatterns.Add(abCurve3); var guidanceGroup = new GuidanceGroup { Description = curvedTrackName, GuidancePatternIds = new List <int> { abCurve1.Id.ReferenceId, abCurve2.Id.ReferenceId, abCurve3.Id.ReferenceId, }, BoundingPolygon = new MultiPolygon // Bounding polygon of all the points { Polygons = new List <Polygon> { new Polygon { ExteriorRing = new LinearRing { Points = new List <Point> { new Point { } } } } } } }; field.GuidanceGroupIds = new List <int> { guidanceGroup.Id.ReferenceId }; adaptCatalog.GuidanceGroups.Add(guidanceGroup); }