Exemple #1
0
        private Geometry GetPolygon(MultiSurfaceType multi)
        {
            var p = new Polygon[multi.SurfaceMemberItems.Count];

            int npoly = 0;

            foreach (SurfacePropertyType member in multi.SurfaceMemberItems)
            {
                LinearRing  shell = null;
                PolygonType sur   = ExtractShellPolygon(ref shell, member);

                if (sur.Interior.Count == 0 && shell != null)
                {
                    p[npoly] = new Polygon(shell);
                }
                else
                {
                    var holes = new LinearRing[sur.Interior.Count];
                    ExtractInteriorPolygon(holes, sur);
                    p[npoly] = new Polygon(shell, holes);
                }

                npoly++;
            }

            return(new MultiPolygon(p));
        }
Exemple #2
0
        public static MultiPolygon ToGeometry(this MultiSurfaceType gmlMultiSurface)
        {
            List <Polygon> polygons = new List <Polygon>();

            if (gmlMultiSurface.surfaceMember != null)
            {
                foreach (var member in gmlMultiSurface.surfaceMember)
                {
                    if (member.Item is PolygonType)
                    {
                        polygons.Add(((PolygonType)member.Item).ToGeometry());
                        continue;
                    }

                    throw new NotImplementedException();
                }
            }

            if (gmlMultiSurface.surfaceMembers != null)
            {
                foreach (var member in gmlMultiSurface.surfaceMembers.Items)
                {
                    if (member is PolygonType)
                    {
                        polygons.Add(((PolygonType)member).ToGeometry());
                        continue;
                    }

                    throw new NotImplementedException();
                }
            }

            return(new MultiPolygon(polygons));
        }
        public static MultiSurfaceType ToGmlMultiSurface(this MultiPolygon multiPolygon)
        {
            MultiSurfaceType gmlMultiSurface = new MultiSurfaceType();

            gmlMultiSurface.surfaceMembers = multiPolygon.Polygons.Select <Polygon, PolygonType>(p => p.ToGmlPolygon()).ToArray();

            return(gmlMultiSurface);
        }
Exemple #4
0
        private IFeature ExtractGeographicData(XmlNode c)
        {
            string   geoData = string.Empty;
            Geometry geo     = null;

            if (_typeGeometry == FeatureType.Point)
            {
                foreach (XmlNode e in c)
                {
                    if (e.LocalName == Geometry)
                    {
                        geoData = e.InnerText;
                    }
                }

                string point      = Convert.ToString(geoData);
                var    pointValue = point.Split(' ');
                geo = new Point(
                    Convert.ToDouble(pointValue[0], CultureInfo.InvariantCulture),
                    Convert.ToDouble(pointValue[1], CultureInfo.InvariantCulture));
            }

            if (_typeGeometry == FeatureType.Polygon)
            {
                foreach (XmlNode e in c)
                {
                    if (e.LocalName == Geometry)
                    {
                        var t = e.FirstChild.OuterXml;
                        var s = new XmlSerializer(typeof(MultiSurfaceType));
                        MultiSurfaceType multi = s.Deserialize(new StringReader(t)) as MultiSurfaceType;
                        geo = GetPolygon(multi);

                        // geoData = e.InnerText;
                    }
                }
            }

            if (_typeGeometry == FeatureType.Line)
            {
                foreach (XmlNode e in c)
                {
                    if (e.LocalName == Geometry)
                    {
                        var t = e.FirstChild.OuterXml;
                        var s = new XmlSerializer(typeof(MultiLineStringType));
                        MultiLineStringType multi = s.Deserialize(new StringReader(t)) as MultiLineStringType;
                        geo = GetPolyline(multi);

                        // geoData = e.InnerText;
                    }
                }
            }

            IFeature feat = Fea.AddFeature(geo);

            return(feat);
        }
Exemple #5
0
        public static MultiSurfaceType ToGmlMultiSurface(this MultiPolygon multiPolygon)
        {
            MultiSurfaceType gmlMultiSurface = new MultiSurfaceType();

            gmlMultiSurface.surfaceMembers       = new SurfaceArrayPropertyType();
            gmlMultiSurface.surfaceMembers.Items = multiPolygon.Coordinates.Select <Polygon, PolygonType>(p => p.ToGmlPolygon()).ToArray();

            return(gmlMultiSurface);
        }
Exemple #6
0
        private IBasicGeometry GetPolygon(MultiSurfaceType multi)
        {
            Polygon[] p = new Polygon[multi.SurfaceMemberItems.Count];
                ;
           
            int npoly = 0;
            foreach (SurfacePropertyType member in multi.SurfaceMemberItems)
            {
                ILinearRing shell = null;
                ILinearRing[] holes = null;
                PolygonType sur = ExtractShellPolygon(ref shell, member);

                if (sur.Interior.Count == 0  && shell !=null)
                        p[npoly] = new Polygon(shell);
                else
                {
                    holes = new ILinearRing[sur.Interior.Count];
                    ExtractInteriorPolygon(holes, sur);
                    p[npoly] = new Polygon(shell, holes);
                }
                npoly++;
            }
            return new MultiPolygon(p);

        }
        public static MultiSurfaceType ToGmlMultiSurface(this MultiPolygon multiPolygon)
        {
            MultiSurfaceType gmlMultiSurface = new MultiSurfaceType();
            gmlMultiSurface.surfaceMembers = multiPolygon.Polygons.Select<Polygon, PolygonType>(p => p.ToGmlPolygon()).ToArray();

            return gmlMultiSurface;
        }