当前位置: 首页 > news >正文

副业做网站软件wordpress博客建站

副业做网站软件,wordpress博客建站,招商外包公司怎么收费,wordpress 侧边栏目录一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库#xff0c;可选择谷歌地图#xff0c;必应地图#xff0c; 雅虎地图#xff0c;GIS等。可直接使用源码#xff0c;也可以编译生成库进行调用。实现效果…一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库可选择谷歌地图必应地图 雅虎地图GIS等。可直接使用源码也可以编译生成库进行调用。实现效果 二、环境 Qt5.15.2编译器 Qt 5.15.2 MinGW 64-bit系统windows 10 三. 功能特点 1 支持缓存地图2支持选择各厂商地图以及切换街道地图3支持地图互动拖动、放大缩小4支持添加航点以及航点的编辑、删除、保存、加载、航点信息显示5支持设置home以及安全区域6支持显示运动轨迹 四.opmapcontrol 从github上下载下来的源码包调用的时候不同版本的Qt会有些小bug可以直接搜opmapcontrol。CSDN免积分下载链接包含编译好的库、和简单的调用demohttps://download.csdn.net/download/ever__ever/89290882?spm1001.2014.3001.5503以下为opmapcontrol中mapwidget子项目各个类的功能讲解只想知道如何使用的话可以跳过本节直接前往第五节这个库中我们主要看mapwidget子项目里面提供了对地图、无人机、航点、轨迹、home等相关操作的接口。 OPMapWidget类 这个类主要继承QGraphicsView提供一个地图交互场景视图。1void SetShowDiagnostics(bool const value)设置是否显示诊断信息。当传入的值为true时会创建定时器用于刷新诊断信息同时创建GPS对象如果不存在并设置透明度。当传入的值为false时会清除诊断信息、定时器、GPS对象等。2void SetUavPic(QString UAVPic)用于设置无人机的图片。如果无人机对象存在会调用其SetUavPic函数设置图片。3UAVItem* AddUAV(int id)用于添加一个新的无人机对象并将其添加到地图中。它返回指向新添加的无人机对象的指针。4void AddUAV(int id, UAVItem* uav)用于添加一个已存在的无人机对象并将其添加到地图中。5void DeleteUAV(int id)用于删除指定ID的无人机对象。6UAVItem* GetUAV(int id)用于获取指定ID的无人机对象。7const QListUAVItem* GetUAVS()用于获取所有无人机对象的列表。8WayPointLine *WPLineCreate(WayPointItem *from, WayPointItem *to, QColor color, bool dashed, int width)用于创建两个航点之间的连线。9WayPointLine *WPLineCreate(HomeItem *from, WayPointItem *to, QColor color, bool dashed, int width)用于创建Home点到航点之间的连线。 Configuration类它主要用于集中管理地图控件的大部分配置选项。 这个类包含了一些成员变量如EmptytileBrush、EmptyTileText、EmptyTileBorders等用于配置地图空白瓦片的绘制、文本、边框等样式。同时它还包含了一些成员函数用于设置和获取地图的访问模式、语言、内存缓存使用情况、缓存文件的位置等。总的来说Configuration类的作用是提供一个集中管理地图控件配置选项的地方使得在代码中可以方便地对这些配置进行设置和获取。 GPSItem类 继承自QObject和QGraphicsItem的类用于在地图上表示一个无人机UAV。提供了一系列函数用于管理无人机的位置、轨迹以及到达状态等属性以及相应的信号与槽机制用于与其他对象进行交互。这个类的作用主要有以下几点 **表示无人机**GPSItem类用于在地图上绘制表示无人机的图形元素可以根据给定的参数设置无人机的位置、高度和朝向。**设置无人机轨迹**可以根据不同的轨迹类型设置无人机的轨迹显示方式包括按时间间隔绘制轨迹点或按距离间隔绘制轨迹点等。**管理轨迹显示**可以设置是否显示无人机的轨迹以及轨迹线并提供相应的函数来控制轨迹的显示和清除。**自动设置到达状态**可以设置无人机自动根据距离到达航点并根据设定的距离自动设置航点到达状态。 HomeItem类 继承自QObject和QGraphicsItem的类用于在地图上表示一个home点的位置。提供了一系列函数用于管理home的位置、安全区域以及相应的交互功能。这个类的作用主要有以下几点 **表示home的位置**HomeItem类用于在地图上绘制表示home的图形元素可以设置home的位置坐标和海拔高度。**显示安全区域**可以设置是否显示home的安全区域并提供相应的函数进行控制。**提供信号与槽机制**通过信号与槽机制可以实现当home的位置发生变化时通知其他对象以及当home位置被双击时触发相应的事件。**提供鼠标事件处理**可以处理鼠标的移动、按下、释放和双击等事件以便实现交互功能。 MapGraphicItem类MapGraphicItem 类是一个用于地图显示和交互的主要图形项。它是一个继承自 QObject 和 QGraphicsItem 的类是地图小部件中核心的图形项负责管理地图的显示和交互以及地图相关的逻辑处理。 这个类的作用主要有以下几点 **显示地图**负责在地图小部件上绘制地图并处理地图的显示逻辑。**地图交互**处理鼠标事件移动、点击、滚动等和键盘事件以实现地图的交互功能如拖拽、缩放、选择区域等。**地图坐标转换**提供方法将经纬度坐标转换为本地坐标以及将本地坐标转换为经纬度坐标。**地图操作**包括设置地图的缩放级别、旋转角度、地图类型等。**地图重绘**在需要更新地图显示时负责重新绘制地图。**地图逻辑**处理地图的逻辑操作如获取地图类型、设置当前位置、设置鼠标滚轮缩放类型等。 TrailItem类 用于在地图上显示路径轨迹的图形项它可以根据传入的经纬度坐标和颜色刷在地图上绘制路径。 UAVItem类 表示无人机UAV的图形项用于在地图上显示无人机的位置、航向、速度等信息。可以根据无人机的位置和状态信息进行绘制同时提供了一系列方法和信号用于处理与无人机相关的逻辑。这个类的作用主要有以下几点 **初始化无人机项**通过构造函数初始化无人机项传入地图图形项、父部件指针和无人机图片路径等参数。**设置无人机信息**提供一系列方法用于设置无人机的位置、NED北东地坐标、地面速度、空速、航向角速度等信息。**绘制无人机**实现 paint 方法用于在地图上绘制无人机。绘制时可以根据当前无人机的位置、航向等信息进行绘制。**边界矩形**实现 boundingRect 方法返回无人机项的边界矩形用于在场景中定位无人机项的位置。**类型标识**定义了 type 方法返回无人机项的类型标识方便识别无人机项。**信号与槽**提供多个槽函数用于处理无人机位置更新、透明度设置等操作。还定义了一些信号用于与其他部件进行通信如当无人机达到航点时发出信号等。 WayPointItem类 表示航点的图形项用于在地图上显示航点的位置、描述和相关信息。可以根据航点的位置和状态信息进行绘制同时提供了一系列方法和信号用于处理与航点相关的逻辑。这个类的作用主要有以下几点 **初始化航点项**提供多个构造函数用于初始化航点项可以传入航点的经纬度坐标、海拔高度、描述信息等参数。**设置航点信息**提供一系列方法用于设置和获取航点的描述、是否到达、航点编号、经纬度坐标、海拔高度等信息。**绘制航点**实现 paint 方法用于在地图上绘制航点的图标并根据航点是否到达以及是否显示航点编号进行绘制。**边界矩形**实现 boundingRect 方法返回航点项的边界矩形用于在场景中定位航点项的位置。**类型标识**定义了 type 方法返回航点项的类型标识方便识别航点项。 五.主程序结构 ├── UAVMapDemo ├── UAVMapDemo.pro├── main.cpp 程序入口加载样式表├── mainwindow.h 主界面没什么操作├── mainwindow.cpp├── mainwindow.ui├── 3rdparty (包括opmapcontrol的头文件和库文件│ ├── opmapcontrol│ │ └── include│ │ └── MinGW├── MapControl │ ├── MapControl.pri│ ├── MapWidget.h 继承OPMapWidget调用opmapwidget相关接口实现地图和无人机操作│ ├── MapWidget.cpp│ ├── UAS_types.h 存放一些数据类型和转化│ ├── UAS_types.cpp├── Robot│ ├── Robot.pri│ ├── uavmanagerwidget.h 无人机地面站界面实现模型飞行、起飞、降落等接口│ ├── uavmanagerwidget.cpp│ ├── uavmanagerwidget.ui│ ├── mapsetmiddleform.h 一个小界面不用关心│ ├── mapsetmiddleform.h│ ├── mapsetmiddleform.h├── res│ ├── image 图片资源│ ├── styleSheet 样式资源│ │ └── default.qss 六.程序源码主要部分说明 pro文件 添加opmapcontrol相关头文件和库文件 CONFIG(debug, debug|release){win32-g {}else:msvc {} } else {win32-g {INCLUDEPATH $$PWD/3rdparty/opmapcontrol/include/mapwidgetLIBS -L$$PWD/3rdparty/opmapcontrol/MinGW -lopmapwidget}else:msvc {} }UAVManagerWidget 无人机地面站界面 initWidget() 新建一个配置文件存放经纬度、home点经纬度、缩放比例、添加一个无人机类编号为0不显示无人信息设置无人机的位置为home位置。handleUISignals() : 处理界面上的一些ui信号加了一个定时器用于模拟飞行。flySimulation() : 模拟飞行随机经纬度。 void UAVManagerWidget::initWidget() {m_mapSetForm new MapSetMiddleForm();m_mapSetForm-setRobotBtnName(u8无人机);m_conf new QSettings(./MapControl/data/UAV.ini, QSettings::IniFormat);int zoom;m_homeLat m_conf-value(mapWidget_home_lat, 34.257287).toDouble();m_homeLng m_conf-value(mapWidget_home_lng, 108.888931).toDouble();m_uavLat m_homeLat;m_uavLng m_homeLng;zoom m_conf-value(lastZoom, 13).toInt();internals::PointLatLng p(m_homeLat, m_homeLng);ui-widget_map-SetCurrentPosition(p);ui-widget_map-SetZoom(zoom);ui-widget_map-setConf(m_conf);uav ui-widget_map-AddUAV(0);uav-SetNumber(0);uav-SetShowUAVInfo(false);uav-SetMapFollowType(mapcontrol::UAVMapFollowType::Types::CenterMap);uav-SetUAVPos(p, 10); }void UAVManagerWidget::handleUISignals() {// 连接connect(ui-btn_connect, QPushButton::clicked, this, UAVManagerWidget::connectUav);// 起飞connect(ui-btn_takeoff, QPushButton::clicked, this, UAVManagerWidget::uavTakeoff);// 降落connect(ui-btn_land, QPushButton::clicked, this, UAVManagerWidget::uavLand);// 返回connect(ui-btn_back, QPushButton::clicked, this, UAVManagerWidget::uavGoHome);// planconnect(ui-btn_plan, QPushButton::clicked, this, UAVManagerWidget::flyByWaypoint);// 地图中心点connect(ui-btn_home, QPushButton::clicked, this, []() {m_mapSetForm-setCurrentPos(ui-widget_map-CurrentPosition().Lng(),ui-widget_map-CurrentPosition().Lat());QPoint buttonPos ui-btn_home-mapToGlobal(ui-btn_home-rect().center());int dialogX buttonPos.x() ui-btn_home-width() - 15;int dialogY buttonPos.y() - m_mapSetForm-height() / 2;m_mapSetForm-showWidget(QPoint(dialogX, dialogY));});// 置于homeconnect(m_mapSetForm, MapSetMiddleForm::signal_setHome, this, []() {ui-widget_map-SetCurrentPosition(internals::PointLatLng(m_homeLat, m_homeLng));});// 置于无人机connect(m_mapSetForm, MapSetMiddleForm::signal_setRobot, this, []() {if (uav) {ui-widget_map-SetCurrentPosition(internals::PointLatLng(m_uavLat, m_uavLng));}});// 置于自定义中心connect(m_mapSetForm, MapSetMiddleForm::signal_setCustom, this, [](double lng, double lat) {if (uav) {ui-widget_map-SetCurrentPosition(internals::PointLatLng(lat, lng));}});// 无人机超出home设定安全范围connect(uav,SIGNAL(UAVLeftSafetyBouble(internals::PointLatLng)),this,SLOT(uavWarnning(internals::PointLatLng)));// 用于模拟飞行的定时器随机生成无人机位置timer new QTimer(this);connect(timer, SIGNAL(timeout()), this, SLOT(flySimulation()));// 模拟飞行按钮connect(ui-btn_simFly, QPushButton::clicked, this, []() {if (ui-btn_simFly-isChecked()) {timer-start(100);} else {timer-stop();}}); }void UAVManagerWidget::flySimulation() {m_uavLat 0.000001;m_uavLng QRandomGenerator::global()-bounded(0.000001) - 0.000005;internals::PointLatLng ll(m_uavLat, m_uavLng);uav-SetUAVPos(ll, 10); }MapWidget 地图窗口继承OPMapwidget。 MapWidget() : 构造函数,选择必应地图其他的需要科学上网。 MapWidget::MapWidget(QWidget* parent): mapcontrol::OPMapWidget(parent) {m_conf NULL;configuration-SetAccessMode(core::AccessMode::CacheOnly);configuration-SetTileMemorySize(200);configuration-SetCacheLocation(./data/);SetZoom(4);SetMinZoom(4);// 地图选择必应SetMapType(MapType::BingHybrid);// 显示罗盘SetShowCompass(true);// set initial valuesm_bSelectArea 0;m_pSelectArea1.SetLat(-9999);m_pSelectArea1.SetLng(-9999);m_pSelectArea2.SetLat(-9999);m_pSelectArea2.SetLng(-9999);m_homeShow 1;m_homeAlt 440;m_homePos.SetLat(-9999);m_homePos.SetLng(-9999);m_homeSafearea 100;m_flightHeight 20;// setup menussetupMenu(); } *setConf(QSettings conf) : **配置文件设置地图加载接口服务器、缓存、地图类型、缓存位置、home点和安全区域设置。 void MapWidget::setConf(QSettings* conf) {m_conf conf;if (m_conf NULL)return;// map type access mode{MapType::Types mapType;core::AccessMode::Types accessMode;QString cacheLocation;// load settingsaccessMode (core::AccessMode::Types)m_conf-value(mapWidget_accessMode,(int)(core::AccessMode::CacheOnly)).toInt();mapType (MapType::Types)m_conf-value(mapWidget_mapType,(int)(MapType::GoogleSatellite)).toInt();cacheLocation m_conf-value(mapWidget_cacheLocation, ./MapControl/data/).toString();// set configurationsconfiguration-SetAccessMode(accessMode);configuration-SetCacheLocation(cacheLocation);SetMapType(mapType);// set accessMode actionsif (accessMode core::AccessMode::ServerAndCache) {m_actMapAccess_ServerAndCache-setChecked(true);m_actMapAccess_Cache-setChecked(false);} else if (accessMode core::AccessMode::CacheOnly) {m_actMapAccess_ServerAndCache-setChecked(false);m_actMapAccess_Cache-setChecked(true);}}// home safe area{m_homeShow m_conf-value(mapWidget_home_show, m_homeShow).toInt();m_homePos.SetLat(m_conf-value(mapWidget_home_lat, m_homePos.Lat()).toDouble());m_homePos.SetLng(m_conf-value(mapWidget_home_lng, m_homePos.Lng()).toDouble());m_homeAlt m_conf-value(mapWidget_home_alt, m_homeAlt).toDouble();m_homeSafearea m_conf-value(mapWidget_home_safeArea, m_homeSafearea).toDouble();m_flightHeight m_conf-value(mapWidget_flightHeight, m_flightHeight).toDouble();if (m_homeShow) {this-SetShowHome(true);this-Home-SetCoord(m_homePos);this-Home-SetAltitude((int)(m_homeAlt));this-Home-SetSafeArea((int)(m_homeSafearea));m_actHome_ShowHide-setChecked(true);} else {m_actHome_ShowHide-setChecked(false);}} }**setupMenu() **: 右键菜单提供对地图、航点、home、安全区域等各个功能的接口。 int MapWidget::setupMenu(void) {// setup actionsm_actMapType new QAction(tr(u8地图类型), this);connect(m_actMapType, SIGNAL(triggered()), this, SLOT(actMapType_SelectMap()));m_actMapAccess_ServerAndCache new QAction(tr(u8服务器和缓存), this);m_actMapAccess_ServerAndCache-setCheckable(true);m_actMapAccess_ServerAndCache-setChecked(false);connect(m_actMapAccess_ServerAndCache, SIGNAL(triggered()),this, SLOT(actMapAccess_ServerAndCache()));m_actMapAccess_Cache new QAction(tr(u8缓存), this);m_actMapAccess_Cache-setCheckable(true);m_actMapAccess_Cache-setChecked(true);connect(m_actMapAccess_Cache, SIGNAL(triggered()), this, SLOT(actMapAccess_Cache()));m_actWaypoint_add new QAction(tr(u8航点添加), this);connect(m_actWaypoint_add, SIGNAL(triggered()), this, SLOT(actWaypoint_add()));m_actWaypoint_del new QAction(tr(u8航点删除), this);connect(m_actWaypoint_del, SIGNAL(triggered()), this, SLOT(actWaypoint_del()));m_actWaypoint_edit new QAction(tr(u8航点编辑), this);connect(m_actWaypoint_edit, SIGNAL(triggered()), this, SLOT(actWaypoint_edit()));m_actWaypoint_clear new QAction(tr(u8航点清除), this);connect(m_actWaypoint_clear, SIGNAL(triggered()), this, SLOT(actWaypoint_clear()));m_actWaypoint_save new QAction(tr(u8航点保存), this);connect(m_actWaypoint_save, SIGNAL(triggered()), this, SLOT(actWaypoint_save()));m_actWaypoint_load new QAction(tr(u8航点加载), this);connect(m_actWaypoint_load, SIGNAL(triggered()), this, SLOT(actWaypoint_load()));m_actSelectArea_beg new QAction(tr(u8选择区域起点), this);connect(m_actSelectArea_beg, SIGNAL(triggered()), this, SLOT(actSelectArea_beg()));m_actSelectArea_end new QAction(tr(u8选择区域终点), this);connect(m_actSelectArea_end, SIGNAL(triggered()), this, SLOT(actSelectArea_end()));m_actSelectArea_clear new QAction(tr(u8选择区域清除), this);connect(m_actSelectArea_clear, SIGNAL(triggered()), this, SLOT(actSelectArea_clear()));m_actHome_Set new QAction(tr(u8设置Home), this);connect(m_actHome_Set, SIGNAL(triggered()), this, SLOT(actHome_Set()));m_actHome_Safearea new QAction(tr(u8设置Home安全区域), this);connect(m_actHome_Safearea, SIGNAL(triggered()), this, SLOT(actHome_Safearea()));m_actHome_ShowHide new QAction(tr(u8显示/隐藏Home), this);m_actHome_ShowHide-setCheckable(true);m_actHome_ShowHide-setChecked(true);connect(m_actHome_ShowHide, SIGNAL(triggered()), this, SLOT(actHome_ShowHide()));m_actCacheMap new QAction(tr(u8缓存地图), this);connect(m_actCacheMap, SIGNAL(triggered()), this, SLOT(actCacheMap()));m_actTrail_clear new QAction(tr(u8清除轨迹), this);connect(m_actTrail_clear, SIGNAL(triggered()), this, SLOT(actClearTrail()));// setup menum_popupMenu new QMenu(Menu);QMenu* menuAccessMode m_popupMenu-addMenu(u8接口类型);m_popupMenu-addAction(m_actMapType);m_popupMenu-addAction(m_actCacheMap);m_popupMenu-addSeparator();m_popupMenu-addAction(m_actTrail_clear);m_popupMenu-addSeparator();m_popupMenu-addAction(m_actWaypoint_add);m_popupMenu-addAction(m_actWaypoint_del);m_popupMenu-addAction(m_actWaypoint_edit);m_popupMenu-addAction(m_actWaypoint_clear);m_popupMenu-addAction(m_actWaypoint_save);m_popupMenu-addAction(m_actWaypoint_load);m_popupMenu-addSeparator();m_popupMenu-addAction(m_actSelectArea_beg);m_popupMenu-addAction(m_actSelectArea_end);m_popupMenu-addAction(m_actSelectArea_clear);m_popupMenu-addSeparator();m_popupMenu-addAction(m_actHome_Set);m_popupMenu-addAction(m_actHome_Safearea);m_popupMenu-addAction(m_actHome_ShowHide);menuAccessMode-addAction(m_actMapAccess_ServerAndCache);menuAccessMode-addAction(m_actMapAccess_Cache);return 0; }七.最终效果 八.源代码链接 https://download.csdn.net/download/ever__ever/89291117?spm1001.2014.3001.5503
http://www.dnsts.com.cn/news/212710.html

相关文章:

  • 免费查看招标信息的网站漳州网站建设求职简历
  • 销售培训网站优化检查
  • 扶绥县住房和城乡建设局网站网站建设公司大全
  • 黄山网站开发jidela如何建设网站简答题
  • 网站建设优化需要懂那些知识怎么配置wordpress
  • 旅游网站系统设计大连 模板网站
  • 如何做网站的自由撰稿人ip上海官网
  • 做网站都是花钱吗上海外贸50强企业
  • 谷城做网站wordpress支付宝免签约
  • 网站域名如何从代理商那里转出来网站文章列表如何排版
  • 个人网站名可以和别人一样吗徐州有哪些做网站
  • 佛山市网站建设公司成都必去的地方排行榜
  • 佛山建网站公司哪家好WordPress调用内部js
  • 网站外部链接如何建设温州公司建设网站
  • 海口澄迈县建设局网站wordpress 修改语言
  • 织梦网做网站步骤营销网络和网络营销的区别
  • 嘉兴型网站系统总部网站排名查询
  • 571免费建网站赤壁网站设计
  • 网站上传权限国际设计师网站
  • 什么是网站后台建设电子网站建设方案
  • 阿里巴巴国际站下载什么游戏不用登录直接玩
  • 餐饮商家做网站的好处关于优化培训
  • 芜湖网站7天精通网站建设实录
  • 东莞网站建设渠道长沙微信网站开发
  • 网站开发合同下载建设网站需要哪些东西
  • 笨鸟网站开发高级设计师培训班
  • 开封网站建设培训学校挂甲寺网站建设
  • 做服装外贸网站wordpress 文章内容
  • 明星网站策划书网站建设发展情况
  • 简述企业网站建设的流程麻章手机网站建设