00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "qgsmaptopixel.h"
00019 #include <QPoint>
00020 #include <QTextStream>
00021 #include "qgslogger.h"
00022
00023 QgsMapToPixel::QgsMapToPixel( double mapUnitsPerPixel,
00024 double ymax,
00025 double ymin,
00026 double xmin )
00027 : mMapUnitsPerPixel( mapUnitsPerPixel ),
00028 yMax( ymax ),
00029 yMin( ymin ),
00030 xMin( xmin ),
00031 xMax( 0 )
00032 {
00033 }
00034
00035 QgsMapToPixel::~QgsMapToPixel()
00036 {
00037 }
00038
00039 QgsPoint QgsMapToPixel::toMapPoint( double x, double y ) const
00040 {
00041 double mx = x * mMapUnitsPerPixel + xMin;
00042 double my = -1 * (( y - yMax ) * mMapUnitsPerPixel - yMin );
00043 return QgsPoint( mx, my );
00044 }
00045
00046 QgsPoint QgsMapToPixel::toMapCoordinates( QPoint p ) const
00047 {
00048 QgsPoint mapPt = toMapPoint( p.x(), p.y() );
00049 return QgsPoint( mapPt );
00050 }
00051
00052 QgsPoint QgsMapToPixel::toMapCoordinates( int x, int y ) const
00053 {
00054 return toMapPoint( x, y );
00055 }
00056
00057 QgsPoint QgsMapToPixel::toMapCoordinatesF( double x, double y ) const
00058 {
00059 return toMapPoint( x, y );
00060 }
00061
00062 void QgsMapToPixel::setMapUnitsPerPixel( double mapUnitsPerPixel )
00063 {
00064 mMapUnitsPerPixel = mapUnitsPerPixel;
00065 }
00066
00067 double QgsMapToPixel::mapUnitsPerPixel() const
00068 {
00069 return mMapUnitsPerPixel;
00070 }
00071
00072 void QgsMapToPixel::setYMaximum( double ymax )
00073 {
00074 yMax = ymax;
00075 }
00076
00077 void QgsMapToPixel::setYMinimum( double ymin )
00078 {
00079 yMin = ymin;
00080 }
00081
00082 void QgsMapToPixel::setXMinimum( double xmin )
00083 {
00084 xMin = xmin;
00085 }
00086
00087 void QgsMapToPixel::setParameters( double mapUnitsPerPixel, double xmin, double ymin, double ymax )
00088 {
00089 mMapUnitsPerPixel = mapUnitsPerPixel;
00090 xMin = xmin;
00091 yMin = ymin;
00092 yMax = ymax;
00093
00094 }
00095
00096 QString QgsMapToPixel::showParameters()
00097 {
00098 QString rep;
00099 QTextStream( &rep ) << "Map units/pixel: " << mMapUnitsPerPixel
00100 << " X minimum: " << xMin << " Y minimum: " << yMin << " Y maximum: " << yMax;
00101 return rep;
00102
00103 }
00104
00105
00106 QgsPoint QgsMapToPixel::transform( double x, double y ) const
00107 {
00108 transformInPlace( x, y );
00109 return QgsPoint( x, y );
00110 }
00111
00112 QgsPoint QgsMapToPixel::transform( const QgsPoint& p ) const
00113 {
00114 double dx = p.x();
00115 double dy = p.y();
00116 transformInPlace( dx, dy );
00117
00118
00119 return QgsPoint( dx, dy );
00120 }
00121
00122 void QgsMapToPixel::transform( QgsPoint* p ) const
00123 {
00124 double x = p->x();
00125 double y = p->y();
00126 transformInPlace( x, y );
00127
00128 #ifdef QGISDEBUG
00129
00130 #endif
00131 p->set( x, y );
00132 }
00133
00134 void QgsMapToPixel::transformInPlace( double& x, double& y ) const
00135 {
00136 x = ( x - xMin ) / mMapUnitsPerPixel;
00137 y = yMax - ( y - yMin ) / mMapUnitsPerPixel;
00138 }
00139
00140 void QgsMapToPixel::transformInPlace( std::vector<double>& x,
00141 std::vector<double>& y ) const
00142 {
00143 assert( x.size() == y.size() );
00144 for ( unsigned int i = 0; i < x.size(); ++i )
00145 transformInPlace( x[i], y[i] );
00146 }