Skip to content

Commit

Permalink
Use EPGS and Proj4 strings as persistent list of popular CRS:es
Browse files Browse the repository at this point in the history
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@11521 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
homann committed Aug 28, 2009
1 parent 90974b7 commit 2efd7da
Showing 1 changed file with 50 additions and 4 deletions.
54 changes: 50 additions & 4 deletions src/gui/qgsprojectionselector.cpp
Expand Up @@ -34,6 +34,7 @@
const int NAME_COLUMN = 0;
const int EPSG_COLUMN = 1;
const int QGIS_CRS_ID_COLUMN = 2;
const int POPULAR_CRSES = 4;

QgsProjectionSelector::QgsProjectionSelector( QWidget* parent,
const char * name,
Expand All @@ -59,7 +60,33 @@ QgsProjectionSelector::QgsProjectionSelector( QWidget* parent,
// Read settings from persistent storage
QSettings settings;
mRecentProjections = settings.value( "/UI/recentProjections" ).toStringList();
/*** The reading (above) of internal id from persistent storage should be removed sometims in the future */
/*** This is kept now for backwards compatibility */

QStringList projectionsEpsg = settings.value( "/UI/recentProjectionsEpsg" ).toStringList();
QStringList projectionsProj4 = settings.value( "/UI/recentProjectionsProj4" ).toStringList();
if ( projectionsEpsg.size() >= mRecentProjections.size() )
{
// We had saved state with EPSG and Proj4. Use that instead
// to find out the csr id
QgsDebugMsg( "Use popular projection list from EPSG/Proj4 saved state" );
mRecentProjections.clear();
for ( int i = 0; i < projectionsEpsg.size(); i++ )
{
// Create a crs from the EPSG
QgsCoordinateReferenceSystem crs( projectionsEpsg.at( i ).toLong(), QgsCoordinateReferenceSystem::EpsgCrsId );
if ( ! crs.isValid() )
{
// Couldn't create from EPSG, try the Proj4 string instead
if ( ! crs.createFromProj4( projectionsProj4.at( i ) ) )
{
// No? Skip this entry
continue;
}
}
mRecentProjections << QString::number( crs.srsid() );
}
}
}


Expand All @@ -75,13 +102,32 @@ QgsProjectionSelector::~QgsProjectionSelector()
{
mRecentProjections.removeAll( QString::number( crsId ) );
mRecentProjections.prepend( QString::number( crsId ) );
// Prunse size of list
// Prune size of list
while ( mRecentProjections.size() > 4 )
{
mRecentProjections.removeLast();
}
// Save to file
// Save to file *** Should be removed sometims in the future ***
settings.setValue( "/UI/recentProjections", mRecentProjections );

// Convert to EPGS and proj4, and save those values also

QStringList projectionsEpsg;
QStringList projectionsProj4;
for ( int i = 0; i < mRecentProjections.size(); i++ )
{
// Create a crs from the crsId
QgsCoordinateReferenceSystem crs( mRecentProjections.at( i ).toLong(), QgsCoordinateReferenceSystem::InternalCrsId );
if ( ! crs.isValid() )
{
// No? Skip this entry
continue;
}
projectionsEpsg << QString::number( crs.epsg() );
projectionsProj4 << crs.toProj4();
}
settings.setValue( "/UI/recentProjectionsEpsg", projectionsEpsg );
settings.setValue( "/UI/recentProjectionsProj4", projectionsProj4 );
}
}

Expand Down Expand Up @@ -205,8 +251,8 @@ QString QgsProjectionSelector::ogcWmsCrsFilterAsSqlExpression( QSet<QString> * c
//this line is neccesary to make change projection work
//with geoserver because for some reason geoserver returns
//EPSG:WGS84(DD) as the first srs and is invalid because the
//epsg database expect an integer string
if(rx.indexIn(parts.at( 1 )) == -1)
//epsg database expect an integer string
if ( rx.indexIn( parts.at( 1 ) ) == -1 )
epsgParts.push_back( parts.at( 1 ) );
}

Expand Down

0 comments on commit 2efd7da

Please sign in to comment.