Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        private void ProcessAbCurve(AbCurve abCurve)
        {
            var delta = _drawingUtil.GetDelta();

            foreach (var lineString in abCurve.Shape)
            {
                ProcessLineString(lineString, delta);
            }
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
 private static void WriteAbCurve(XmlWriter writer, AbCurve abCurve)
 {
     ShapeWriter.WriteLine(writer, abCurve.Shape[0], "5");
 }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }