From d043c24cdaa46fa6f0ed7daf7e75d89ba6faeeba Mon Sep 17 00:00:00 2001 From: WillRam Date: Wed, 26 Mar 2014 17:36:00 +1100 Subject: [PATCH 1/2] Copy of current OpenPilot file. Proxy fixed Proxy now follows system proxy --- libs/opmapcontrol/src/core/urlfactory.cpp | 77 +++++++++++++++++------ 1 file changed, 59 insertions(+), 18 deletions(-) diff --git a/libs/opmapcontrol/src/core/urlfactory.cpp b/libs/opmapcontrol/src/core/urlfactory.cpp index d6d0dc473fb..0e8d6eb4ba2 100644 --- a/libs/opmapcontrol/src/core/urlfactory.cpp +++ b/libs/opmapcontrol/src/core/urlfactory.cpp @@ -37,9 +37,9 @@ namespace core { /// /// timeout for map connections /// + QNetworkProxyFactory::setUseSystemConfiguration(true); - Proxy.setType(QNetworkProxy::NoProxy); - + /// /// Gets or sets the value of the User-agent HTTP header. /// @@ -54,19 +54,24 @@ namespace core { UrlFactory::~UrlFactory() { } + QString UrlFactory::TileXYToQuadKey(const int &tileX,const int &tileY,const int &levelOfDetail) const { QString quadKey; for(int i = levelOfDetail; i > 0; i--) { + + char digit = '0'; int mask = 1 << (i - 1); if((tileX & mask) != 0) { + digit++; } if((tileY & mask) != 0) { + digit++; digit++; } @@ -90,9 +95,19 @@ namespace core { void UrlFactory::TryCorrectGoogleVersions() { + static bool versionRetrieved = false; + + if (versionRetrieved) + { + + return; + } QMutexLocker locker(&mutex); if(CorrectGoogleVersions && !IsCorrectGoogleVersions()) { + + + QNetworkReply *reply; QNetworkRequest qheader; QNetworkAccessManager network; @@ -106,8 +121,8 @@ namespace core { #ifdef DEBUG_URLFACTORY qDebug()<<"Correct GoogleVersion"; #endif //DEBUG_URLFACTORY - setIsCorrectGoogleVersions(true); - QString url = "http://maps.google.com"; + //setIsCorrectGoogleVersions(true); + QString url = "https://maps.google.com"; qheader.setUrl(QUrl(url)); qheader.setRawHeader("User-Agent",UserAgent); @@ -116,6 +131,7 @@ namespace core { q.exec(); if(!tT.isActive()) return; + tT.stop(); if( (reply->error()!=QNetworkReply::NoError)) { @@ -125,28 +141,30 @@ namespace core { return; } QString html=QString(reply->readAll()); - QRegExp reg("\"*http://mt0.google.com/vt/lyrs=m@(\\d*)",Qt::CaseInsensitive); + QRegExp reg("\"*https://mts0.google.com/vt/lyrs=m@(\\d*)",Qt::CaseInsensitive); if(reg.indexIn(html)!=-1) { QStringList gc=reg.capturedTexts(); VersionGoogleMap = QString("m@%1").arg(gc[1]); VersionGoogleMapChina = VersionGoogleMap; + #ifdef DEBUG_URLFACTORY qDebug()<<"TryCorrectGoogleVersions, VersionGoogleMap: "<deleteLater(); + } } @@ -180,50 +200,52 @@ namespace core { #endif //DEBUG_URLFACTORY switch(type) { + case MapType::GoogleMap: { - QString server = "mt"; + QString server = "mts"; QString request = "vt"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleSatellite: { - QString server = "khm"; + QString server = "khms"; QString request = "kh"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + + return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleLabels: { - QString server = "mt"; + QString server = "mts"; QString request = "vt"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleTerrain: { - QString server = "mt"; + QString server = "mts"; QString request = "vt"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleMapChina: @@ -286,9 +308,13 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); + + + //http://mt3.gmaptiles.co.kr/mt/v=kr1.11&hl=lt&x=109&y=49&z=7&s= - QString ret = QString("http://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + + QString ret = QString("https://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); return ret; } break; @@ -300,6 +326,7 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); + // http://khm1.google.co.kr/kh/v=54&x=109&y=49&z=7&s= return QString("http://%1%2.google.co.kr/%3/v=%4&x=%5%6&y=%7&z=%8&s=%9").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatelliteKorea).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); @@ -313,9 +340,10 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); + // http://mt1.gmaptiles.co.kr/mt/v=kr1t.11&hl=lt&x=109&y=50&z=7&s=G - return QString("http://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabelsKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("https://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabelsKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::YahooMap: @@ -487,12 +515,14 @@ namespace core { sec2 = SecGoogleWord.left(seclen); if(pos.Y() >= 10000 && pos.Y() < 100000) { + sec1 = "&s="; } } QString UrlFactory::MakeGeocoderUrl(QString keywords) { QString key = keywords.replace(' ', '+'); + return QString("http://maps.google.com/maps/geo?q=%1&output=csv&key=%2").arg(key).arg(GoogleMapsAPIKey); } QString UrlFactory::MakeReverseGeocoderUrl(internals::PointLatLng &pt,const QString &language) @@ -542,7 +572,9 @@ namespace core { #endif //DEBUG_URLFACTORY QTime time; time.start(); + while( (!(reply->isFinished()) || (time.elapsed()>(6*Timeout))) ){QCoreApplication::processEvents(QEventLoop::AllEvents);} + #ifdef DEBUG_URLFACTORY qDebug()<<"Finished?"<error()<<" abort?"<<(time.elapsed()>Timeout*6); #endif //DEBUG_URLFACTORY @@ -563,6 +595,7 @@ namespace core { // cache geocoding if(useCache && geo.startsWith("200")) { + Cache::Instance()->CacheGeocoder(urlEnd, geo); } } @@ -577,9 +610,11 @@ namespace core { QStringList values = geo.split(','); if(values.count() == 4) { + status = (GeoCoderStatusCode::Types) QString(values[0]).toInt(); if(status == GeoCoderStatusCode::G_GEO_SUCCESS) { + double lat = QString(values[2]).toDouble(); double lng = QString(values[3]).toDouble(); @@ -602,6 +637,7 @@ namespace core { { Placemark ret(""); + #ifdef DEBUG_URLFACTORY qDebug()<<"Entered GetPlacemarkFromReverseGeocoderUrl:"; #endif //DEBUG_URLFACTORY @@ -636,7 +672,9 @@ namespace core { #endif //DEBUG_URLFACTORY QTime time; time.start(); + while( (!(reply->isFinished()) || (time.elapsed()>(6*Timeout))) ){QCoreApplication::processEvents(QEventLoop::AllEvents);} + #ifdef DEBUG_URLFACTORY qDebug()<<"Finished?"<error()<<" abort?"<<(time.elapsed()>Timeout*6); #endif //DEBUG_URLFACTORY @@ -660,6 +698,7 @@ namespace core { // cache geocoding if(useCache && reverse.startsWith("200")) { + Cache::Instance()->CachePlacemark(urlEnd, reverse); } } @@ -672,6 +711,7 @@ namespace core { // false: 602,0,0,0 if(reverse.startsWith("200")) { + QString acc = reverse.left(reverse.indexOf('\"')); ret = Placemark(reverse.remove(reverse.indexOf('\"'))); ret.SetAccuracy ((int) (( (QString) acc.split(',')[1]).toInt()) ); @@ -690,6 +730,7 @@ namespace core { double a = pow(sin(dLatitude / 2), 2) + cos(dLat1InRad) * cos(dLat2InRad) * pow(sin(dLongitude / 2), 2); double c = 2 * atan2(sqrt(a), sqrt(1 - a)); double dDistance = EarthRadiusKm * c; + return dDistance; } } From f576d9e0c8d100261c86d94e6032f2b12e41ce43 Mon Sep 17 00:00:00 2001 From: WillRam Date: Wed, 7 May 2014 10:29:11 +1000 Subject: [PATCH 2/2] whitespace --- libs/opmapcontrol/src/core/urlfactory.cpp | 52 +++++------------------ 1 file changed, 10 insertions(+), 42 deletions(-) diff --git a/libs/opmapcontrol/src/core/urlfactory.cpp b/libs/opmapcontrol/src/core/urlfactory.cpp index 0e8d6eb4ba2..0d64b944857 100644 --- a/libs/opmapcontrol/src/core/urlfactory.cpp +++ b/libs/opmapcontrol/src/core/urlfactory.cpp @@ -54,24 +54,19 @@ namespace core { UrlFactory::~UrlFactory() { } - QString UrlFactory::TileXYToQuadKey(const int &tileX,const int &tileY,const int &levelOfDetail) const { QString quadKey; for(int i = levelOfDetail; i > 0; i--) { - - char digit = '0'; int mask = 1 << (i - 1); if((tileX & mask) != 0) { - digit++; } if((tileY & mask) != 0) { - digit++; digit++; } @@ -98,16 +93,12 @@ namespace core { static bool versionRetrieved = false; if (versionRetrieved) - { - + { return; } QMutexLocker locker(&mutex); if(CorrectGoogleVersions && !IsCorrectGoogleVersions()) { - - - QNetworkReply *reply; QNetworkRequest qheader; QNetworkAccessManager network; @@ -131,7 +122,6 @@ namespace core { q.exec(); if(!tT.isActive()) return; - tT.stop(); if( (reply->error()!=QNetworkReply::NoError)) { @@ -159,7 +149,6 @@ namespace core { QStringList gc=reg.capturedTexts(); VersionGoogleLabels = QString("h@%1").arg(gc[1]); VersionGoogleLabelsChina = VersionGoogleLabels; - #ifdef DEBUG_URLFACTORY qDebug()<<"TryCorrectGoogleVersions, VersionGoogleLabels: "<deleteLater(); - - + } } @@ -200,7 +186,6 @@ namespace core { #endif //DEBUG_URLFACTORY switch(type) { - case MapType::GoogleMap: { QString server = "mts"; @@ -209,7 +194,7 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - + return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; @@ -221,7 +206,7 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - + return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; @@ -233,7 +218,7 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - + return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; @@ -245,6 +230,7 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); + return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; @@ -257,7 +243,7 @@ namespace core { GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); // http://mt0.google.cn/vt/v=w2.101&hl=zh-CN&gl=cn&x=12&y=6&z=4&s=Ga - + return QString("http://%1%2.google.cn/%3/lyrs=%4&hl=%5&gl=cn&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapChina).arg("zh-CN").arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; @@ -295,6 +281,7 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); + // http://mt0.google.cn/vt/v=w2p.110&hl=zh-CN&gl=cn&x=12&y=6&z=4&s=Ga return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&gl=cn&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrainChina).arg("zh-CN").arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); @@ -307,13 +294,9 @@ namespace core { QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); - - - - + //http://mt3.gmaptiles.co.kr/mt/v=kr1.11&hl=lt&x=109&y=49&z=7&s= - QString ret = QString("https://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMapKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); return ret; } @@ -325,8 +308,7 @@ namespace core { QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); - - + // http://khm1.google.co.kr/kh/v=54&x=109&y=49&z=7&s= return QString("http://%1%2.google.co.kr/%3/v=%4&x=%5%6&y=%7&z=%8&s=%9").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatelliteKorea).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); @@ -340,7 +322,6 @@ namespace core { QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); - // http://mt1.gmaptiles.co.kr/mt/v=kr1t.11&hl=lt&x=109&y=50&z=7&s=G return QString("https://%1%2.gmaptiles.co.kr/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabelsKorea).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); @@ -515,14 +496,12 @@ namespace core { sec2 = SecGoogleWord.left(seclen); if(pos.Y() >= 10000 && pos.Y() < 100000) { - sec1 = "&s="; } } QString UrlFactory::MakeGeocoderUrl(QString keywords) { QString key = keywords.replace(' ', '+'); - return QString("http://maps.google.com/maps/geo?q=%1&output=csv&key=%2").arg(key).arg(GoogleMapsAPIKey); } QString UrlFactory::MakeReverseGeocoderUrl(internals::PointLatLng &pt,const QString &language) @@ -572,9 +551,7 @@ namespace core { #endif //DEBUG_URLFACTORY QTime time; time.start(); - while( (!(reply->isFinished()) || (time.elapsed()>(6*Timeout))) ){QCoreApplication::processEvents(QEventLoop::AllEvents);} - #ifdef DEBUG_URLFACTORY qDebug()<<"Finished?"<error()<<" abort?"<<(time.elapsed()>Timeout*6); #endif //DEBUG_URLFACTORY @@ -595,7 +572,6 @@ namespace core { // cache geocoding if(useCache && geo.startsWith("200")) { - Cache::Instance()->CacheGeocoder(urlEnd, geo); } } @@ -610,11 +586,9 @@ namespace core { QStringList values = geo.split(','); if(values.count() == 4) { - status = (GeoCoderStatusCode::Types) QString(values[0]).toInt(); if(status == GeoCoderStatusCode::G_GEO_SUCCESS) { - double lat = QString(values[2]).toDouble(); double lng = QString(values[3]).toDouble(); @@ -637,7 +611,6 @@ namespace core { { Placemark ret(""); - #ifdef DEBUG_URLFACTORY qDebug()<<"Entered GetPlacemarkFromReverseGeocoderUrl:"; #endif //DEBUG_URLFACTORY @@ -672,9 +645,7 @@ namespace core { #endif //DEBUG_URLFACTORY QTime time; time.start(); - while( (!(reply->isFinished()) || (time.elapsed()>(6*Timeout))) ){QCoreApplication::processEvents(QEventLoop::AllEvents);} - #ifdef DEBUG_URLFACTORY qDebug()<<"Finished?"<error()<<" abort?"<<(time.elapsed()>Timeout*6); #endif //DEBUG_URLFACTORY @@ -698,7 +669,6 @@ namespace core { // cache geocoding if(useCache && reverse.startsWith("200")) { - Cache::Instance()->CachePlacemark(urlEnd, reverse); } } @@ -711,7 +681,6 @@ namespace core { // false: 602,0,0,0 if(reverse.startsWith("200")) { - QString acc = reverse.left(reverse.indexOf('\"')); ret = Placemark(reverse.remove(reverse.indexOf('\"'))); ret.SetAccuracy ((int) (( (QString) acc.split(',')[1]).toInt()) ); @@ -730,7 +699,6 @@ namespace core { double a = pow(sin(dLatitude / 2), 2) + cos(dLat1InRad) * cos(dLat2InRad) * pow(sin(dLongitude / 2), 2); double c = 2 * atan2(sqrt(a), sqrt(1 - a)); double dDistance = EarthRadiusKm * c; - return dDistance; } }