File indexing completed on 2024-12-01 12:29:10
0001 #include "SimpleMapImage.h" 0002 0003 #include "InterpolationMethod.h" 0004 0005 #include <cmath> 0006 0007 SimpleMapImage::SimpleMapImage( QString const & fileName ) 0008 : m_image( fileName ), 0009 m_mapWidthPixel( m_image.width() ), 0010 m_mapHeightPixel( m_image.height() ) 0011 { 0012 if ( m_image.isNull() ) 0013 qFatal( "Invalid image '%s'", fileName.toStdString().c_str() ); 0014 } 0015 0016 QRgb SimpleMapImage::pixel( double const lonRad, double const latRad ) 0017 { 0018 double const x = lonRadToPixelX( lonRad ); 0019 double const y = latRadToPixelY( latRad ); 0020 return m_interpolationMethod->interpolate( x, y ); 0021 } 0022 0023 QRgb SimpleMapImage::pixel( int const x, int const y ) 0024 { 0025 return m_image.pixel( x, m_mapHeightPixel - y - 1 ); 0026 } 0027 0028 void SimpleMapImage::setInterpolationMethod( InterpolationMethod * const interpolationMethod ) 0029 { 0030 m_interpolationMethod = interpolationMethod; 0031 m_interpolationMethod->setMapImage( this ); 0032 } 0033 0034 inline double SimpleMapImage::lonRadToPixelX( double const lonRad ) const 0035 { 0036 return static_cast<double>( m_mapWidthPixel ) / ( 2.0 * M_PI ) * lonRad 0037 + 0.5 * static_cast<double>( m_mapWidthPixel ); 0038 } 0039 0040 inline double SimpleMapImage::latRadToPixelY( double const latRad ) const 0041 { 0042 return static_cast<double>( m_mapHeightPixel ) / M_PI * latRad 0043 + 0.5 * static_cast<double>( m_mapHeightPixel ); 0044 }