Example #1
0
        /// <summary>
        /// Creates an instance of SpatiaLite provider
        /// </summary>
        /// <param name="connectionStr">Connection String to SQLite database file
        /// ("http://www.connectionstrings.com/sqlite")</param>
        /// <param name="tablename">Name of the table with geometry information</param>
        /// <param name="geometryColumnName">Name of the desired geometry column</param>
        /// <param name="oidColumnName">Name of the object Id column</param>
        public SpatiaLite(string connectionStr, string tablename, string geometryColumnName, string oidColumnName)
        {
            ConnectionString = connectionStr;
            Table            = tablename;
            GeometryColumn   = geometryColumnName; //Name of column to store geometry
            ObjectIdColumn   = oidColumnName;      //Name of object ID column

            try
            {
                using (SQLiteConnection cn = new SQLiteConnection(connectionStr))
                {
                    cn.Open();
                    SQLiteCommand cm = new SQLiteCommand(
                        String.Format(
                            "SELECT srid, spatial_index_enabled FROM geometry_columns WHERE(f_table_name='{0}' AND f_geometry_column='{1}');",
                            tablename, geometryColumnName), cn);
                    SQLiteDataReader dr = cm.ExecuteReader();
                    if (dr.HasRows)
                    {
                        dr.Read();
                        _srid = dr.GetInt32(0);

                        switch (dr.GetInt32(1))
                        {
                        case 1:     //RTree
                            String indexName   = string.Format(@"idx_{0}_{1}", tablename, geometryColumnName);
                            String whereClause = @"xmin < {0} AND xmax > {1} AND ymin < {2} AND ymax > {3}";
                            _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT pkid FROM {0} WHERE {1})", indexName, whereClause);
                            _spatiaLiteIndex       = SpatiaLiteIndex.RTree;
                            _useSpatialIndex       = true;
                            break;

                        case 2:     //MBRCache
                            indexName              = string.Format(@"cache_{0}_{1}", tablename, geometryColumnName);
                            whereClause            = "mbr=FilterMbrIntersects({1}, {3}, {0}, {2})";
                            _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT ROWID FROM {0} WHERE {1})", indexName, whereClause);
                            _spatiaLiteIndex       = SpatiaLiteIndex.MbrCache;
                            _useSpatialIndex       = true;
                            break;
                        }
                    }
                    dr.Close();
                }
            }
            catch (Exception)
            {
                _srid            = -1;
                _spatiaLiteIndex = SpatiaLiteIndex.None;
                _useSpatialIndex = false;
            }
        }
Example #2
0
        /// <summary>
        /// Creates an instance of SpatiaLite provider
        /// </summary>
        /// <param name="connectionStr">Connection String to SQLite database file 
        /// ("http://www.connectionstrings.com/sqlite")</param>
        /// <param name="tablename">Name of the table with geometry information</param>
        /// <param name="geometryColumnName">Name of the desired geometry column</param>
        /// <param name="oidColumnName">Name of the object Id column</param>
        public SpatiaLite(string connectionStr, string tablename, string geometryColumnName, string oidColumnName)
            :base(-2)
        {
            ConnectionString = connectionStr;
            Table = tablename;
            GeometryColumn = geometryColumnName; //Name of column to store geometry
            ObjectIdColumn = oidColumnName; //Name of object ID column

            try
            {
                var op = UseLike ? "LIKE" : "=";
                using (var cn = new SQLiteConnection(connectionStr))
                {
                    cn.Open();
                    var cm = new SQLiteCommand(
                        String.Format(
                            "SELECT \"srid\", \"coord_dimension\", \"spatial_index_enabled\" FROM \"geometry_columns\" WHERE(\"f_table_name\" {2} '{0}' AND \"f_geometry_column\" {2} '{1}');",
                            tablename, geometryColumnName, op), cn);
                    var dr = cm.ExecuteReader();
                    if (dr.HasRows)
                    {
                        dr.Read();
                        SRID = dr.GetInt32(0);

                        var coordDim = dr.GetFieldType(1) == typeof(long) 
                            ? dr.GetInt64(1).ToString(NumberFormatInfo.InvariantInfo) 
                            : dr.GetString(1);
                        
                        switch (coordDim)
                        {
                            case "2":
                            case "XY":
                                _numOrdinateDimensions = 2;
                                break;
                            case "3":
                            case "XYZ":
                            case "XYM":
                                _numOrdinateDimensions = 3;
                                break;
                            case "4":
                            case "XYZM":
                                _numOrdinateDimensions = 4;
                                break;
                            default:
                                throw new Exception("Cannot evaluate number of ordinate dimensions");

                        }

                        switch (dr.GetInt32(2))
                        {
                            case 1: //RTree
                                var indexName = string.Format(@"idx_{0}_{1}", tablename, geometryColumnName);
                                var whereClause = @"xmin < {0} AND xmax > {1} AND ymin < {2} AND ymax > {3}";
                                _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT pkid FROM {0} WHERE {1})", indexName, whereClause);
                                _spatiaLiteIndex = SpatiaLiteIndex.RTree;
                                _useSpatialIndex = true;
                                break;
                            case 2: //MBRCache
                                indexName = string.Format(@"cache_{0}_{1}", tablename, geometryColumnName);
                                whereClause = "mbr=FilterMbrIntersects({1}, {3}, {0}, {2})";
                                _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT ROWID FROM {0} WHERE {1})", indexName, whereClause);
#pragma warning disable 612,618
                                _spatiaLiteIndex = SpatiaLiteIndex.MbrCache;
#pragma warning restore 612,618
                                _useSpatialIndex = true;
                                break;
                        }
                    }
                    dr.Close();
                }
            }
            catch (Exception)
            {
                SRID = -1;
                _spatiaLiteIndex = SpatiaLiteIndex.None;
                _useSpatialIndex = false;
            }
        }
Example #3
0
        /// <summary>
        /// Creates an instance of SpatiaLite provider
        /// </summary>
        /// <param name="connectionStr">Connection String to SQLite database file
        /// ("http://www.connectionstrings.com/sqlite")</param>
        /// <param name="tablename">Name of the table with geometry information</param>
        /// <param name="geometryColumnName">Name of the desired geometry column</param>
        /// <param name="oidColumnName">Name of the object Id column</param>
        public SpatiaLite(string connectionStr, string tablename, string geometryColumnName, string oidColumnName)
            : base(-2)
        {
            ConnectionString = connectionStr;
            Table            = tablename;
            GeometryColumn   = geometryColumnName; //Name of column to store geometry
            ObjectIdColumn   = oidColumnName;      //Name of object ID column

            try
            {
                var op = UseLike ? "LIKE" : "=";
                using (var cn = new SQLiteConnection(connectionStr))
                {
                    cn.Open();
                    var cm = new SQLiteCommand(
                        String.Format(
                            "SELECT \"srid\", \"coord_dimension\", \"spatial_index_enabled\" FROM \"geometry_columns\" WHERE(\"f_table_name\" {2} '{0}' AND \"f_geometry_column\" {2} '{1}');",
                            tablename, geometryColumnName, op), cn);
                    var dr = cm.ExecuteReader();
                    if (dr.HasRows)
                    {
                        dr.Read();
                        SRID = dr.GetInt32(0);

                        var coordDim = dr.GetFieldType(1) == typeof(long)
                            ? dr.GetInt64(1).ToString(NumberFormatInfo.InvariantInfo)
                            : dr.GetString(1);

                        switch (coordDim)
                        {
                        case "2":
                        case "XY":
                            _numOrdinateDimensions = 2;
                            break;

                        case "3":
                        case "XYZ":
                        case "XYM":
                            _numOrdinateDimensions = 3;
                            break;

                        case "4":
                        case "XYZM":
                            _numOrdinateDimensions = 4;
                            break;

                        default:
                            throw new Exception("Cannot evaluate number of ordinate dimensions");
                        }

                        switch (dr.GetInt32(2))
                        {
                        case 1:     //RTree
                            var indexName   = string.Format(@"idx_{0}_{1}", tablename, geometryColumnName);
                            var whereClause = @"xmin < {0} AND xmax > {1} AND ymin < {2} AND ymax > {3}";
                            _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT pkid FROM {0} WHERE {1})", indexName, whereClause);
                            _spatiaLiteIndex       = SpatiaLiteIndex.RTree;
                            _useSpatialIndex       = true;
                            break;

                        case 2:     //MBRCache
                            indexName              = string.Format(@"cache_{0}_{1}", tablename, geometryColumnName);
                            whereClause            = "mbr=FilterMbrIntersects({1}, {3}, {0}, {2})";
                            _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT ROWID FROM {0} WHERE {1})", indexName, whereClause);
#pragma warning disable 612,618
                            _spatiaLiteIndex = SpatiaLiteIndex.MbrCache;
#pragma warning restore 612,618
                            _useSpatialIndex = true;
                            break;
                        }
                    }
                    dr.Close();
                }
            }
            catch (Exception)
            {
                SRID             = -1;
                _spatiaLiteIndex = SpatiaLiteIndex.None;
                _useSpatialIndex = false;
            }
        }
Example #4
0
        /// <summary>
        /// Creates an instance of SpatiaLite provider
        /// </summary>
        /// <param name="connectionStr">Connection String to SQLite database file 
        /// ("http://www.connectionstrings.com/sqlite")</param>
        /// <param name="tablename">Name of the table with geometry information</param>
        /// <param name="geometryColumnName">Name of the desired geometry column</param>
        /// <param name="oidColumnName">Name of the object Id column</param>
        public ManagedSpatiaLite(string connectionStr, string tablename, string geometryColumnName, string oidColumnName)
            : base(-2)
        {
            ConnectionString = connectionStr;
            Table = tablename;
            GeometryColumn = geometryColumnName; //Name of column to store geometry
            ObjectIdColumn = oidColumnName; //Name of object ID column

            try
            {
                var op = UseLike ? "LIKE" : "=";
                using (var cn = new SQLiteConnection(connectionStr))
                {
                    cn.Open();
                    using (var cm = new SQLiteCommand(
                        String.Format(
                            "SELECT \"srid\", \"coord_dimension\", \"spatial_index_enabled\" FROM \"geometry_columns\" WHERE(lower(\"f_table_name\") {2} lower('{0}') AND lower(\"f_geometry_column\") {2} lower('{1}'));",
                            tablename, geometryColumnName, op), cn))
                    {
                        using (var dr = cm.ExecuteReader())
                        {
                            if (dr.HasRows)
                            {
                                dr.Read();
                                SRID = dr.GetInt32(0);

                                var coordDim = dr.GetFieldType(1) == typeof (long)
                                    ? dr.GetInt64(1).ToString(NumberFormatInfo.InvariantInfo)
                                    : dr.GetString(1);

                                switch (coordDim)
                                {
                                    case "2":
                                    case "XY":
                                        _ordinates = Ordinates.XY;
                                        break;
                                    case "3":
                                    case "XYZ":
                                        _ordinates = Ordinates.XYZ;
                                        break;
                                    case "XYM":
                                        _ordinates = Ordinates.XYM;
                                        break;
                                    case "4":
                                    case "XYZM":
                                        _ordinates = Ordinates.XYZM;
                                        break;
                                    default:
                                        throw new Exception("Cannot evaluate number of ordinate dimensions");

                                }

                                switch (dr.GetInt32(2))
                                {
                                    case 1: //RTree
                                        var indexName = string.Format(@"idx_{0}_{1}", tablename, geometryColumnName);
                                        const string whereClause = @"xmin < {0} AND xmax > {1} AND ymin < {2} AND ymax > {3}";
                                        _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT pkid FROM {0} WHERE {1})", indexName, whereClause);
                                        _spatiaLiteIndex = SpatiaLiteIndex.RTree;
                                        _useSpatialIndex = true;
                                        break;
                                }
                            }
                            dr.Close();
                        }
                    }
                }

                GetNonSpatialColumns();
            }
            catch (Exception)
            {
                SRID = -1;
                _spatiaLiteIndex = SpatiaLiteIndex.None;
                _useSpatialIndex = false;
            }
        }
Example #5
0
        /// <summary>
        /// Creates an instance of SpatiaLite provider
        /// </summary>
        /// <param name="connectionStr">Connection String to SQLite database file 
        /// ("http://www.connectionstrings.com/sqlite")</param>
        /// <param name="tablename">Name of the table with geometry information</param>
        /// <param name="geometryColumnName">Name of the desired geometry column</param>
        /// <param name="oidColumnName">Name of the object Id column</param>
        public SpatiaLite(string connectionStr, string tablename, string geometryColumnName, string oidColumnName)
        {
            ConnectionString = connectionStr;
            Table = tablename;
            GeometryColumn = geometryColumnName; //Name of column to store geometry
            ObjectIdColumn = oidColumnName; //Name of object ID column

            try
            {

                using (SQLiteConnection cn = new SQLiteConnection(connectionStr))
                {
                    cn.Open();
                    SQLiteCommand cm = new SQLiteCommand(
                        String.Format(
                            "SELECT srid, spatial_index_enabled FROM geometry_columns WHERE(f_table_name='{0}' AND f_geometry_column='{1}');",
                            tablename, geometryColumnName), cn);
                    SQLiteDataReader dr = cm.ExecuteReader();
                    if (dr.HasRows)
                    {
                        dr.Read();
                        _srid = dr.GetInt32(0);

                        switch (dr.GetInt32(1))
                        {
                            case 1: //RTree
                                String indexName = string.Format(@"idx_{0}_{1}", tablename, geometryColumnName);
                                String whereClause = @"xmin < {0} AND xmax > {1} AND ymin < {2} AND ymax > {3}";
                                _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT pkid FROM {0} WHERE {1})", indexName, whereClause);
                                _spatiaLiteIndex = SpatiaLiteIndex.RTree;
                                _useSpatialIndex = true;
                                break;
                            case 2: //MBRCache
                                indexName = string.Format(@"cache_{0}_{1}", tablename, geometryColumnName);
                                whereClause = "mbr=FilterMbrIntersects({1}, {3}, {0}, {2})";
                                _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT ROWID FROM {0} WHERE {1})", indexName, whereClause);
                                _spatiaLiteIndex = SpatiaLiteIndex.MbrCache;
                                _useSpatialIndex = true;
                                break;
                        }
                    }
                    dr.Close();
                }
            }
            catch (Exception)
            {
                _srid = -1;
                _spatiaLiteIndex = SpatiaLiteIndex.None;
                _useSpatialIndex = false;
            }
        }
        /// <summary>
        /// Creates an instance of SpatiaLite provider
        /// </summary>
        /// <param name="connectionStr">Connection String to SQLite database file
        /// ("http://www.connectionstrings.com/sqlite")</param>
        /// <param name="tablename">Name of the table with geometry information</param>
        /// <param name="geometryColumnName">Name of the desired geometry column</param>
        /// <param name="oidColumnName">Name of the object Id column</param>
        public ManagedSpatiaLite(string connectionStr, string tablename, string geometryColumnName, string oidColumnName)
            : base(-2)
        {
            ConnectionString = connectionStr;
            Table            = tablename;
            GeometryColumn   = geometryColumnName; //Name of column to store geometry
            ObjectIdColumn   = oidColumnName;      //Name of object ID column

            try
            {
                var op = UseLike ? "LIKE" : "=";
                using (var cn = new SQLiteConnection(connectionStr))
                {
                    cn.Open();
                    using (var cm = new SQLiteCommand(
                               String.Format(
                                   "SELECT \"srid\", \"coord_dimension\", \"spatial_index_enabled\" FROM \"geometry_columns\" WHERE(lower(\"f_table_name\") {2} lower('{0}') AND lower(\"f_geometry_column\") {2} lower('{1}'));",
                                   tablename, geometryColumnName, op), cn))
                    {
                        using (var dr = cm.ExecuteReader())
                        {
                            if (dr.HasRows)
                            {
                                dr.Read();
                                SRID = dr.GetInt32(0);

                                var coordDim = dr.GetFieldType(1) == typeof(long)
                                    ? dr.GetInt64(1).ToString(NumberFormatInfo.InvariantInfo)
                                    : dr.GetString(1);

                                switch (coordDim)
                                {
                                case "2":
                                case "XY":
                                    _ordinates = Ordinates.XY;
                                    break;

                                case "3":
                                case "XYZ":
                                    _ordinates = Ordinates.XYZ;
                                    break;

                                case "XYM":
                                    _ordinates = Ordinates.XYM;
                                    break;

                                case "4":
                                case "XYZM":
                                    _ordinates = Ordinates.XYZM;
                                    break;

                                default:
                                    throw new Exception("Cannot evaluate number of ordinate dimensions");
                                }

                                switch (dr.GetInt32(2))
                                {
                                case 1:     //RTree
                                    var          indexName   = string.Format(@"idx_{0}_{1}", tablename, geometryColumnName);
                                    const string whereClause = @"xmin < {0} AND xmax > {1} AND ymin < {2} AND ymax > {3}";
                                    _spatiaLiteIndexClause = string.Format(@"ROWID IN (SELECT pkid FROM {0} WHERE {1})", indexName, whereClause);
                                    _spatiaLiteIndex       = SpatiaLiteIndex.RTree;
                                    _useSpatialIndex       = true;
                                    break;
                                }
                            }
                            dr.Close();
                        }
                    }
                }

                GetNonSpatialColumns();
            }
            catch (Exception)
            {
                SRID             = -1;
                _spatiaLiteIndex = SpatiaLiteIndex.None;
                _useSpatialIndex = false;
            }
        }