public ISOLineString ExportLinearRing(LinearRing ring, ISOLineStringType lsgType) { ISOLineString lineString = new ISOLineString(); lineString.LineStringType = lsgType; ISOPointType pointType = ISOPointType.Other; switch (lsgType) { case ISOLineStringType.PolygonExterior: case ISOLineStringType.PolygonInterior: pointType = ISOPointType.PartfieldReference; break; case ISOLineStringType.GuidancePattern: pointType = ISOPointType.GuidancePoint; break; case ISOLineStringType.Flag: pointType = ISOPointType.Flag; break; case ISOLineStringType.Obstacle: pointType = ISOPointType.Obstacle; break; } PointMapper pointMapper = new PointMapper(TaskDataMapper); lineString.Points = pointMapper.ExportPoints(ring.Points, pointType).ToList(); return(lineString); }
/// <summary> /// Returns an ADAPT Polygon for ISOPolygons describing field points of interest. Null otherwise /// </summary> /// <param name="isoPolygon"></param> /// <returns></returns> public AttributeShape ImportAttributePolygon(ISOPolygon isoPolygon) { Polygon boundaryPolygon = ImportBoundaryPolygon(isoPolygon, false)?.FirstOrDefault(); if (boundaryPolygon != null && IsFieldAttributeType(isoPolygon)) { //The data has defined an explicit PLN type that maps to an attribute type return(new AttributeShape() { Shape = boundaryPolygon, TypeName = Enum.GetName(typeof(ISOPolygonType), isoPolygon.PolygonType), Name = isoPolygon.PolygonDesignator }); } else if (isoPolygon.LineStrings.Count == 1) { //If no linestrings defined as interior/exterior, we expect only 1 linestring ISOLineString attributeLsg = isoPolygon.LineStrings.FirstOrDefault(ls => LineStringMapper.IsFieldAttributeType(ls)); if (attributeLsg != null) { LineStringMapper lsgMapper = new LineStringMapper(TaskDataMapper); Polygon polygon = new Polygon() { ExteriorRing = lsgMapper.ImportLinearRing(attributeLsg) }; return(new AttributeShape() { Shape = polygon, TypeName = Enum.GetName(typeof(ISOPolygonType), isoPolygon.PolygonType), Name = isoPolygon.PolygonDesignator }); } } return(null); //This polygon does not map to an InteriorBoundaryAttribute. }
public LineString ImportLineString(ISOLineString isoLineString) { LineString lineString = new LineString(); PointMapper pointMapper = new PointMapper(TaskDataMapper); lineString.Points = pointMapper.ImportPoints(isoLineString.Points).ToList(); return(lineString); }
internal static bool IsFieldAttributeType(ISOLineString isoLineString) { return(isoLineString.LineStringType == ISOLineStringType.Drainage || isoLineString.LineStringType == ISOLineStringType.Fence || isoLineString.LineStringType == ISOLineStringType.Flag || isoLineString.LineStringType == ISOLineStringType.Obstacle || isoLineString.LineStringType == ISOLineStringType.SamplingRoute || isoLineString.LineStringType == ISOLineStringType.TramLine); }
public IEnumerable <ISOLineString> ExportLinearRings(IEnumerable <LinearRing> adaptRings, ISOLineStringType lsgType) { List <ISOLineString> lineStrings = new List <ISOLineString>(); foreach (LinearRing ring in adaptRings) { ISOLineString lineString = ExportLinearRing(ring, lsgType); lineStrings.Add(lineString); } return(lineStrings); }
public AttributeShape ImportAttributeLineString(ISOLineString isoLineString) { if (IsFieldAttributeType(isoLineString)) { return(new AttributeShape() { Shape = ImportLineString(isoLineString), TypeName = Enum.GetName(typeof(ISOLineStringType), isoLineString.LineStringType), Name = isoLineString.LineStringDesignator }); } return(null); }
public Polygon ImportPolygon(ISOPolygon isoPolygon) { Polygon polygon = new Polygon(); LineStringMapper lsgMapper = new LineStringMapper(TaskDataMapper); ISOLineString exterior = isoPolygon.LineStrings.FirstOrDefault(l => l.LineStringType == ISOLineStringType.PolygonExterior); if (exterior != null) { polygon.ExteriorRing = lsgMapper.ImportLinearRing(exterior); } polygon.InteriorRings = new List <LinearRing>(); polygon.InteriorRings.AddRange(lsgMapper.ImportLinearRings(isoPolygon.LineStrings.Where(l => l.LineStringType == ISOLineStringType.PolygonInterior))); return(polygon); }
public ISOLineString ExportLinearRing(LinearRing ring, ISOLineStringType lsgType) { ISOLineString lineString = new ISOLineString(TaskDataMapper.Version); lineString.LineStringType = lsgType; ISOPointType pointType = ISOPointType.Other; if (TaskDataMapper.Version > 3) { switch (lsgType) { case ISOLineStringType.PolygonExterior: case ISOLineStringType.PolygonInterior: pointType = ISOPointType.PartfieldReference; break; case ISOLineStringType.GuidancePattern: pointType = ISOPointType.GuidancePoint; break; case ISOLineStringType.Flag: pointType = ISOPointType.Flag; break; case ISOLineStringType.Obstacle: pointType = ISOPointType.Obstacle; break; } } else if (lineString.LineStringType == ISOLineStringType.Flag) { //Flag & Other (default) are the only 2 options for version 3 pointType = ISOPointType.Flag; } PointMapper pointMapper = new PointMapper(TaskDataMapper); lineString.Points = pointMapper.ExportPoints(ring.Points, pointType).ToList(); return(lineString); }
/// <summary> /// Returns an ADAPT Polygon for ISOPolygons defined with Exterior/Interior rings. Null otherwise /// </summary> /// <param name="isoPolygon"></param> /// <returns></returns> public Polygon ImportBoundaryPolygon(ISOPolygon isoPolygon) { if (IsFieldAttributeType(isoPolygon)) { //Polygon is defined as an area of interest and not a PFD/TZN boundary, etc. return(null); } ISOLineString exteriorRing = isoPolygon.LineStrings.FirstOrDefault(l => l.LineStringType == ISOLineStringType.PolygonExterior); IEnumerable <ISOLineString> interiorRings = isoPolygon.LineStrings.Where(l => l.LineStringType == ISOLineStringType.PolygonInterior); if (exteriorRing != null || interiorRings.Any()) { Polygon polygon = new Polygon(); LineStringMapper lsgMapper = new LineStringMapper(TaskDataMapper); if (exteriorRing != null) { polygon.ExteriorRing = lsgMapper.ImportLinearRing(exteriorRing); } polygon.InteriorRings = lsgMapper.ImportLinearRings(interiorRings).ToList(); return(polygon); } return(null); }
/// <summary> /// Returns an ADAPT Polygon for ISOPolygons defined with Exterior/Interior rings. Null otherwise /// </summary> /// <param name="isoPolygon"></param> /// <returns></returns> public IEnumerable <Polygon> ImportBoundaryPolygon(ISOPolygon isoPolygon, bool isVersion3Multipolygon) { if (IsFieldAttributeType(isoPolygon)) { //Polygon is defined as an area of interest and not a PFD/TZN boundary, etc. return(null); } LineStringMapper lsgMapper = new LineStringMapper(TaskDataMapper); List <Polygon> output = new List <Polygon>(); if (isVersion3Multipolygon) { //Version 3 only allowed one polygon for the boundary with multiple external linestrings acting as individual polygons foreach (ISOLineString ls in isoPolygon.LineStrings) { if (ls.LineStringType == ISOLineStringType.PolygonExterior) { Polygon polygon = new Polygon { ExteriorRing = lsgMapper.ImportLinearRing(ls) }; if (isoPolygon.PolygonDesignator != null) { polygon.ContextItems.Add(new ContextItem() { Code = "Pr_ISOXML_Attribute_Designator", Value = isoPolygon.PolygonDesignator }); } output.Add(polygon); } else if (ls.LineStringType == ISOLineStringType.PolygonInterior) { //We will interpret any interior linestrings as belonging to the preceeding external linestring output.Last().InteriorRings.Add(lsgMapper.ImportLinearRing(ls)); } } } else { //Normal Polygon behavior with only one possible exterior ring. ISOLineString exteriorRing = isoPolygon.LineStrings.FirstOrDefault(l => l.LineStringType == ISOLineStringType.PolygonExterior); IEnumerable <ISOLineString> interiorRings = isoPolygon.LineStrings.Where(l => l.LineStringType == ISOLineStringType.PolygonInterior); if (exteriorRing != null || interiorRings.Any()) { Polygon polygon = new Polygon(); if (exteriorRing != null) { polygon.ExteriorRing = lsgMapper.ImportLinearRing(exteriorRing); } polygon.InteriorRings = lsgMapper.ImportLinearRings(interiorRings).ToList(); if (isoPolygon.PolygonDesignator != null) { polygon.ContextItems.Add(new ContextItem() { Code = "Pr_ISOXML_Attribute_Designator", Value = isoPolygon.PolygonDesignator }); } output.Add(polygon); } } return(output); }
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); }