#pragma execution_character_set("utf-8") #include "mapbaidu.h" #include "qmutex.h" #include "qfile.h" #include "qtextstream.h" #include "qdebug.h" QScopedPointer MapBaiDu::self; MapBaiDu *MapBaiDu::Instance() { if (self.isNull()) { static QMutex mutex; QMutexLocker locker(&mutex); if (self.isNull()) { self.reset(new MapBaiDu); } } return self.data(); } MapBaiDu::MapBaiDu(QObject *parent) : QObject(parent) { this->reset(); } void MapBaiDu::addHead(QStringList &list) { //构建网页头部 list << QString(""); list << QString(""); list << QString("%1").arg(title); list << QString(""); list << QString(""); //地图页面样式 list << QString(""); //引入webchannel.js #ifdef webengine list << QString(""); #endif //在线和离线地图加载的文件路径不一样 if (mapLocal) { //引入地图JS文件 list << QString(""); //引入CurveLine JS文件,只有当绘制弧线的时候才需要,如果不需要绘制弧线可以注释 list << QString(""); //加载点聚合需要下面两个js文件 list << QString(""); list << QString(""); //引入行政区划轮廓图JS文件 list << QString("").arg(cityJsName); //引入鼠标绘制工具JS文件 if (showOverlayTool) { list << QString(""); list << QString(""); } } else { //引入地图JS文件 if (mapFlag == "BMapGL") { list << QString("").arg(mapVersionKey); } else { list << QString("").arg(mapVersionKey); } //引入CurveLine JS文件,只有当绘制弧线的时候才需要,如果不需要绘制弧线可以注释 list << QString(""); //加载点聚合需要下面两个js文件 list << QString(""); list << QString(""); //引入轨迹图动画js文件 list << QString(""); //引入实时路况JS文件 if (showTrafficControl) { list << QString(""); list << QString(""); } //引入鼠标绘制工具JS文件 if (showOverlayTool) { list << QString(""); list << QString(""); } } list << QString(""); } void MapBaiDu::addBody(QStringList &list) { //构建网页主体部分内容 list << QString(""); list << QString("
"); if (!startAddr.isEmpty()) { list << QString("
"); } list << QString(""); //引入js文件 list << QString(""); list << QString(""); } void MapBaiDu::reset() { height = 410; mapLocal = false; saveFile = true; addFun = true; mapFlag = "BMap"; title = "百度地图(QQ: 517216493)"; fileName = "map_baidu.html"; cityJsName = "上海市徐汇区"; //各种js函数参数解释 https://mapopen-pub-jsapi.bj.bcebos.com/jsapi/reference/jsapi_reference_3_0.html //1.5版本以上需要密钥 最新版本3.0 建议替换成自己的秘钥 mapVersionKey = "3.0&ak=9GqzBZjfGqXYXMzdfuRN9AL4B4PHaY6R"; //mapVersionKey = "1.3"; //normal-默认地图样式 light-清新蓝风格 googlelite-精简风格 hardedge-强边界 //具体参见 http://developer.baidu.com/map/custom/stylelist.js mapStyleName = ""; mapCenterPoint = "121.424362,31.175942"; mapCenterCity = "上海"; mapZoom = 12; mapMinZoom = 4; mapMaxZoom = 19; enableMapClick = false; enableDragging = true; enableScrollWheelZoom = true; enableDoubleClickZoom = true; enableKeyboard = false; enableAnimation = false; enableClickPoint = false; showNavigationControl = false; showOverviewMapControl = false; showScaleControl = false; showMapTypeControl = false; showPanoramaCoverageLayer = false; showTrafficControl = false; showOverlayTool = false; policyType = 0; startAddr.clear(); endAddr.clear(); markerNames.clear(); markerAddrs.clear(); markerPoints.clear(); strokeColor = "#FF0000"; strokeWeight = 3; strokeOpacity = 0.5; overlayTypes.clear(); overlayPoints.clear(); } QString MapBaiDu::newMap() { QStringList list; //添加头部 addHead(list); //添加body addBody(list); //添加地图属性 addProperty(list); //添加JS函数 addFunction(list); //添加多个设备 addDevice(list); //添加覆盖物工具栏 addOverlayTool(list); //添加多个覆盖物 addOverlay(list); //添加路线查询 addRoute(list); //添加尾部 addEnd(list); //保存文件 QString content = list.join("\r\n"); if (saveFile && !fileName.isEmpty()) { QFile file(fileName); if (file.open(QFile::WriteOnly | QFile::Truncate)) { QTextStream out(&file); #if (QT_VERSION < QT_VERSION_CHECK(6,0,0)) out.setCodec("utf-8"); #endif out << content; } } return content; } void MapBaiDu::setHeight(int height) { this->height = height; } void MapBaiDu::setMapLocal(bool mapLocal) { this->mapLocal = mapLocal; } void MapBaiDu::setSaveFile(bool saveFile) { this->saveFile = saveFile; } bool MapBaiDu::getSaveFile() { return this->saveFile; } void MapBaiDu::setTitle(const QString &title) { this->title = title; } void MapBaiDu::setFileName(const QString &fileName) { this->fileName = fileName; } void MapBaiDu::setCityJsName(const QString &cityJsName) { this->cityJsName = cityJsName; } void MapBaiDu::setMapFlag(const QString &mapFlag) { this->mapFlag = mapFlag; } void MapBaiDu::setMapVersionKey(const QString &mapVersionKey) { this->mapVersionKey = mapVersionKey; } void MapBaiDu::setMapStyleName(const QString &mapStyleName) { this->mapStyleName = mapStyleName; } void MapBaiDu::setMapCenterPoint(const QString &mapCenterPoint) { this->mapCenterPoint = mapCenterPoint; } void MapBaiDu::setMapCenterCity(const QString &mapCenterCity) { this->mapCenterCity = mapCenterCity; } void MapBaiDu::setMapZoom(quint8 mapZoom) { this->mapZoom = mapZoom; } quint8 MapBaiDu::getMapZoom() { return this->mapZoom; } void MapBaiDu::setMapMinZoom(quint8 mapMinZoom) { this->mapMinZoom = mapMinZoom; } void MapBaiDu::setMapMaxZoom(quint8 mapMaxZoom) { this->mapMaxZoom = mapMaxZoom; } void MapBaiDu::setEnableMapClick(bool enableMapClick) { this->enableMapClick = enableMapClick; } void MapBaiDu::setEnableDragging(bool enableDragging) { this->enableDragging = enableDragging; } void MapBaiDu::setEnableScrollWheelZoom(bool enableScrollWheelZoom) { this->enableScrollWheelZoom = enableScrollWheelZoom; } void MapBaiDu::setEnableDoubleClickZoom(bool enableDoubleClickZoom) { this->enableDoubleClickZoom = enableDoubleClickZoom; } void MapBaiDu::setEnableKeyboard(bool enableKeyboard) { this->enableKeyboard = enableKeyboard; } void MapBaiDu::setEnableAnimation(bool enableAnimation) { this->enableAnimation = enableAnimation; } void MapBaiDu::setEnableClickPoint(bool enableClickPoint) { this->enableClickPoint = enableClickPoint; } void MapBaiDu::setShowNavigationControl(bool showNavigationControl) { this->showNavigationControl = showNavigationControl; } void MapBaiDu::setShowOverviewMapControl(bool showOverviewMapControl) { this->showOverviewMapControl = showOverviewMapControl; } void MapBaiDu::setShowScaleControl(bool showScaleControl) { this->showScaleControl = showScaleControl; } void MapBaiDu::setShowMapTypeControl(bool showMapTypeControl) { this->showMapTypeControl = showMapTypeControl; } void MapBaiDu::setShowPanoramaCoverageLayer(bool showPanoramaCoverageLayer) { this->showPanoramaCoverageLayer = showPanoramaCoverageLayer; } void MapBaiDu::setShowTrafficControl(bool showTrafficControl) { this->showTrafficControl = showTrafficControl; } void MapBaiDu::setShowOverlayTool(bool showOverlayTool) { this->showOverlayTool = showOverlayTool; } void MapBaiDu::setStrokeColor(const QString &strokeColor) { this->strokeColor = strokeColor; } void MapBaiDu::setStrokeWeight(int strokeWeight) { this->strokeWeight = strokeWeight; } void MapBaiDu::setStrokeOpacity(float strokeOpacity) { this->strokeOpacity = strokeOpacity; } void MapBaiDu::setMarkerInfo(const QStringList &markerNames, const QStringList &markerAddrs, const QStringList &markerPoints) { this->markerNames = markerNames; this->markerAddrs = markerAddrs; this->markerPoints = markerPoints; } void MapBaiDu::setRotueInfo(quint8 routeType, quint8 policyType, const QString &startAddr, const QString &endAddr) { this->routeType = routeType; this->policyType = policyType; this->startAddr = startAddr; this->endAddr = endAddr; } void MapBaiDu::setOverlayInfo(QList &overlayTypes, const QList &overlayPoints) { this->overlayTypes = overlayTypes; this->overlayPoints = overlayPoints; }