예제 #1
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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));
        }
예제 #6
0
        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;
        }
예제 #7
0
        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;
        }