zoukankan      html  css  js  c++  java
  • Qt5 + ArcGIS学习笔记(动态更新)

    开发环境:Qt Creator(Qt 5.14.2)+ ArcGIS Runtime 100.8

    本文只包含实现特定功能所需的API和代码片段,以及某些问题的解决方案,用于个人备忘,排版爆炸,还请见谅。

    功能实现:

    一. 资源管理

    1.Qt加载svg矢量图

      使用QtSvg中的QSvgRenderer

            

     1 QImage loadSvg(QString path = PLANEPATH){
     2     // 加载svg,返回QImage
     3     QSvgRenderer* svgRender = new QSvgRenderer();
     4     svgRender->load(path);
     5     QImage image(x, y, QImage::Format_ARGB32);
     6     image.fill(Qt::transparent);
     7     QPainter painter(&image);
     8     svgRender->render(&painter);
     9     return image;
    10 }

    2.ArcGIS加载tpk格式地图

      使用TileCacheArcGISTiledLayerBaseMap

      示例(需要引用ArcGIS对应的头文件,头文件名称一般和类型名称相同):

    Mapload_Widgets::Mapload_Widgets(QApplication* application, QWidget* parent /*=nullptr*/):
        QMainWindow(parent), form(new Ui::Form){
        // Create the Widget view
        m_mapView = new MapGraphicsView(this);
    
        // 加载 Tile Pack 地图文件,路径为宏定义
        const QString worldMapLocation = QString(WORLDMAPPATH);
        const QString countryMapLocation = QString(COUNTRYMAPPATH);
        TileCache* worldTileCache = new TileCache(worldMapLocation, this);
        TileCache* countryTileCache = new TileCache(countryMapLocation, this);
        ArcGISTiledLayer* worldTiledLayer = new ArcGISTiledLayer(worldTileCache, this);
        ArcGISTiledLayer* countryTiledLayer = new ArcGISTiledLayer(countryTileCache, this);
    
        // 设置附加图层透明度
        countryTiledLayer->setOpacity(0.7F);
    
        // 实例化地图,设置附加图层
        Basemap* basemap = new Basemap(worldTiledLayer, this);
        m_map = new Map(basemap, this);
        m_map->operationalLayers()->append(countryTiledLayer);
    
        // Set map to map view
        m_mapView->setMap(m_map);
    
        // set the mapView as the central widget
        setCentralWidget(m_mapView);
    
        // 隐藏界面下方的"Powered by Esri"
        m_mapView->setAttributionTextVisible(false);
    }

    3.ArcGIS加载显示自定义图片

      Graphic:使用PictureMarkerSymbol实例化Graphic,添加到GraphicsOverlay

    // 用于GeometryEngine::ellipseGeodesic方法的参数类,指定图片标记的位置
    GeodesicEllipseParameters ellipseParams(Point(X, Y, SpatialReference::wgs84()), 1, 1);
    PictureMarkerSymbol* pictureMarkerSymbol = new PictureMarkerSymbol(image, this);
    graphic = new Graphic(GeometryEngine::ellipseGeodesic(ellipseParams),pictureMarkerSymbol, this);
    overlay->graphics()->appendgraphic);

    二. 动画

    1.Qt控件的动画效果

      放缩/位移:使用QPropertyAnimation

    2.定时移动

      可以使用QTimer

    3.ArcGIS更改图片标记的方向和位置

      Graphic::setGeometry()PictureMarkerSymbol::setAngle()

    GeodesicEllipseParameters ellipseParams(Point(x, y, SpatialReference::wgs84()), 1, 1);
    graphic->setGeometry(GeometryEngine::ellipseGeodesic(ellipseParams));
    pictureMarkerSymbol->setAngle(degree);

    问题:

    1.QWidget提升后样式表失效(Qt设计)

      解决方案:重写父类QWidget的paintEvent

          

    1 // 重写paintEvent使stylesheet生效
    2 void QScaleWidget::paintEvent(QPaintEvent *e){
    3     QStyleOption opt;
    4     opt.init(this);
    5     QPainter p(this);
    6     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
    7     QWidget::paintEvent(e);
    8 }
  • 相关阅读:
    基于yum的方式安装Cloudera Manager Agent(使用Mysql 8.0版本)
    数据库基础SQL知识面试题二
    Zabbix Server 自带模板监控更加灵活MySQL数据库
    Zabbix Server 自带模板监控有密码MySQL数据库
    Zabbix Server 自带模板监控无密码MySQL数据库
    Zabbix Server 监控Web页面
    HDFS集群常见报错汇总
    Hadoop ha CDH5.15.1-hadoop集群启动后,集群容量不正确,莫慌,这是正常的表现!
    FastDFS + Nginx代理方式访问
    FastDFS 分布式文件系统部署实战及基本使用
  • 原文地址:https://www.cnblogs.com/crvz6182/p/13509117.html
Copyright © 2011-2022 走看看