20 #include "qgsversion.h" 22 #include <QCoreApplication> 28 #include "qgsconfig.h" 50 const QString
GEOPROJ4 = QStringLiteral(
"+proj=longlat +datum=WGS84 +no_defs" );
54 " DATUM[\"WGS_1984\", " 55 " SPHEROID[\"WGS 84\",6378137,298.257223563, " 56 " AUTHORITY[\"EPSG\",\"7030\"]], " 57 " TOWGS84[0,0,0,0,0,0,0], " 58 " AUTHORITY[\"EPSG\",\"6326\"]], " 59 " PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]], " 60 " UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]], " 61 " AXIS[\"Lat\",NORTH], " 62 " AXIS[\"Long\",EAST], " 63 " AUTHORITY[\"EPSG\",\"4326\"]]";
66 "1:1000000,1:500000,1:250000,1:100000,1:50000,1:25000," 67 "1:10000,1:5000,1:2500,1:1000,1:500";
71 const QString
GEO_NONE = QStringLiteral(
"NONE" );
94 const double Qgis::UI_SCALE_FACTOR = 1;
100 string.remove( QLocale().groupSeparator() );
101 return QLocale().toDouble(
string, &ok );
107 string.remove( QLocale().groupSeparator() );
108 return QLocale().toInt(
string, &ok );
114 string.remove( QLocale().groupSeparator() );
115 return QLocale().toLongLong(
string, &ok );
120 if ( size == 0 ||
long( size ) < 0 )
122 QgsDebugMsg( QStringLiteral(
"Negative or zero size %1." ).arg( size ) );
125 void *p = malloc( size );
128 QgsDebugMsg( QStringLiteral(
"Allocation of %1 bytes failed." ).arg( size ) );
135 if ( nmemb == 0 ||
long( nmemb ) < 0 || size == 0 ||
long( size ) < 0 )
137 QgsDebugMsg( QStringLiteral(
"Negative or zero nmemb %1 or size %2." ).arg( nmemb ).arg( size ) );
143 memset( p, 0, nmemb * size );
156 if ( !lhs.isValid() )
157 return rhs.isValid();
158 else if ( lhs.isNull() )
159 return rhs.isValid() && !rhs.isNull();
160 else if ( !rhs.isValid() || rhs.isNull() )
163 switch ( lhs.type() )
166 return lhs.toInt() < rhs.toInt();
168 return lhs.toUInt() < rhs.toUInt();
169 case QVariant::LongLong:
170 return lhs.toLongLong() < rhs.toLongLong();
171 case QVariant::ULongLong:
172 return lhs.toULongLong() < rhs.toULongLong();
173 case QVariant::Double:
174 return lhs.toDouble() < rhs.toDouble();
176 return lhs.toChar() < rhs.toChar();
178 return lhs.toDate() < rhs.toDate();
180 return lhs.toTime() < rhs.toTime();
181 case QVariant::DateTime:
182 return lhs.toDateTime() < rhs.toDateTime();
184 return lhs.toBool() < rhs.toBool();
188 const QList<QVariant> &lhsl = lhs.toList();
189 const QList<QVariant> &rhsl = rhs.toList();
191 int i, n = std::min( lhsl.size(), rhsl.size() );
192 for ( i = 0; i < n && lhsl[i].type() == rhsl[i].type() &&
qgsVariantEqual( lhsl[i], rhsl[i] ); i++ )
196 return lhsl.size() < rhsl.size();
201 case QVariant::StringList:
203 const QStringList &lhsl = lhs.toStringList();
204 const QStringList &rhsl = rhs.toStringList();
206 int i, n = std::min( lhsl.size(), rhsl.size() );
207 for ( i = 0; i < n && lhsl[i] == rhsl[i]; i++ )
211 return lhsl.size() < rhsl.size();
213 return lhsl[i] < rhsl[i];
217 return QString::localeAwareCompare( lhs.toString(), rhs.toString() ) < 0;
228 if ( path.startsWith( QLatin1String(
"/vsizip/" ), Qt::CaseInsensitive ) ||
229 path.endsWith( QLatin1String(
".zip" ), Qt::CaseInsensitive ) )
230 return QStringLiteral(
"/vsizip/" );
231 else if ( path.startsWith( QLatin1String(
"/vsitar/" ), Qt::CaseInsensitive ) ||
232 path.endsWith( QLatin1String(
".tar" ), Qt::CaseInsensitive ) ||
233 path.endsWith( QLatin1String(
".tar.gz" ), Qt::CaseInsensitive ) ||
234 path.endsWith( QLatin1String(
".tgz" ), Qt::CaseInsensitive ) )
235 return QStringLiteral(
"/vsitar/" );
236 else if ( path.startsWith( QLatin1String(
"/vsigzip/" ), Qt::CaseInsensitive ) ||
237 path.endsWith( QLatin1String(
".gz" ), Qt::CaseInsensitive ) )
238 return QStringLiteral(
"/vsigzip/" );
243 uint
qHash(
const QVariant &variant )
245 if ( !variant.isValid() || variant.isNull() )
246 return std::numeric_limits<uint>::max();
248 switch ( variant.type() )
251 return qHash( variant.toInt() );
253 return qHash( variant.toUInt() );
255 return qHash( variant.toBool() );
256 case QVariant::Double:
257 return qHash( variant.toDouble() );
258 case QVariant::LongLong:
259 return qHash( variant.toLongLong() );
260 case QVariant::ULongLong:
261 return qHash( variant.toULongLong() );
262 case QVariant::String:
263 return qHash( variant.toString() );
265 return qHash( variant.toChar() );
267 return qHash( variant.toList() );
268 case QVariant::StringList:
269 return qHash( variant.toStringList() );
270 case QVariant::ByteArray:
271 return qHash( variant.toByteArray() );
273 return qHash( variant.toDate() );
275 return qHash( variant.toTime() );
276 case QVariant::DateTime:
277 return qHash( variant.toDateTime() );
279 case QVariant::Locale:
280 case QVariant::RegExp:
281 return qHash( variant.toString() );
286 return std::numeric_limits<uint>::max();
291 return lhs.isNull() == rhs.isNull() && lhs == rhs;
static const QString QGIS_VERSION
Version string.
static const char * QGIS_DEV_VERSION
The development version.
void * qgsMalloc(size_t size)
Allocates size bytes and returns a pointer to the allocated memory.
static const double UI_SCALE_FACTOR
UI scaling factor.
double qgsPermissiveToDouble(QString string, bool &ok)
Converts a string to a double in a permissive way, e.g., allowing for incorrect numbers of digits bet...
void * qgsCalloc(size_t nmemb, size_t size)
Allocates memory for an array of nmemb elements of size bytes each and returns a pointer to the alloc...
UnitType
Type of unit of tolerance value from settings.
static const QColor DEFAULT_HIGHLIGHT_COLOR
Default highlight color.
bool qgsVariantGreaterThan(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether the first is greater than the second.
static const int QGIS_VERSION_INT
Version number used for comparing versions using the "Check QGIS Version" function.
int qgsPermissiveToInt(QString string, bool &ok)
Converts a string to an integer in a permissive way, e.g., allowing for incorrect numbers of digits b...
bool qgsVariantLessThan(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether the first is less than the second.
const QString GEO_NONE
Constant that holds the string representation for "No ellips/No CRS".
static const double DEFAULT_Z_COORDINATE
Default Z coordinate value for 2.5d geometry This value have to be assigned to the Z coordinate for t...
static const double DEFAULT_SNAP_TOLERANCE
Default snapping distance tolerance.
Pixels unit of tolerance.
const QString GEOPROJ4
PROJ4 string that represents a geographic coord sys.
qlonglong qgsPermissiveToLongLong(QString string, bool &ok)
Converts a string to an qlonglong in a permissive way, e.g., allowing for incorrect numbers of digits...
static const double DEFAULT_SEARCH_RADIUS_MM
Identify search radius in mm.
const QString GEO_EPSG_CRS_AUTHID
Geographic coord sys from EPSG authority.
static const QgsTolerance::UnitType DEFAULT_SNAP_UNITS
Default snapping distance units.
const QString GEOWKT
Wkt string that represents a geographic coord sys.
uint qHash(const QVariant &variant)
Hash for QVariant.
static const float DEFAULT_MAPTOPIXEL_THRESHOLD
Default threshold between map coordinates and device coordinates for map2pixel simplification.
static const QString QGIS_RELEASE_NAME
Release name.
const QString PROJECT_SCALES
QString qgsVsiPrefix(const QString &path)
static const double DEFAULT_HIGHLIGHT_MIN_WIDTH_MM
Default highlight line/stroke minimum width in mm.
bool qgsVariantEqual(const QVariant &lhs, const QVariant &rhs)
Compares two QVariant values and returns whether they are equal, NULL values are treated as equal...
static const double DEFAULT_HIGHLIGHT_BUFFER_MM
Default highlight buffer in mm.
void qgsFree(void *ptr)
Frees the memory space pointed to by ptr.
static const double SCALE_PRECISION
Fudge factor used to compare two scales.