@@ -90,6 +90,66 @@ QgsCoordinateReferenceSystem& QgsCoordinateReferenceSystem::operator=( const Qgs
90
90
return *this ;
91
91
}
92
92
93
+ QList<long > QgsCoordinateReferenceSystem::validSrsIds ()
94
+ {
95
+ QList<long > results;
96
+ // check both standard & user defined projection databases
97
+ QStringList dbs = QStringList () << QgsApplication::srsDatabaseFilePath () << QgsApplication::qgisUserDatabaseFilePath ();
98
+
99
+ Q_FOREACH ( const QString& db, dbs )
100
+ {
101
+ QFileInfo myInfo ( db );
102
+ if ( !myInfo.exists () )
103
+ {
104
+ QgsDebugMsg ( " failed : " + db + " does not exist!" );
105
+ continue ;
106
+ }
107
+
108
+ sqlite3 *database = nullptr ;
109
+ const char *tail = nullptr ;
110
+ sqlite3_stmt *statement = nullptr ;
111
+
112
+ // check the db is available
113
+ int result = openDatabase ( db, &database );
114
+ if ( result != SQLITE_OK )
115
+ {
116
+ QgsDebugMsg ( " failed : " + db + " could not be opened!" );
117
+ continue ;
118
+ }
119
+
120
+ QString sql = " select srs_id from tbl_srs" ;
121
+ result = sqlite3_prepare ( database, sql.toUtf8 (),
122
+ sql.toUtf8 ().length (),
123
+ &statement, &tail );
124
+ while ( 1 )
125
+ {
126
+ // this one is an infinitive loop, intended to fetch any row
127
+ int ret = sqlite3_step ( statement );
128
+
129
+ if ( ret == SQLITE_DONE )
130
+ {
131
+ // there are no more rows to fetch - we can stop looping
132
+ break ;
133
+ }
134
+
135
+ if ( ret == SQLITE_ROW )
136
+ {
137
+ results.append ( sqlite3_column_int ( statement, 0 ) );
138
+ }
139
+ else
140
+ {
141
+ QgsMessageLog::logMessage ( QObject::tr ( " SQLite error: %2\n SQL: %1" ).arg ( sql, sqlite3_errmsg ( database ) ), QObject::tr ( " SpatiaLite" ) );
142
+ break ;
143
+ }
144
+ }
145
+
146
+ sqlite3_finalize ( statement );
147
+ sqlite3_close ( database );
148
+ }
149
+ std::sort ( results.begin (), results.end () );
150
+ return results;
151
+ }
152
+
93
153
QgsCoordinateReferenceSystem QgsCoordinateReferenceSystem::fromOgcWmsCrs ( const QString& ogcCrs )
94
154
{
95
155
QgsCoordinateReferenceSystem crs;
0 commit comments