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
671987ba
Commit
671987ba
authored
Sep 16, 2019
by
Pierre TILAK
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Create generic, add Eniro and Esri
parent
8313f8e8
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
185 additions
and
39 deletions
+185
-39
EsriMapProvider.cpp
src/QtLocationPlugin/EsriMapProvider.cpp
+61
-0
EsriMapProvider.h
src/QtLocationPlugin/EsriMapProvider.h
+49
-0
GenericMapProvider.cpp
src/QtLocationPlugin/GenericMapProvider.cpp
+10
-11
GenericMapProvider.h
src/QtLocationPlugin/GenericMapProvider.h
+32
-0
MapProvider.h
src/QtLocationPlugin/MapProvider.h
+14
-14
QGCLocationPlugin.pri
src/QtLocationPlugin/QGCLocationPlugin.pri
+4
-2
QGCMapUrlEngine.cpp
src/QtLocationPlugin/QGCMapUrlEngine.cpp
+13
-11
QGCMapUrlEngine.h
src/QtLocationPlugin/QGCMapUrlEngine.h
+2
-1
No files found.
src/QtLocationPlugin/EsriMapProvider.cpp
0 → 100644
View file @
671987ba
#include "EsriMapProvider.h"
#include "QGCApplication.h"
#include "QGCMapEngine.h"
#include "SettingsManager.h"
QNetworkRequest
EsriMapProvider
::
getTileURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
//-- Build URL
QNetworkRequest
request
;
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
);
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
);
}
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
);
}
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
);
}
src/QtLocationPlugin/EsriMapProvider.h
0 → 100644
View file @
671987ba
#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
;
QNetworkRequest
getTileURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
};
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
);
};
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
);
};
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
);
};
src/QtLocationPlugin/
Statkart
MapProvider.cpp
→
src/QtLocationPlugin/
Generic
MapProvider.cpp
View file @
671987ba
#include "StatkartMapProvider.h"
#if defined(DEBUG_GOOGLE_MAPS)
#include <QFile>
#include <QStandardPaths>
#endif
#include "QGCMapEngine.h"
StatkartMapProvider
::
StatkartMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://www.norgeskart.no/"
),
QString
(
"png"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
StatkartMapProvider
::~
StatkartMapProvider
()
{}
#include "GenericMapProvider.h"
QString
StatkartMapProvider
::
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
)
{
...
...
@@ -21,3 +11,12 @@ QString StatkartMapProvider::_getURL(int x, int y, int zoom,
.
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
);
}
src/QtLocationPlugin/
Statkart
MapProvider.h
→
src/QtLocationPlugin/
Generic
MapProvider.h
View file @
671987ba
...
...
@@ -10,14 +10,23 @@
#include <QString>
class
StatkartMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
StatkartMapProvider
(
QObject
*
parent
);
~
StatkartMapProvider
();
StatkartMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://www.norgeskart.no/"
),
QString
(
"png"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
protected:
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
};
class
EniroMapProvider
:
public
MapProvider
{
Q_OBJECT
public:
EniroMapProvider
(
QObject
*
parent
)
:
MapProvider
(
QString
(
"https://www.eniro.se/"
),
QString
(
"png"
),
AVERAGE_TILE_SIZE
,
QGeoMapType
::
StreetMap
,
parent
)
{}
QString
_getURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
};
src/QtLocationPlugin/MapProvider.h
View file @
671987ba
...
...
@@ -11,37 +11,37 @@ static const unsigned char pngSignature[] = {0x89, 0x50, 0x4E, 0x47, 0x0D,
static
const
unsigned
char
jpegSignature
[]
=
{
0xFF
,
0xD8
,
0xFF
,
0x00
};
static
const
unsigned
char
gifSignature
[]
=
{
0x47
,
0x49
,
0x46
,
0x38
,
0x00
};
const
quint32
AVERAGE_MAPBOX_SAT_MAP
=
15739
;
const
quint32
AVERAGE_MAPBOX_STREET_MAP
=
5648
;
const
quint32
AVERAGE_TILE_SIZE
=
13652
;
const
quint32
AVERAGE_AIRMAP_ELEV_SIZE
=
2786
;
const
quint32
AVERAGE_MAPBOX_SAT_MAP
=
15739
;
const
quint32
AVERAGE_MAPBOX_STREET_MAP
=
5648
;
const
quint32
AVERAGE_TILE_SIZE
=
13652
;
const
quint32
AVERAGE_AIRMAP_ELEV_SIZE
=
2786
;
class
MapProvider
:
public
QObject
{
Q_OBJECT
public:
MapProvider
(
QString
referrer
,
QString
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
_mapType
=
QGeoMapType
::
CustomMap
,
QObject
*
parent
=
nullptr
);
MapProvider
(
QString
referrer
,
QString
imageFormat
,
quint32
averageSize
,
QGeoMapType
::
MapStyle
_mapType
=
QGeoMapType
::
CustomMap
,
QObject
*
parent
=
nullptr
);
QNetworkRequest
getTileURL
(
int
x
,
int
y
,
int
zoom
,
QNetworkAccessManager
*
networkManager
);
QString
getImageFormat
(
const
QByteArray
&
image
);
quint32
getAverageSize
()
{
return
_averageSize
;
}
quint32
getAverageSize
()
{
return
_averageSize
;
}
QGeoMapType
::
MapStyle
getMapStyle
()
{
return
_mapType
;
}
QGeoMapType
::
MapStyle
getMapStyle
()
{
return
_mapType
;
}
protected:
QString
_tileXYToQuadKey
(
int
tileX
,
int
tileY
,
int
levelOfDetail
);
int
_getServerNum
(
int
x
,
int
y
,
int
max
);
// Define Referrer for Request RawHeader
QString
_referrer
;
QString
_imageFormat
;
quint32
_averageSize
;
QByteArray
_userAgent
;
QString
_language
;
QString
_referrer
;
QString
_imageFormat
;
quint32
_averageSize
;
QByteArray
_userAgent
;
QString
_language
;
QGeoMapType
::
MapStyle
_mapType
;
// Define the url to Request
...
...
src/QtLocationPlugin/QGCLocationPlugin.pri
View file @
671987ba
...
...
@@ -25,7 +25,8 @@ HEADERS += \
$$PWD/MapProvider.h \
$$PWD/GoogleMapProvider.h \
$$PWD/BingMapProvider.h \
$$PWD/StatkartMapProvider.h \
$$PWD/GenericMapProvider.h \
$$PWD/EsriMapProvider.h \
SOURCES += \
$$PWD/QGCMapEngine.cpp \
...
...
@@ -41,7 +42,8 @@ SOURCES += \
$$PWD/MapProvider.cpp \
$$PWD/GoogleMapProvider.cpp \
$$PWD/BingMapProvider.cpp \
$$PWD/StatkartMapProvider.cpp \
$$PWD/GenericMapProvider.cpp \
$$PWD/EsriMapProvider.cpp \
OTHER_FILES += \
$$PWD/qgc_maps_plugin.json
src/QtLocationPlugin/QGCMapUrlEngine.cpp
View file @
671987ba
...
...
@@ -37,19 +37,27 @@ UrlFactory::UrlFactory() : _timeout(5 * 1000) {
// BingMaps
//_versionBingMaps = "563";
// Warning : in _providersTable, keys needs to follow this format : "Provider Type"
// Warning : in _providersTable, keys needs to follow this format :
// "Provider Type"
#ifndef QGC_NO_GOOGLE_MAPS
_providersTable
[
"Google Street Map"
]
=
new
GoogleStreetMapProvider
(
this
);
_providersTable
[
"Google Satellite"
]
=
new
GoogleSatelliteMapProvider
(
this
);
_providersTable
[
"Google Terrain"
]
=
new
GoogleTerrainMapProvider
(
this
);
_providersTable
[
"Google Labels"
]
=
new
GoogleTerrainMapProvider
(
this
);
_providersTable
[
"Google Satellite"
]
=
new
GoogleSatelliteMapProvider
(
this
);
_providersTable
[
"Google Terrain"
]
=
new
GoogleTerrainMapProvider
(
this
);
_providersTable
[
"Google Labels"
]
=
new
GoogleTerrainMapProvider
(
this
);
#endif
_providersTable
[
"Bing Road"
]
=
new
BingRoadMapProvider
(
this
);
_providersTable
[
"Bing Satellite"
]
=
new
BingSatelliteMapProvider
(
this
);
_providersTable
[
"Bing Hybrid"
]
=
new
BingHybridMapProvider
(
this
);
_providersTable
[
"Statkart Topo"
]
=
new
StatkartMapProvider
(
this
);
_providersTable
[
"Statkart Topo"
]
=
new
StatkartMapProvider
(
this
);
_providersTable
[
"Eniro Topo"
]
=
new
EniroMapProvider
(
this
);
// To be add later on Token entry !
//_providersTable["Esri World Street"] = new EsriWorldStreetMapProvider(this);
//_providersTable["Esri World Satellite"] = new EsriWorldSatelliteMapProvider(this);
//_providersTable["Esri Terrain"] = new EsriTerrainMapProvider(this);
}
void
UrlFactory
::
registerProvider
(
QString
name
,
MapProvider
*
provider
)
{
...
...
@@ -219,7 +227,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager*
break;
case EniroTopo:
{
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);
}
break;
/*
...
...
@@ -274,11 +281,6 @@ UrlFactory::_getURL(QString type, int x, int y, int zoom, QNetworkAccessManager*
break;
*/
case EsriWorldStreet:
return QString("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/%1/%2/%3").arg(zoom).arg(y).arg(x);
case EsriWorldSatellite:
return QString("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/%1/%2/%3").arg(zoom).arg(y).arg(x);
case EsriTerrain:
return QString("http://server.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/tile/%1/%2/%3").arg(zoom).arg(y).arg(x);
case MapboxStreets:
case MapboxLight:
...
...
src/QtLocationPlugin/QGCMapUrlEngine.h
View file @
671987ba
...
...
@@ -18,7 +18,8 @@
#include "GoogleMapProvider.h"
#include "BingMapProvider.h"
#include "StatkartMapProvider.h"
#include "GenericMapProvider.h"
#include "EsriMapProvider.h"
#define MAX_MAP_ZOOM (20.0)
...
...
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