public static SMGeometry ToSharpMapGeometry(SqlGeometry geometry, Factory factory)
        {
            if (geometry == null)
            {
                return(null);
            }
            if (geometry.IsNull)
            {
                return(null);
            }

            var fact = factory ?? Services.CreateGeometryFactory((int)geometry.STSrid);

            if (geometry.STIsEmpty())
            {
                return(fact.CreateGeometryCollection(null));
            }

            if (!geometry.STIsValid())
            {
                geometry = geometry.MakeValid();
            }

            OpenGisGeometryType geometryType = (OpenGisGeometryType)Enum.Parse(typeof(OpenGisGeometryType), (string)geometry.STGeometryType());

            switch (geometryType)
            {
            case OpenGisGeometryType.Point:
                return(SqlGeometryToSharpMapPoint(geometry, fact));

            case OpenGisGeometryType.LineString:
                return(SqlGeometryToSharpMapLineString(geometry, fact));

            case OpenGisGeometryType.Polygon:
                return(SqlGeometryToSharpMapPolygon(geometry, fact));

            case OpenGisGeometryType.MultiPoint:
                return(SqlGeometryToSharpMapMultiPoint(geometry, fact));

            case OpenGisGeometryType.MultiLineString:
                return(SqlGeometryToSharpMapMultiLineString(geometry, fact));

            case OpenGisGeometryType.MultiPolygon:
                return(SqlGeometryToSharpMapMultiPolygon(geometry, fact));

            case OpenGisGeometryType.GeometryCollection:
                return(SqlGeometryToSharpMapGeometryCollection(geometry, fact));
            }
            throw new ArgumentException(string.Format("Cannot convert SqlServer '{0}' to Sharpmap.Geometry", geometry.STGeometryType()), "geometry");
        }
 public void SetSrid(int srid)
 {
     _srid    = srid;
     _factory = _geometryServices.CreateGeometryFactory(_srid);
 }