/// <summary> /// This method produces instances of type <see cref="GeoAPI.Geometries.IMultiPolygon"/>. /// </summary> /// <returns>The created geometries</returns> internal override Collection <IGeometry> createGeometries() { //IMultiPolygon multiPolygon = null; IPathNode multiPolygonNode = new PathNode(_GMLNS, "MultiPolygon", (NameTable)_XmlReader.NameTable); IPathNode multiSurfaceNode = new PathNode(_GMLNS, "MultiSurface", (NameTable)_XmlReader.NameTable); IPathNode multiPolygonNodeAlt = new AlternativePathNodesCollection(multiPolygonNode, multiSurfaceNode); IPathNode polygonMemberNode = new PathNode(_GMLNS, "polygonMember", (NameTable)_XmlReader.NameTable); IPathNode surfaceMemberNode = new PathNode(_GMLNS, "surfaceMember", (NameTable)_XmlReader.NameTable); IPathNode polygonMemberNodeAlt = new AlternativePathNodesCollection(polygonMemberNode, surfaceMemberNode); IPathNode linearRingNode = new PathNode(_GMLNS, "LinearRing", (NameTable)_XmlReader.NameTable); string[] labelValue = new string[1]; bool geomFound = false; try { // Reading the entire feature's node makes it possible to collect label values that may appear before or after the geometry property while ((_FeatureReader = GetSubReaderOf(_XmlReader, null, _FeatureNode)) != null) { while ( (_GeomReader = GetSubReaderOf(_FeatureReader, labelValue, multiPolygonNodeAlt, polygonMemberNodeAlt)) != null) { GeometryFactory geomFactory = new PolygonFactory(_GeomReader, _FeatureTypeInfo) { AxisOrder = AxisOrder }; var polygons = geomFactory.createGeometries(); var polygonArray = new IPolygon[polygons.Count]; var i = 0; foreach (IPolygon polygon in polygons) { polygonArray[i++] = polygon; } _Geoms.Add(Factory.CreateMultiPolygon(polygonArray)); geomFound = true; } if (geomFound) { AddLabel(labelValue[0], _Geoms[_Geoms.Count - 1]); } geomFound = false; } } catch (Exception ex) { Trace.TraceError("An exception occured while parsing a multi-polygon geometry: " + ex.Message); throw ex; } return(_Geoms); }
/// <summary> /// This method produces instances of type <see cref="GeoAPI.Geometries.IMultiPolygon"/>. /// </summary> /// <returns>The created geometries</returns> internal override Collection<IGeometry> createGeometries() { //IMultiPolygon multiPolygon = null; IPathNode multiPolygonNode = new PathNode(_GMLNS, "MultiPolygon", (NameTable) _XmlReader.NameTable); IPathNode multiSurfaceNode = new PathNode(_GMLNS, "MultiSurface", (NameTable) _XmlReader.NameTable); IPathNode multiPolygonNodeAlt = new AlternativePathNodesCollection(multiPolygonNode, multiSurfaceNode); IPathNode polygonMemberNode = new PathNode(_GMLNS, "polygonMember", (NameTable) _XmlReader.NameTable); IPathNode surfaceMemberNode = new PathNode(_GMLNS, "surfaceMember", (NameTable) _XmlReader.NameTable); IPathNode polygonMemberNodeAlt = new AlternativePathNodesCollection(polygonMemberNode, surfaceMemberNode); IPathNode linearRingNode = new PathNode(_GMLNS, "LinearRing", (NameTable) _XmlReader.NameTable); string[] labelValue = new string[1]; bool geomFound = false; try { // Reading the entire feature's node makes it possible to collect label values that may appear before or after the geometry property while ((_FeatureReader = GetSubReaderOf(_XmlReader, null, _FeatureNode)) != null) { while ( (_GeomReader = GetSubReaderOf(_FeatureReader, labelValue, multiPolygonNodeAlt, polygonMemberNodeAlt)) != null) { GeometryFactory geomFactory = new PolygonFactory(_GeomReader, _FeatureTypeInfo); var polygons = geomFactory.createGeometries(); var polygonArray = new IPolygon[polygons.Count]; var i = 0; foreach (IPolygon polygon in polygons) polygonArray[i++] = polygon; _Geoms.Add(Factory.CreateMultiPolygon(polygonArray)); geomFound = true; } if (geomFound) AddLabel(labelValue[0], _Geoms[_Geoms.Count - 1]); geomFound = false; } } catch (Exception ex) { Trace.TraceError("An exception occured while parsing a multi-polygon geometry: " + ex.Message); throw ex; } return _Geoms; }