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)); }
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); }
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); }
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); }
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; }