public void BeginGeography(OpenGisGeographyType type) { if (_geomCollection == null) { _geomCollection = new SinkGeometryCollection<OpenGisGeographyType>(type); if (type == OpenGisGeographyType.GeometryCollection) { _isGeometryCollection = true; } } _currentGeometry = new SinkGeometry<OpenGisGeographyType>(type); if (_isGeometryCollection && _nestLevel > 0) { if (_nestLevel == 1) { _geomCollection.SubItems.Add(new SinkGeometryCollection<OpenGisGeographyType>(type)); } _geomCollection.SubItems.Last().Add(_currentGeometry); } else { _geomCollection.Add(_currentGeometry); } _nestLevel++; }
public void EndGeography() { if (_currentGeometry == null) return; _geomCollection.Add(_currentGeometry); _currentGeometry = null; }
public void BeginGeography(OpenGisGeographyType type) { if (_geomCollection == null) { _geomCollection = new SinkGeometryCollection<OpenGisGeographyType>(type); } _currentGeometry = new SinkGeometry<OpenGisGeographyType>(type); }
public void EndGeography() { _nestLevel--; _currentGeometry = null; }
private IGeometryObject ConstructGeometryPart(SinkGeometry<OpenGisGeographyType> geomPart) { IGeometryObject geometry = null; switch (geomPart.GeometryType) { case OpenGisGeographyType.Point: geometry = new Point(geomPart[0][0]); break; case OpenGisGeographyType.MultiPoint: MultiPoint mp = new MultiPoint(geomPart.Select(g => new Point(g[0])).ToList()); geometry = mp; break; case OpenGisGeographyType.LineString: geometry = new LineString(geomPart[0]); break; case OpenGisGeographyType.MultiLineString: geometry = new MultiLineString(geomPart.Select(line => new LineString(line)) .ToList() ); break; case OpenGisGeographyType.Polygon: geometry = new Polygon(geomPart.Select(line => new LineString(line)) .ToList() ); break; default: throw new NotSupportedException("Geometry type " + geomPart.GeometryType.ToString() + " is not supported yet."); } return geometry; }