Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
671987ba
Commit
671987ba
authored
Sep 16, 2019
by
Pierre TILAK
Browse files
Create generic, add Eniro and Esri
parent
8313f8e8
Changes
8
Hide whitespace changes
Inline
Side-by-side
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
Supports
Markdown
0%
Try again
or
attach a new 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