Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
68164ca8
Commit
68164ca8
authored
Oct 24, 2019
by
Cosmin Marc
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Map providers cleanup.
parent
964f926c
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
463 additions
and
558 deletions
+463
-558
BingMapProvider.cpp
src/QtLocationPlugin/BingMapProvider.cpp
+32
-44
BingMapProvider.h
src/QtLocationPlugin/BingMapProvider.h
+34
-42
ElevationMapProvider.cpp
src/QtLocationPlugin/ElevationMapProvider.cpp
+13
-21
ElevationMapProvider.h
src/QtLocationPlugin/ElevationMapProvider.h
+14
-21
EsriMapProvider.cpp
src/QtLocationPlugin/EsriMapProvider.cpp
+33
-43
EsriMapProvider.h
src/QtLocationPlugin/EsriMapProvider.h
+27
-25
GenericMapProvider.cpp
src/QtLocationPlugin/GenericMapProvider.cpp
+54
-82
GenericMapProvider.h
src/QtLocationPlugin/GenericMapProvider.h
+30
-38
GoogleMapProvider.cpp
src/QtLocationPlugin/GoogleMapProvider.cpp
+72
-90
GoogleMapProvider.h
src/QtLocationPlugin/GoogleMapProvider.h
+53
-56
MapProvider.cpp
src/QtLocationPlugin/MapProvider.cpp
+8
-6
MapProvider.h
src/QtLocationPlugin/MapProvider.h
+7
-7
MapboxMapProvider.cpp
src/QtLocationPlugin/MapboxMapProvider.cpp
+11
-25
MapboxMapProvider.h
src/QtLocationPlugin/MapboxMapProvider.h
+75
-58
No files found.
src/QtLocationPlugin/BingMapProvider.cpp
View file @
68164ca8
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "BingMapProvider.h"
#if defined(DEBUG_GOOGLE_MAPS)
#include <QFile>
#include <QStandardPaths>
#endif
#include "QGCMapEngine.h"
BingMapProvider
::
BingMapProvider
(
QString
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://www.bing.com/maps/"
),
imageFormat
,
averageSize
,
mapType
,
parent
)
{}
BingMapProvider
::~
BingMapProvider
()
{}
QString
BingRoadMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
QString
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/"
"r%2.png?g=%3&mkt=%4"
)
.
arg
(
_getServerNum
(
x
,
y
,
4
))
.
arg
(
key
)
.
arg
(
_versionBingMaps
)
.
arg
(
_language
);
BingMapProvider
::
BingMapProvider
(
const
QString
&
imageFormat
,
const
quint32
averageSize
,
const
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
)
:
MapProvider
(
QStringLiteral
(
"https://www.bing.com/maps/"
),
imageFormat
,
averageSize
,
mapType
,
parent
)
{}
static
const
QString
RoadMapUrl
=
QStringLiteral
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/r%2.png?g=%3&mkt=%4"
);
QString
BingRoadMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
const
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
RoadMapUrl
.
arg
(
QString
::
number
(
_getServerNum
(
x
,
y
,
4
)),
key
,
_versionBingMaps
,
_language
);
}
QString
BingSatelliteMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
QString
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/"
"a%2.jpeg?g=%3&mkt=%4"
)
.
arg
(
_getServerNum
(
x
,
y
,
4
))
.
arg
(
key
)
.
arg
(
_versionBingMaps
)
.
arg
(
_language
);
static
const
QString
SatteliteMapUrl
=
QStringLiteral
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/a%2.jpeg?g=%3&mkt=%4"
);
QString
BingSatelliteMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
const
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
SatteliteMapUrl
.
arg
(
QString
::
number
(
_getServerNum
(
x
,
y
,
4
))
,
key
,
_versionBingMaps
,
_language
);
}
QString
BingHybridMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
QString
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/"
"h%2.jpeg?g=%3&mkt=%4"
)
.
arg
(
_getServerNum
(
x
,
y
,
4
))
.
arg
(
key
)
.
arg
(
_versionBingMaps
)
.
arg
(
_language
);
static
const
QString
HybridMapUrl
=
QStringLiteral
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/h%2.jpeg?g=%3&mkt=%4"
);
QString
BingHybridMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
const
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
HybridMapUrl
.
arg
(
QString
::
number
(
_getServerNum
(
x
,
y
,
4
)),
key
,
_versionBingMaps
,
_language
);
}
src/QtLocationPlugin/BingMapProvider.h
View file @
68164ca8
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class
BingMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
BingMapProvider
(
QString
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
);
~
BingMapProvider
();
public:
BingMapProvider
(
const
QString
&
imageFormat
,
const
quint32
averageSize
,
const
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
=
nullptr
);
protected:
// Define the url to Request
virtual
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
=
0
;
~
BingMapProvider
()
=
default
;
const
QString
_versionBingMaps
=
"563"
;
protected:
const
QString
_versionBingMaps
=
QStringLiteral
(
"563"
);
};
const
quint32
AVERAGE_BING_STREET_MAP
=
1297
;
const
quint32
AVERAGE_BING_SAT_MAP
=
19597
;
static
const
quint32
AVERAGE_BING_STREET_MAP
=
1297
;
static
const
quint32
AVERAGE_BING_SAT_MAP
=
19597
;
// -----------------------------------------------------------
// Bing Road Map
class
BingRoadMapProvider
:
public
BingMapProvider
{
Q_OBJECT
public:
BingRoadMapProvider
(
QObject
*
parent
)
:
BingMapProvider
(
QString
(
"png"
),
AVERAGE_BING_STREET_MAP
,
QGeoMapType
::
StreetMap
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
public:
BingRoadMapProvider
(
QObject
*
parent
=
nullptr
)
:
BingMapProvider
(
QStringLiteral
(
"png"
),
AVERAGE_BING_STREET_MAP
,
QGeoMapType
::
StreetMap
,
parent
)
{}
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
// -----------------------------------------------------------
...
...
@@ -48,14 +45,12 @@ class BingRoadMapProvider : public BingMapProvider {
class
BingSatelliteMapProvider
:
public
BingMapProvider
{
Q_OBJECT
public:
BingSatelliteMapProvider
(
QObject
*
parent
)
:
BingMapProvider
(
QString
(
"jpg"
),
AVERAGE_BING_SAT_MAP
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
public:
BingSatelliteMapProvider
(
QObject
*
parent
=
nullptr
)
:
BingMapProvider
(
QStringLiteral
(
"jpg"
),
AVERAGE_BING_SAT_MAP
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{}
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
// -----------------------------------------------------------
...
...
@@ -63,12 +58,9 @@ class BingSatelliteMapProvider : public BingMapProvider {
class
BingHybridMapProvider
:
public
BingMapProvider
{
Q_OBJECT
public:
BingHybridMapProvider
(
QObject
*
parent
)
:
BingMapProvider
(
QString
(
"jpg"
),
AVERAGE_BING_SAT_MAP
,
QGeoMapType
::
HybridMap
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
public:
BingHybridMapProvider
(
QObject
*
parent
=
nullptr
)
:
BingMapProvider
(
QStringLiteral
(
"jpg"
),
AVERAGE_BING_SAT_MAP
,
QGeoMapType
::
HybridMap
,
parent
)
{}
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
src/QtLocationPlugin/ElevationMapProvider.cpp
View file @
68164ca8
...
...
@@ -5,42 +5,34 @@
#endif
#include "QGCMapEngine.h"
ElevationProvider
::
ElevationProvider
(
QString
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://api.airmap.com/"
),
imageFormat
,
averageSize
,
mapType
,
parent
)
{}
ElevationProvider
::~
ElevationProvider
()
{}
ElevationProvider
::
ElevationProvider
(
const
QString
&
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
)
:
MapProvider
(
QStringLiteral
(
"https://api.airmap.com/"
),
imageFormat
,
averageSize
,
mapType
,
parent
)
{}
//-----------------------------------------------------------------------------
int
AirmapElevationProvider
::
long2tileX
(
double
lon
,
int
z
)
{
Q_UNUSED
(
z
)
;
int
AirmapElevationProvider
::
long2tileX
(
const
double
lon
,
const
int
z
)
const
{
Q_UNUSED
(
z
)
return
static_cast
<
int
>
(
floor
((
lon
+
180.0
)
/
srtm1TileSize
));
}
//-----------------------------------------------------------------------------
int
AirmapElevationProvider
::
lat2tileY
(
double
lat
,
int
z
)
{
Q_UNUSED
(
z
)
;
int
AirmapElevationProvider
::
lat2tileY
(
const
double
lat
,
const
int
z
)
const
{
Q_UNUSED
(
z
)
return
static_cast
<
int
>
(
floor
((
lat
+
90.0
)
/
srtm1TileSize
));
}
QString
AirmapElevationProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
Q_UNUSED
(
zoom
);
return
QString
(
"https://api.airmap.com/elevation/v1/ele/"
"carpet?points=%1,%2,%3,%4"
)
QString
AirmapElevationProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
Q_UNUSED
(
zoom
)
return
QString
(
"https://api.airmap.com/elevation/v1/ele/carpet?points=%1,%2,%3,%4"
)
.
arg
(
static_cast
<
double
>
(
y
)
*
srtm1TileSize
-
90.0
)
.
arg
(
static_cast
<
double
>
(
x
)
*
srtm1TileSize
-
180.0
)
.
arg
(
static_cast
<
double
>
(
y
+
1
)
*
srtm1TileSize
-
90.0
)
.
arg
(
static_cast
<
double
>
(
x
+
1
)
*
srtm1TileSize
-
180.0
);
}
QGCTileSet
AirmapElevationProvider
::
getTileCount
(
int
zoom
,
double
topleftLon
,
double
topleftLat
,
double
bottomRightLon
,
double
bottomRightLat
)
{
QGCTileSet
AirmapElevationProvider
::
getTileCount
(
const
int
zoom
,
const
double
topleftLon
,
const
double
topleftLat
,
const
double
bottomRightLon
,
const
double
bottomRightLat
)
const
{
QGCTileSet
set
;
set
.
tileX0
=
long2tileX
(
topleftLon
,
zoom
);
set
.
tileY0
=
lat2tileY
(
bottomRightLat
,
zoom
);
...
...
src/QtLocationPlugin/ElevationMapProvider.h
View file @
68164ca8
...
...
@@ -10,24 +10,17 @@
#include <QPoint>
#include <QString>
const
quint32
AVERAGE_AIRMAP_ELEV_SIZE
=
2786
;
static
const
quint32
AVERAGE_AIRMAP_ELEV_SIZE
=
2786
;
//-----------------------------------------------------------------------------
const
double
srtm1TileSize
=
0
.
01
;
static
const
double
srtm1TileSize
=
0
.
01
;
class
ElevationProvider
:
public
MapProvider
{
Q_OBJECT
public:
ElevationProvider
(
QString
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
);
ElevationProvider
(
const
QString
&
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
=
nullptr
);
~
ElevationProvider
();
bool
_isElevationProvider
(){
return
true
;}
protected:
// Define the url to Request
virtual
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
=
0
;
virtual
bool
_isElevationProvider
()
const
override
{
return
true
;
}
};
// -----------------------------------------------------------
...
...
@@ -36,19 +29,19 @@ class ElevationProvider : public MapProvider {
class
AirmapElevationProvider
:
public
ElevationProvider
{
Q_OBJECT
public:
AirmapElevationProvider
(
QObject
*
parent
)
:
ElevationProvider
(
QString
(
"bin"
),
AVERAGE_AIRMAP_ELEV_SIZE
,
AirmapElevationProvider
(
QObject
*
parent
=
nullptr
)
:
ElevationProvider
(
QString
Literal
(
"bin"
),
AVERAGE_AIRMAP_ELEV_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
int
long2tileX
(
double
lon
,
int
z
);
int
lat2tileY
(
double
lat
,
int
z
);
QGCTileSet
getTileCount
(
int
zoom
,
double
topleftLon
,
double
topleftLat
,
double
bottomRightLon
,
double
bottomRightLat
);
int
long2tileX
(
const
double
lon
,
const
int
z
)
const
override
;
int
lat2tileY
(
const
double
lat
,
const
int
z
)
const
override
;
QGCTileSet
getTileCount
(
const
int
zoom
,
const
double
topleftLon
,
const
double
topleftLat
,
const
double
bottomRightLon
,
const
double
bottomRightLat
)
const
override
;
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
src/QtLocationPlugin/EsriMapProvider.cpp
View file @
68164ca8
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "EsriMapProvider.h"
#include "QGCApplication.h"
#include "QGCMapEngine.h"
#include "SettingsManager.h"
QNetworkRequest
EsriMapProvider
::
getTileURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
EsriMapProvider
::
EsriMapProvider
(
const
quint32
averageSize
,
const
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
)
:
MapProvider
(
QString
(),
QString
(),
averageSize
,
mapType
,
parent
)
{}
QNetworkRequest
EsriMapProvider
::
getTileURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
//-- Build URL
QNetworkRequest
request
;
QString
url
=
_getURL
(
x
,
y
,
zoom
,
networkManager
);
const
QString
url
=
_getURL
(
x
,
y
,
zoom
,
networkManager
);
if
(
url
.
isEmpty
())
{
return
request
;
}
request
.
setUrl
(
QUrl
(
url
));
request
.
setRawHeader
(
"Accept"
,
"*/*"
);
QByteArray
token
=
qgcApp
()
->
toolbox
()
->
settingsManager
()
->
appSettings
()
->
esriToken
()
->
rawValue
()
.
toString
()
.
toLatin1
();
request
.
setRawHeader
(
"User-Agent"
,
QByteArrayLiteral
(
"Qt Location based application"
));
request
.
setRawHeader
(
"User-Token"
,
token
);
request
.
setRawHeader
(
QByteArrayLiteral
(
"Accept"
),
QByteArrayLiteral
(
"*/*"
));
const
QByteArray
token
=
qgcApp
()
->
toolbox
()
->
settingsManager
()
->
appSettings
()
->
esriToken
()
->
rawValue
().
toString
().
toLatin1
();
request
.
setRawHeader
(
QByteArrayLiteral
(
"User-Agent"
),
QByteArrayLiteral
(
"Qt Location based application"
));
request
.
setRawHeader
(
QByteArrayLiteral
(
"User-Token"
),
token
);
return
request
;
}
QString
EsriWorldStreetMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
return
QString
(
"http://services.arcgisonline.com/ArcGIS/rest/services/"
"World_Street_Map/MapServer/tile/%1/%2/%3"
)
.
arg
(
zoom
)
.
arg
(
y
)
.
arg
(
x
);
static
const
QString
WorldStreetMapUrl
=
QStringLiteral
(
"http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/%1/%2/%3"
);
QString
EsriWorldStreetMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
return
WorldStreetMapUrl
.
arg
(
zoom
).
arg
(
y
).
arg
(
x
);
}
QString
EsriWorldSatelliteMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
return
QString
(
"http://server.arcgisonline.com/ArcGIS/rest/"
"services/World_Imagery/MapServer/tile/%1/%2/%3"
)
.
arg
(
zoom
)
.
arg
(
y
)
.
arg
(
x
);
static
const
QString
WorldSatelliteMapUrl
=
QStringLiteral
(
"http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/%1/%2/%3"
);
QString
EsriWorldSatelliteMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
return
WorldSatelliteMapUrl
.
arg
(
zoom
).
arg
(
y
).
arg
(
x
);
}
QString
EsriTerrainMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
return
QString
(
"http://server.arcgisonline.com/ArcGIS/rest/services/"
"World_Terrain_Base/MapServer/tile/%1/%2/%3"
)
.
arg
(
zoom
)
.
arg
(
y
)
.
arg
(
x
);
static
const
QString
TerrainMapUrl
=
QStringLiteral
(
"http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/%1/%2/%3"
);
QString
EsriTerrainMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
return
TerrainMapUrl
.
arg
(
zoom
).
arg
(
y
).
arg
(
x
);
}
src/QtLocationPlugin/EsriMapProvider.h
View file @
68164ca8
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class
EsriMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
using
MapProvider
::
MapProvider
;
EsriMapProvider
(
const
quint32
averageSize
,
const
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
=
nullptr
)
;
QNetworkRequest
getTileURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QNetworkRequest
getTileURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
class
EsriWorldStreetMapProvider
:
public
EsriMapProvider
{
Q_OBJECT
public:
EsriWorldStreetMapProvider
(
QObject
*
parent
)
:
EsriMapProvider
(
QString
(
""
),
QString
(
""
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
EsriWorldStreetMapProvider
(
QObject
*
parent
=
nullptr
)
:
EsriMapProvider
(
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
class
EsriWorldSatelliteMapProvider
:
public
EsriMapProvider
{
Q_OBJECT
public:
EsriWorldSatelliteMapProvider
(
QObject
*
parent
)
:
EsriMapProvider
(
QString
(
""
),
QString
(
""
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
EsriWorldSatelliteMapProvider
(
QObject
*
parent
=
nullptr
)
:
EsriMapProvider
(
AVERAGE_TILE_SIZE
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{}
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
class
EsriTerrainMapProvider
:
public
EsriMapProvider
{
Q_OBJECT
public:
EsriTerrainMapProvider
(
QObject
*
parent
)
:
EsriMapProvider
(
QString
(
""
),
QString
(
""
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
TerrainMap
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
EsriTerrainMapProvider
(
QObject
*
parent
=
nullptr
)
:
EsriMapProvider
(
AVERAGE_TILE_SIZE
,
QGeoMapType
::
TerrainMap
,
parent
)
{}
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
src/QtLocationPlugin/GenericMapProvider.cpp
View file @
68164ca8
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "GenericMapProvider.h"
#include "QGCMapEngine.h"
QString
StatkartMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
return
QString
(
"http://opencache.statkart.no/gatekeeper/gk/"
"gk.open_gmaps?layers=topo4&zoom=%1&x=%2&y=%3"
)
.
arg
(
zoom
)
.
arg
(
x
)
.
arg
(
y
);
static
const
QString
StatkartMapUrl
=
QStringLiteral
(
"http://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom=%1&x=%2&y=%3"
);
QString
StatkartMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
return
StatkartMapUrl
.
arg
(
zoom
).
arg
(
x
).
arg
(
y
);
}
QString
EniroMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
return
QString
(
"http://map.eniro.com/geowebcache/service/tms1.0.0/map/%1/"
"%2/%3.png"
)
.
arg
(
zoom
)
.
arg
(
x
)
.
arg
((
1
<<
zoom
)
-
1
-
y
);
static
const
QString
EniroMapUrl
=
QStringLiteral
(
"http://map.eniro.com/geowebcache/service/tms1.0.0/map/%1/%2/%3.png"
);
QString
EniroMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
return
EniroMapUrl
.
arg
(
zoom
).
arg
(
x
).
arg
((
1
<<
zoom
)
-
1
-
y
);
}
QString
MapQuestMapMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
char
letter
=
"1234"
[
_getServerNum
(
x
,
y
,
4
)];
return
QString
(
"http://otile%1.mqcdn.com/tiles/1.0.0/map/%2/%3/%4.jpg"
)
.
arg
(
letter
)
.
arg
(
zoom
)
.
arg
(
x
)
.
arg
(
y
);
static
const
QString
MapQuestMapUrl
=
QStringLiteral
(
"http://otile%1.mqcdn.com/tiles/1.0.0/map/%2/%3/%4.jpg"
);
QString
MapQuestMapMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
return
MapQuestMapUrl
.
arg
(
_getServerNum
(
x
,
y
,
4
)).
arg
(
zoom
).
arg
(
x
).
arg
(
y
);
}
QString
MapQuestSatMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
char
letter
=
"1234"
[
_getServerNum
(
x
,
y
,
4
)];
return
QString
(
"http://otile%1.mqcdn.com/tiles/1.0.0/sat/%2/%3/%4.jpg"
)
.
arg
(
letter
)
.
arg
(
zoom
)
.
arg
(
x
)
.
arg
(
y
);
static
const
QString
MapQuestSatUrl
=
QStringLiteral
(
"http://otile%1.mqcdn.com/tiles/1.0.0/sat/%2/%3/%4.jpg"
);
QString
MapQuestSatMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
return
MapQuestSatUrl
.
arg
(
_getServerNum
(
x
,
y
,
4
)).
arg
(
zoom
).
arg
(
x
).
arg
(
y
);
}
QString
VWorldStreetMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
int
gap
=
zoom
-
6
;
int
x_min
=
53
*
pow
(
2
,
gap
);
int
x_max
=
55
*
pow
(
2
,
gap
)
+
(
2
*
gap
-
1
);
int
y_min
=
22
*
pow
(
2
,
gap
);
int
y_max
=
26
*
pow
(
2
,
gap
)
+
(
2
*
gap
-
1
);
QString
VWorldStreetMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
const
int
gap
=
zoom
-
6
;
const
int
x_min
=
int
(
53
*
pow
(
2
,
gap
));
const
int
x_max
=
int
(
55
*
pow
(
2
,
gap
)
+
(
2
*
gap
-
1
));
const
int
y_min
=
int
(
22
*
pow
(
2
,
gap
));
const
int
y_max
=
int
(
26
*
pow
(
2
,
gap
)
+
(
2
*
gap
-
1
));
if
(
zoom
>
19
)
{
return
{};
}
else
if
(
zoom
>
5
&&
x
>=
x_min
&&
x
<=
x_max
&&
y
>=
y_min
&&
y
<=
y_max
)
{
return
QString
(
"http://xdworld.vworld.kr:8080/2d/Base/service/%1/%2/%3.png"
)
.
arg
(
zoom
)
.
arg
(
x
)
.
arg
(
y
);
return
QString
();
}
else
if
(
zoom
>
5
&&
x
>=
x_min
&&
x
<=
x_max
&&
y
>=
y_min
&&
y
<=
y_max
)
{
return
QString
(
QStringLiteral
(
"http://xdworld.vworld.kr:8080/2d/Base/service/%1/%2/%3.png"
)).
arg
(
zoom
,
x
,
y
);
}
else
{
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
QString
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/"
"r%2.png?g=%3&mkt=%4"
)
.
arg
(
_getServerNum
(
x
,
y
,
4
))
.
arg
(
key
)
.
arg
(
_versionBingMaps
)
.
arg
(
_language
);
const
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
QString
(
QStringLiteral
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/r%2.png?g=%3&mkt=%4"
))
.
arg
(
_getServerNum
(
x
,
y
,
4
)).
arg
(
key
,
_versionBingMaps
,
_language
);
}
}
QString
VWorldSatMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
int
gap
=
zoom
-
6
;
int
x_min
=
53
*
pow
(
2
,
gap
);
int
x_max
=
55
*
pow
(
2
,
gap
)
+
(
2
*
gap
-
1
);
int
y_min
=
22
*
pow
(
2
,
gap
);
int
y_max
=
26
*
pow
(
2
,
gap
)
+
(
2
*
gap
-
1
);
QString
VWorldSatMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
const
int
gap
=
zoom
-
6
;
const
int
x_min
=
int
(
53
*
pow
(
2
,
gap
));
const
int
x_max
=
int
(
55
*
pow
(
2
,
gap
)
+
(
2
*
gap
-
1
));
const
int
y_min
=
int
(
22
*
pow
(
2
,
gap
));
const
int
y_max
=
int
(
26
*
pow
(
2
,
gap
)
+
(
2
*
gap
-
1
));
if
(
zoom
>
19
)
{
return
{};
}
else
if
(
zoom
>
5
&&
x
>=
x_min
&&
x
<=
x_max
&&
y
>=
y_min
&&
y
<=
y_max
)
{
return
QString
(
"http://xdworld.vworld.kr:8080/2d/Satellite/service/%1/"
"%2/%3.jpeg"
)
.
arg
(
zoom
)
.
arg
(
x
)
.
arg
(
y
);
return
QString
();
}
else
if
(
zoom
>
5
&&
x
>=
x_min
&&
x
<=
x_max
&&
y
>=
y_min
&&
y
<=
y_max
)
{
return
QString
(
"http://xdworld.vworld.kr:8080/2d/Satellite/service/%1/%2/%3.jpeg"
).
arg
(
zoom
,
x
,
y
);
}
else
{
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
QString
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/"
"a%2.jpeg?g=%3&mkt=%4"
)
.
arg
(
_getServerNum
(
x
,
y
,
4
))
.
arg
(
key
)
.
arg
(
_versionBingMaps
)
.
arg
(
_language
);
const
QString
key
=
_tileXYToQuadKey
(
x
,
y
,
zoom
);
return
QString
(
"http://ecn.t%1.tiles.virtualearth.net/tiles/a%2.jpeg?g=%3&mkt=%4"
)
.
arg
(
_getServerNum
(
x
,
y
,
4
)).
arg
(
key
,
_versionBingMaps
,
_language
);
}
}
src/QtLocationPlugin/GenericMapProvider.h
View file @
68164ca8
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "MapProvider.h"
#include <cmath>
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class
StatkartMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
StatkartMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://www.norgeskart.no/"
),
QString
(
"png"
),
StatkartMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapProvider
(
QString
Literal
(
"https://www.norgeskart.no/"
),
QStringLiteral
(
"png"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
class
EniroMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
EniroMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://www.eniro.se/"
),
QString
(
"png"
),
EniroMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapProvider
(
QString
Literal
(
"https://www.eniro.se/"
),
QStringLiteral
(
"png"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
class
MapQuestMapMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
MapQuestMapMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://mapquest.com"
),
QString
(
"jpg"
),
MapQuestMapMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapProvider
(
QString
Literal
(
"https://mapquest.com"
),
QStringLiteral
(
"jpg"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
class
MapQuestSatMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
MapQuestSatMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://mapquest.com"
),
QString
(
"jpg"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{
}
MapQuestSatMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapProvider
(
QStringLiteral
(
"https://mapquest.com"
),
QStringLiteral
(
"jpg"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
class
VWorldStreetMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
VWorldStreetMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"www.vworld.kr"
),
QString
(
"png"
),
VWorldStreetMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapProvider
(
QString
Literal
(
"www.vworld.kr"
),
QStringLiteral
(
"png"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
private:
const
QString
_versionBingMaps
=
"563"
;
const
QString
_versionBingMaps
=
QStringLiteral
(
"563"
)
;
};
class
VWorldSatMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
VWorldSatMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"www.vworld.kr"
),
QString
(
"jpg"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{
}
VWorldSatMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapProvider
(
QStringLiteral
(
"www.vworld.kr"
),
QStringLiteral
(
"jpg"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
private:
const
QString
_versionBingMaps
=
"563"
;
const
QString
_versionBingMaps
=
QStringLiteral
(
"563"
)
;
};
src/QtLocationPlugin/GoogleMapProvider.cpp
View file @
68164ca8
This diff is collapsed.
Click to expand it.
src/QtLocationPlugin/GoogleMapProvider.h
View file @
68164ca8
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
class
GoogleMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
GoogleMapProvider
(
QString
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
);
public:
GoogleMapProvider
(
const
QString
&
imageFormat
,
const
quint32
averageSize
,
const
QGeoMapType
::
MapStyle
_mapType
,
QObject
*
parent
=
nullptr
);
~
GoogleMapProvider
();
// Google Specific private slots
private
slots
:
private
slots
:
void
_networkReplyError
(
QNetworkReply
::
NetworkError
error
);
void
_googleVersionCompleted
();
void
_replyDestroyed
();
protected:
// Define the url to Request
virtual
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
=
0
;
protected:
// Google Specific private methods
void
_getSecGoogleWords
(
int
x
,
int
y
,
QString
&
sec1
,
QString
&
sec2
)
;
void
_getSecGoogleWords
(
const
int
x
,
const
int
y
,
QString
&
sec1
,
QString
&
sec2
)
const
;
void
_tryCorrectGoogleVersions
(
QNetworkAccessManager
*
networkManager
);
// Google Specific attributes
...
...
@@ -57,23 +58,22 @@ class GoogleMapProvider : public MapProvider {
// CycleMap,
// CustomMap = 100
const
quint32
AVERAGE_GOOGLE_STREET_MAP
=
4913
;
const
quint32
AVERAGE_GOOGLE_SAT_MAP
=
56887
;
const
quint32
AVERAGE_GOOGLE_TERRAIN_MAP
=
19391
;
static
const
quint32
AVERAGE_GOOGLE_STREET_MAP
=
4913
;
static
const
quint32
AVERAGE_GOOGLE_SAT_MAP
=
56887
;
static
const
quint32
AVERAGE_GOOGLE_TERRAIN_MAP
=
19391
;
// -----------------------------------------------------------
// Google Street Map
class
GoogleStreetMapProvider
:
public
GoogleMapProvider
{
Q_OBJECT
public:
GoogleStreetMapProvider
(
QObject
*
parent
)
:
GoogleMapProvider
(
QString
(
"png"
),
AVERAGE_GOOGLE_STREET_MAP
,
QGeoMapType
::
StreetMap
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
public:
GoogleStreetMapProvider
(
QObject
*
parent
=
nullptr
)
:
GoogleMapProvider
(
QStringLiteral
(
"png"
),
AVERAGE_GOOGLE_STREET_MAP
,
QGeoMapType
::
StreetMap
,
parent
)
{}
protected:
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
// -----------------------------------------------------------
...
...
@@ -81,14 +81,14 @@ class GoogleStreetMapProvider : public GoogleMapProvider {
class
GoogleSatelliteMapProvider
:
public
GoogleMapProvider
{
Q_OBJECT
public:
GoogleSatelliteMapProvider
(
QObject
*
parent
)
:
GoogleMapProvider
(
QString
(
"jpg"
),
AVERAGE_GOOGLE_SAT_MAP
,
public:
GoogleSatelliteMapProvider
(
QObject
*
parent
=
nullptr
)
:
GoogleMapProvider
(
QStringLiteral
(
"jpg"
),
AVERAGE_GOOGLE_SAT_MAP
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
protected:
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
// -----------------------------------------------------------
...
...
@@ -96,14 +96,13 @@ class GoogleSatelliteMapProvider : public GoogleMapProvider {
class
GoogleLabelsMapProvider
:
public
GoogleMapProvider
{
Q_OBJECT
public:
GoogleLabelsMapProvider
(
QObject
*
parent
)
:
GoogleMapProvider
(
QString
(
"png"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
public:
GoogleLabelsMapProvider
(
QObject
*
parent
=
nullptr
)
:
GoogleMapProvider
(
QStringLiteral
(
"png"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
protected:
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
// -----------------------------------------------------------
...
...
@@ -111,14 +110,13 @@ class GoogleLabelsMapProvider : public GoogleMapProvider {
class
GoogleTerrainMapProvider
:
public
GoogleMapProvider
{
Q_OBJECT
public:
GoogleTerrainMapProvider
(
QObject
*
parent
)
:
GoogleMapProvider
(
QString
(
"png"
),
AVERAGE_GOOGLE_TERRAIN_MAP
,
QGeoMapType
::
TerrainMap
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
public:
GoogleTerrainMapProvider
(
QObject
*
parent
=
nullptr
)
:
GoogleMapProvider
(
QStringLiteral
(
"png"
),
AVERAGE_GOOGLE_TERRAIN_MAP
,
QGeoMapType
::
TerrainMap
,
parent
)
{}
protected:
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
// -----------------------------------------------------------
...
...
@@ -126,12 +124,11 @@ class GoogleTerrainMapProvider : public GoogleMapProvider {
class
GoogleHybridMapProvider
:
public
GoogleMapProvider
{
Q_OBJECT
public:
GoogleHybridMapProvider
(
QObject
*
parent
)
:
GoogleMapProvider
(
QString
(
"png"
),
AVERAGE_GOOGLE_SAT_MAP
,
QGeoMapType
::
HybridMap
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
public:
GoogleHybridMapProvider
(
QObject
*
parent
=
nullptr
)
:
GoogleMapProvider
(
QStringLiteral
(
"png"
),
AVERAGE_GOOGLE_SAT_MAP
,
QGeoMapType
::
HybridMap
,
parent
)
{}
protected:
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
};
src/QtLocationPlugin/MapProvider.cpp
View file @
68164ca8
...
...
@@ -34,9 +34,9 @@ QNetworkRequest MapProvider::getTileURL(const int x, const int y, const int zoom
return
request
;
}
request
.
setUrl
(
QUrl
(
url
));
request
.
setRawHeader
(
"Accept"
,
"*/*"
);
request
.
setRawHeader
(
"Referrer"
,
_referrer
.
toUtf8
());
request
.
setRawHeader
(
"User-Agent"
,
_userAgent
);
request
.
setRawHeader
(
QByteArrayLiteral
(
"Accept"
),
QByteArrayLiteral
(
"*/*"
)
);
request
.
setRawHeader
(
QByteArrayLiteral
(
"Referrer"
)
,
_referrer
.
toUtf8
());
request
.
setRawHeader
(
QByteArrayLiteral
(
"User-Agent"
)
,
_userAgent
);
return
request
;
}
...
...
@@ -56,7 +56,7 @@ QString MapProvider::getImageFormat(const QByteArray& image) const {
return
format
;
}
QString
MapProvider
::
_tileXYToQuadKey
(
const
int
tileX
,
const
int
tileY
,
const
int
levelOfDetail
)
{
QString
MapProvider
::
_tileXYToQuadKey
(
const
int
tileX
,
const
int
tileY
,
const
int
levelOfDetail
)
const
{
QString
quadKey
;
for
(
int
i
=
levelOfDetail
;
i
>
0
;
i
--
)
{
char
digit
=
'0'
;
...
...
@@ -73,7 +73,7 @@ QString MapProvider::_tileXYToQuadKey(const int tileX, const int tileY, const in
return
quadKey
;
}
int
MapProvider
::
_getServerNum
(
const
int
x
,
const
int
y
,
const
int
max
)
{
int
MapProvider
::
_getServerNum
(
const
int
x
,
const
int
y
,
const
int
max
)
const
{
return
(
x
+
2
*
y
)
%
max
;
}
...
...
@@ -89,7 +89,9 @@ int MapProvider::lat2tileY(const double lat, const int z) const {
2.0
*
pow
(
2.0
,
z
)));
}
bool
MapProvider
::
_isElevationProvider
()
{
return
false
;
}
bool
MapProvider
::
_isElevationProvider
()
const
{
return
false
;
}
QGCTileSet
MapProvider
::
getTileCount
(
const
int
zoom
,
const
double
topleftLon
,
const
double
topleftLat
,
const
double
bottomRightLon
,
...
...
src/QtLocationPlugin/MapProvider.h
View file @
68164ca8
...
...
@@ -21,7 +21,7 @@ static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A
static
const
unsigned
char
jpegSignature
[]
=
{
0xFF
,
0xD8
,
0xFF
,
0x00
};
static
const
unsigned
char
gifSignature
[]
=
{
0x47
,
0x49
,
0x46
,
0x38
,
0x00
};
const
quint32
AVERAGE_TILE_SIZE
=
13652
;
static
const
quint32
AVERAGE_TILE_SIZE
=
13652
;
class
QNetworkRequest
;
class
QNetworkAccessManager
;
...
...
@@ -31,9 +31,9 @@ class MapProvider : public QObject {
public:
MapProvider
(
const
QString
&
referrer
,
const
QString
&
imageFormat
,
const
quint32
averageSize
,
const
QGeoMapType
::
MapStyle
_
mapType
=
QGeoMapType
::
CustomMap
,
QObject
*
parent
=
nullptr
);
const
QGeoMapType
::
MapStyle
mapType
=
QGeoMapType
::
CustomMap
,
QObject
*
parent
=
nullptr
);
QNetworkRequest
getTileURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
);
virtual
QNetworkRequest
getTileURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
getImageFormat
(
const
QByteArray
&
image
)
const
;
...
...
@@ -45,15 +45,15 @@ public:
virtual
int
lat2tileY
(
const
double
lat
,
const
int
z
)
const
;
virtual
bool
_isElevationProvider
();
virtual
bool
_isElevationProvider
()
const
;
virtual
QGCTileSet
getTileCount
(
const
int
zoom
,
const
double
topleftLon
,
const
double
topleftLat
,
const
double
bottomRightLon
,
const
double
bottomRightLat
)
const
;
protected:
QString
_tileXYToQuadKey
(
const
int
tileX
,
const
int
tileY
,
const
int
levelOfDetail
);
int
_getServerNum
(
const
int
x
,
const
int
y
,
const
int
max
);
protected:
QString
_tileXYToQuadKey
(
const
int
tileX
,
const
int
tileY
,
const
int
levelOfDetail
)
const
;
int
_getServerNum
(
const
int
x
,
const
int
y
,
const
int
max
)
const
;
// Define the url to Request
virtual
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
=
0
;
...
...
src/QtLocationPlugin/MapboxMapProvider.cpp
View file @
68164ca8
...
...
@@ -3,33 +3,19 @@
#include "QGCMapEngine.h"
#include "SettingsManager.h"
MapboxMapProvider
::
MapboxMapProvider
(
QString
mapName
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://www.mapbox.com/"
),
QString
(
"jpg"
),
averageSize
,
mapType
,
parent
),
mapboxName
(
mapName
)
{
static
const
QString
MapBoxUrl
=
QStringLiteral
(
"https://api.mapbox.com/v4/%1/%2/%3/%4.jpg80?access_token=%5"
);
MapboxMapProvider
::
MapboxMapProvider
(
const
QString
&
mapName
,
const
quint32
averageSize
,
const
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
)
:
MapProvider
(
QStringLiteral
(
"https://www.mapbox.com/"
),
QStringLiteral
(
"jpg"
),
averageSize
,
mapType
,
parent
)
,
_mapboxName
(
mapName
)
{
}
QString
MapboxMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
);
QString
mapBoxToken
=
qgcApp
()
->
toolbox
()
->
settingsManager
()
->
appSettings
()
->
mapboxToken
()
->
rawValue
()
.
toString
();
QString
MapboxMapProvider
::
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
Q_UNUSED
(
networkManager
)
const
QString
mapBoxToken
=
qgcApp
()
->
toolbox
()
->
settingsManager
()
->
appSettings
()
->
mapboxToken
()
->
rawValue
().
toString
();
if
(
!
mapBoxToken
.
isEmpty
())
{
QString
server
=
"https://api.mapbox.com/v4/"
;
server
+=
mapboxName
;
server
+=
QString
(
"/%1/%2/%3.jpg80?access_token=%4"
)
.
arg
(
zoom
)
.
arg
(
x
)
.
arg
(
y
)
.
arg
(
mapBoxToken
);
return
server
;
return
MapBoxUrl
.
arg
(
_mapboxName
).
arg
(
zoom
).
arg
(
x
).
arg
(
y
).
arg
(
mapBoxToken
);
}
return
QString
(
""
);
return
QString
();
}
src/QtLocationPlugin/MapboxMapProvider.h
View file @
68164ca8
/****************************************************************************
*
* (c) 2009-2019 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "MapProvider.h"
#include <QByteArray>
#include <QMutex>
#include <QNetworkProxy>
#include <QNetworkReply>
#include <QPoint>
#include <QString>
const
quint32
AVERAGE_MAPBOX_SAT_MAP
=
15739
;
const
quint32
AVERAGE_MAPBOX_STREET_MAP
=
5648
;
static
const
quint32
AVERAGE_MAPBOX_SAT_MAP
=
15739
;
static
const
quint32
AVERAGE_MAPBOX_STREET_MAP
=
5648
;
class
MapboxMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
MapboxMapProvider
(
QString
mapName
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
);
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
protected:
QString
mapboxName
;
public:
MapboxMapProvider
(
const
QString
&
mapName
,
const
quint32
averageSize
,
const
QGeoMapType
::
MapStyle
mapType
,
QObject
*
parent
=
nullptr
);
protected:
QString
_getURL
(
const
int
x
,
const
int
y
,
const
int
zoom
,
QNetworkAccessManager
*
networkManager
)
override
;
QString
_mapboxName
;
};
class
MapboxStreetMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxStreetMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.streets"
,
AVERAGE_MAPBOX_STREET_MAP
,
public:
MapboxStreetMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.streets"
),
AVERAGE_MAPBOX_STREET_MAP
,
QGeoMapType
::
StreetMap
,
parent
)
{}
};
class
MapboxLightMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxLightMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.light"
,
AVERAGE_TILE_SIZE
,
public:
MapboxLightMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.light"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
class
MapboxDarkMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxDarkMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.dark"
,
AVERAGE_TILE_SIZE
,
public:
MapboxDarkMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.dark"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
class
MapboxSatelliteMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxSatelliteMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.satellite"
,
AVERAGE_MAPBOX_SAT_MAP
,
public:
MapboxSatelliteMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.satellite"
),
AVERAGE_MAPBOX_SAT_MAP
,
QGeoMapType
::
SatelliteMapDay
,
parent
)
{}
};
class
MapboxHybridMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxHybridMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.hybrid"
,
AVERAGE_MAPBOX_SAT_MAP
,
public:
MapboxHybridMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.hybrid"
),
AVERAGE_MAPBOX_SAT_MAP
,
QGeoMapType
::
HybridMap
,
parent
)
{}
};
class
MapboxWheatPasteMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxWheatPasteMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.wheatpaste"
,
AVERAGE_TILE_SIZE
,
public:
MapboxWheatPasteMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.wheatpaste"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
class
MapboxStreetsBasicMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxStreetsBasicMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.streets-basic"
,
AVERAGE_TILE_SIZE
,
public:
MapboxStreetsBasicMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.streets-basic"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
};
class
MapboxComicMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxComicMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.comic"
,
AVERAGE_TILE_SIZE
,
public:
MapboxComicMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.comic"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
class
MapboxOutdoorsMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxOutdoorsMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.outdoors"
,
AVERAGE_TILE_SIZE
,
public:
MapboxOutdoorsMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.outdoors"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
class
MapboxRunBikeHikeMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxRunBikeHikeMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.run-bike-hike"
,
AVERAGE_MAPBOX_STREET_MAP
,
public:
MapboxRunBikeHikeMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.run-bike-hike"
),
AVERAGE_MAPBOX_STREET_MAP
,
QGeoMapType
::
CycleMap
,
parent
)
{}
};
class
MapboxPencilMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxPencilMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.pencil"
,
AVERAGE_TILE_SIZE
,
public:
MapboxPencilMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.pencil"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
class
MapboxPiratesMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxPiratesMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.pirates"
,
AVERAGE_TILE_SIZE
,
public:
MapboxPiratesMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.pirates"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
class
MapboxEmeraldMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxEmeraldMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.emerald"
,
AVERAGE_TILE_SIZE
,
public:
MapboxEmeraldMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.emerald"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
class
MapboxHighContrastMapProvider
:
public
MapboxMapProvider
{
Q_OBJECT
public:
MapboxHighContrastMapProvider
(
QObject
*
parent
)
:
MapboxMapProvider
(
"mapbox.high-contrast"
,
AVERAGE_TILE_SIZE
,
public:
MapboxHighContrastMapProvider
(
QObject
*
parent
=
nullptr
)
:
MapboxMapProvider
(
QStringLiteral
(
"mapbox.high-contrast"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
CustomMap
,
parent
)
{}
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment