public static PolygonType ToGmlPolygon(this Polygon polygon) { PolygonType gmlPolygon = new PolygonType(); if (polygon.LineStrings.Count > 0) { gmlPolygon.exterior = new AbstractRingPropertyType(); if (!polygon.LineStrings[0].IsClosed()) { polygon.LineStrings[0].Positions.Add(polygon.LineStrings[0].Positions[0]); } gmlPolygon.exterior.Item = ToGmlLinearRing(polygon.LineStrings[0]); if (polygon.LineStrings.Count > 1) { var interiors = new List <AbstractRingPropertyType>(); foreach (var lineString in polygon.LineStrings.Take(1)) { var interior = new AbstractRingPropertyType(); if (!lineString.IsClosed()) { lineString.Positions.Add(lineString.Positions[0]); } interior.Item = ToGmlLinearRing(lineString); interiors.Add(interior); } gmlPolygon.interior = interiors.ToArray(); } } return(gmlPolygon); }
public static PolygonType ToGmlPolygon(this Polygon polygon) { PolygonType gmlPolygon = new PolygonType(); if (polygon.LineStrings.Count > 0) { var exterior = new AbstractRingPropertyType(); gmlPolygon.Item = exterior; gmlPolygon.ItemElementName = ItemChoiceType5.exterior; if (!polygon.LineStrings[0].IsClosed()) { polygon.LineStrings[0].Positions.Add(polygon.LineStrings[0].Positions[0]); } exterior.Item = ToGmlLinearRing(polygon.LineStrings[0]); if (polygon.LineStrings.Count > 1) { var interiors = new List <AbstractRingPropertyType>(); foreach (var lineString in polygon.LineStrings.Take(1)) { var interior = new AbstractRingPropertyType(); if (!lineString.IsClosed()) { lineString.Positions.Add(lineString.Positions[0]); } exterior.Item = ToGmlLinearRing(lineString); interiors.Add(interior); } gmlPolygon.Items1 = interiors.ToArray(); gmlPolygon.Items1ElementName = interiors.Select <AbstractRingPropertyType, Items1ChoiceType3>(int1 => Items1ChoiceType3.interior).ToArray(); } } return(gmlPolygon); }
public static PolygonType ToGmlPolygon(this Polygon polygon) { PolygonType gmlPolygon = new PolygonType(); if (polygon.Coordinates.Count > 0) { gmlPolygon.exterior = new AbstractRingPropertyType(); if (!polygon.Coordinates.Any(ls => !ls.IsClosed())) { polygon = ClosePolygon(polygon); } gmlPolygon.exterior.Item = ToGmlLinearRing(polygon.Coordinates[0]); if (polygon.Coordinates.Count > 1) { var interiors = new List <AbstractRingPropertyType>(); foreach (var lineString in polygon.Coordinates.Take(1)) { var interior = new AbstractRingPropertyType(); interior.Item = ToGmlLinearRing(lineString); interiors.Add(interior); } gmlPolygon.interior = interiors.ToArray(); } } return(gmlPolygon); }
public static PolygonType ToGmlPolygon(this Polygon poly) { Polygon polygon = poly; PolygonType gmlPolygon = new PolygonType(); if (polygon.Coordinates.Count > 0) { var exterior = new AbstractRingPropertyType(); gmlPolygon.Item = exterior; gmlPolygon.ItemElementName = ItemChoiceType5.exterior; if (!polygon.Coordinates.Any(ls => !ls.IsClosed())) { polygon = ClosePolygon(polygon); } exterior.Item = ToGmlLinearRing(polygon.Coordinates[0]); if (polygon.Coordinates.Count > 1) { var interiors = new List <AbstractRingPropertyType>(); foreach (var lineString in polygon.Coordinates.Skip(1)) { var interior = new AbstractRingPropertyType(); interior.Item = ToGmlLinearRing(lineString); interiors.Add(interior); } gmlPolygon.Items1 = interiors.ToArray(); gmlPolygon.Items1ElementName = interiors.Select <AbstractRingPropertyType, Items1ChoiceType3>(int1 => Items1ChoiceType3.interior).ToArray(); } } return(gmlPolygon); }
public static Polygon ToGeometry(this PolygonType gmlPolygon) { List <LineString> polygon = new List <LineString>(); LineString ls = null; if (gmlPolygon.exterior != null) { AbstractRingPropertyType arpt = (AbstractRingPropertyType)gmlPolygon.exterior; if (arpt.Item is LinearRingType) { ls = ((LinearRingType)arpt.Item).ToGeometry(); if (ls.Positions.Count < 4 || !ls.IsClosed()) { throw new InvalidFormatException("invalid GML representation: polygon outer is not a closed ring of minimum 4 positions"); } } } if (ls == null) { throw new InvalidFormatException("invalid GML representation: polygon outer is empty"); } polygon.Add(ls); if (gmlPolygon.interior != null) { foreach (AbstractRingPropertyType arpt in gmlPolygon.interior) { if (arpt.Item is LinearRingType) { ls = ((LinearRingType)arpt.Item).ToGeometry(); if (ls.Positions.Count < 4 || !ls.IsClosed()) { throw new InvalidFormatException("invalid GML representation: polygon inner is not a closed ring of minimum 4 positions"); } } polygon.Add(ls); } } return(new Polygon(polygon)); }
public static PolygonType ToGmlPolygon(this Polygon polygon) { PolygonType gmlPolygon = new PolygonType(); if (polygon.LineStrings.Count > 0) { var exterior = new AbstractRingPropertyType(); gmlPolygon.Item = exterior; gmlPolygon.ItemElementName = ItemChoiceType5.exterior; if (!polygon.LineStrings[0].IsClosed()) { polygon.LineStrings[0].Positions.Add(polygon.LineStrings[0].Positions[0]); } exterior.Item = ToGmlLinearRing(polygon.LineStrings[0]); if (polygon.LineStrings.Count > 1) { var interiors = new List<AbstractRingPropertyType>(); foreach (var lineString in polygon.LineStrings.Take(1)) { var interior = new AbstractRingPropertyType(); if (!lineString.IsClosed()) { lineString.Positions.Add(lineString.Positions[0]); } exterior.Item = ToGmlLinearRing(lineString); interiors.Add(interior); } gmlPolygon.Items1 = interiors.ToArray(); gmlPolygon.Items1ElementName = interiors.Select<AbstractRingPropertyType, Items1ChoiceType3>(int1 => Items1ChoiceType3.interior).ToArray(); } } return gmlPolygon; }
public static PolygonType ToGmlPolygon(this Polygon polygon) { PolygonType gmlPolygon = new PolygonType(); if (polygon.LineStrings.Count > 0) { gmlPolygon.exterior = new AbstractRingPropertyType(); if (!polygon.LineStrings[0].IsClosed()) { polygon.LineStrings[0].Positions.Add(polygon.LineStrings[0].Positions[0]); } gmlPolygon.exterior.Item = ToGmlLinearRing(polygon.LineStrings[0]); if (polygon.LineStrings.Count > 1) { var interiors = new List<AbstractRingPropertyType>(); foreach (var lineString in polygon.LineStrings.Take(1)) { var interior = new AbstractRingPropertyType(); if (!lineString.IsClosed()) { lineString.Positions.Add(lineString.Positions[0]); } interior.Item = ToGmlLinearRing(lineString); interiors.Add(interior); } gmlPolygon.interior = interiors.ToArray(); } } return gmlPolygon; }