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 BeginGeography(OpenGisGeographyType type)
		{
			if (_geomCollection == null)
			{
				_geomCollection = new SinkGeometryCollection<OpenGisGeographyType>(type);
			}

			_currentGeometry = new SinkGeometry<OpenGisGeographyType>(type);
		}
		private IGeometryObject GeometryFromSinkGeometryCollection(SinkGeometryCollection<OpenGisGeographyType> sinkCollection)
		{

			IGeometryObject _geometry = null;

			switch (sinkCollection.GeometryType)
			{
				case OpenGisGeographyType.Point:
					_geometry = ConstructGeometryPart(sinkCollection[0]);
					((Point)_geometry).BoundingBoxes = this.BoundingBox;
					break;
				case OpenGisGeographyType.MultiPoint:
					_geometry = new MultiPoint(sinkCollection.Skip(1)
																										.Select(g => (Point)ConstructGeometryPart(g))
																										.ToList());
					((MultiPoint)_geometry).BoundingBoxes = this.BoundingBox;
					break;
				case OpenGisGeographyType.LineString:
					_geometry = ConstructGeometryPart(sinkCollection[0]);
					((LineString)_geometry).BoundingBoxes = this.BoundingBox;
					break;
				case OpenGisGeographyType.MultiLineString:
					_geometry = new MultiLineString(sinkCollection.Skip(1)
																												.Select(g => (LineString)ConstructGeometryPart(g))
																												.ToList());
					((MultiLineString)_geometry).BoundingBoxes = this.BoundingBox;
					break;
				case OpenGisGeographyType.Polygon:
					_geometry = ConstructGeometryPart(sinkCollection.First());
					((Polygon)_geometry).BoundingBoxes = this.BoundingBox;
					break;
				case OpenGisGeographyType.MultiPolygon:
					_geometry = new MultiPolygon(sinkCollection.Skip(1)
																												.Select(g => (Polygon)ConstructGeometryPart(g))
																												.ToList());
					((MultiPolygon)_geometry).BoundingBoxes = this.BoundingBox;
					break;
				default:
					throw new NotSupportedException("Geometry type " + sinkCollection.GeometryType.ToString() + " is not possible in GetConstructedGeometry.");
			}

			return _geometry;

		}