zoukankan      html  css  js  c++  java
  • QT下Qgis的简单使用

    1、使用类QgsMapCanvas创建画布

       QgsMapCanvas * canvas = new QgsMapCanvas;
       canvas->setCanvasColor(Qt::white);//设置画布颜色
       canvas->enableAntiAliasing(true);//启用抗锯齿
       canvas->setExtent(vlayer->extent());//设置图层范围 vlayer矢量图层
       canvas->setLayers(vLayer);//设置图层集合
       canvas->setVisible(true);//设置是否可见
       canvas->freeze(false);//设置是否冻结对图层的操作
       canvas->refresh();//刷新
       canvas->show();//显示
    

    2、创建图层 (矢量图层类:QgsVectorLayer)(栅格图层类:QgsRasterLayer)

    QString path = "multiPoint?";
    // 几何类型,"point", "linestring", "polygon", "multipoint","multilinestring","multipolygon"	
    path.append( QString( "crs=EPSG:4326&")); //参照坐标系	
    path.append( QString( "field=id:integer&field=name:string(50)&")); //添加字段属性
    path.append( QString( "index=yes&" )); // 创建索引
    path.append( QString( "memoryid=%1").arg(QUuid::createUuid().toString())); // 临时编码
    //创建矢量图层
    QgsVectorLayer *vLayer = new QgsVectorLayer(path,"MyPoint","memory");
    

    3、使用类QgsFeature在图层中加入点

    //创建一个点图层
    QgsVectorLayer *point = new QgsVectorLayer("Point?crs=epsg:4326","MyPoint","memory");
    //创建一个容器
    QgsVectorDataProvider * dataProvider = point->dataProvider();
    //创建一个要素
    QgsFeature MyFeature;
    //设置在地图的插入点的坐标
    MyFeature.setGeometry(QgsGeometry::fromPointXY(QgsPointXY(116.3215,39.5416)));
    dataProvider->addFeatures(QgsFeatureList()<<MyFeature);
    

    4、根据id在图层中删除要素

    QgsVectorLayer planeLayer = new QgsVectorLayer("Point?crs=epsg:4326","MyPoint","memory");
    //启用编辑
    planeLayer->startEditing();
    planeLayer->deleteFeature(QgsFeatureId(对应id));
    planeLayer->updateExtents();
    //提交planeLayer
    planeLayer->commitChanges();
    

    5、使用渲染器设置图层中点的样式(QgsSingleSymbolRenderer单一渲染器)

    //Constructs SVG marker symbol layer with picture from given absolute path to a SVG file(把点修改成该图像的样式)
    QgsSvgMarkerSymbolLayer *svgMarker = new QgsSvgMarkerSymbolLayer("D:\QGIS3.10.8\apps\qgis-ltr\svg\gpsicons/plane.svg");
    svgMarker->setColor(QColor(0,0,0));
    svgMarker->setSize(10);
    svgMarker->setAngle(0);
    
    QgsSymbolLayerList symlist;
    symlist.append(svgMarker);
    QgsMarkerSymbol *markSym = new QgsMarkerSymbol(symlist);
    QgsSingleSymbolRenderer * symRendere = new QgsSingleSymbolRenderer(markSym);
    vLayer->setRenderer(symRendere);//valyer是想要修改的点图层
    

    使用渲染器把点改变成飞机形状

    6、在图层中添加线

    // 创建一个图层。
    QgsVectorLayer *Line_Layer = new QgsVectorLayer("LineString?crs=epsg:4326","MyLine","memory");
    QgsVectorDataProvider *dataProder =Line_Layer->dataProvider();
    //在指定坐标添加点
    QgsFeature feature;
    QgsGeometry geometry = QgsGeometry::fromPointXY(QgsPointXY(50,50));
    //通过点坐标进行画线
    QgsPolyline line ;
    line << QgsPoint(100.4443,32.2123) << QgsPoint(130.5557,50.4445);
    geometry =QgsGeometry::fromPolyline(line);
    feature.setGeometry( geometry );
    dataProder->addFeatures(QgsFeatureList()<< feature);
    Line_Layer->updateExtents();
    

    7、转换点的坐标系

        //两种方式都可
       //用来查询当前数据库路径 需要将qgis中的srs.db数据库放到对应目录下
       // qDebug() <<  QgsApplication::srsDatabaseFilePath();
       // qDebug() << QgsApplication::qgisUserDatabaseFilePath();
    #if 1
        QgsCoordinateReferenceSystem crsSrc; crsSrc.createFromSrid(4326); //源坐标系 Sets this CRS by lookup of the given PostGIS SRID in the CRS database.
        QgsCoordinateReferenceSystem crsDest; crsDest.createFromSrid(3857); //目的坐标系
    #else
        QgsCoordinateReferenceSystem * crsSrc = new QgsCoordinateReferenceSystem("EPSG:4326");
        QgsCoordinateReferenceSystem * crsDest = new QgsCoordinateReferenceSystem("EPSG:3857");
    #endif
        QgsCoordinateTransformContext transformContext = QgsProject::instance()->transformContext();
        QgsCoordinateTransform * xform =new QgsCoordinateTransform(crsSrc, crsDest, transformContext);
        QgsPointXY myPoint = QgsPointXY(longitute,latitude);
        QgsPointXY  pt1 = xform->transform(myPoint);
    

    8、在图层中添加字段,并且根据图层中已有的要素id为其设置属性

        //创建图层
        QgsVectorLayer alarmLayer = new QgsVectorLayer("Point?crs=epsg:4326","alarmLayer","memory");
        //添加字段
        alarmLayer->startEditing();
        QgsField *filed = new QgsField(QStringLiteral("频率"), QVariant::String);
        if (alarmLayer->addAttribute(*filed))
        {
            qDebug() << QStringLiteral("字段添加成功");
        }
        alarmLayer->commitChanges();
        //根据id添加属性
        alarmLayer->startEditing();
        alarmLayer->changeAttributeValue(id, field, attribute);
        alarmLayer->commitChanges();
    

    9、使用标签,在图层中显示某一字段的属性

        QgsVectorLayer * vLayer = new QgsVectorLayer("D:/MyProject/QgisDemo1/MSCities_Geo_Pts.shp", "Cities", "ogr");
        //文本缓冲区设置
        QgsTextBufferSettings * bufSettings = new QgsTextBufferSettings;
        bufSettings->setEnabled(true);//启用文本缓冲区
        bufSettings->setSize(1);//设置缓缓冲区大小
        bufSettings->setColor(QColor("white"));
        //文本样式设置
        QgsTextFormat * textFormat = new QgsTextFormat;
        textFormat->setFont(QFont("Arial", 12));
        textFormat->setSize(12);
        textFormat->setBuffer(*bufSettings);//设置文本缓冲区
        //图层属性设置
        QgsPalLayerSettings *lSettings = new QgsPalLayerSettings;
        lSettings->setFormat(*textFormat);//设置标签文本格式
        lSettings->fieldName = "NAME10";//要显示的字段名
        lSettings->placement = QgsPalLayerSettings::Placement::Line;//设置标签样式
    //    lSettings->geometryGeneratorEnabled = true;//启用几何生成器
        //创建label标签
        QgsVectorLayerSimpleLabeling * LSsettings = new QgsVectorLayerSimpleLabeling(*lSettings);
    
        vLayer->setLabelsEnabled(true);//该图层启用label标签
        vLayer->setLabeling(LSsettings);//设置标签配置
        vLayer->triggerRepaint();
    

  • 相关阅读:
    VScode 修改中文字体
    missing KW_END at ')' near '<EOF>'
    SQL inner join, join, left join, right join, full outer join
    SQL字符替换函数translater, replace
    SQL COOKBOOK SQL经典实例代码 笔记第一章代码
    sqlcook sql经典实例 emp dept 创建语句
    dateutil 2.5.0 is the minimum required version python
    安装postgresql后找不到服务 postgresql service
    Postgres psql: 致命错误: 角色 "postgres" 不存在
    【西北师大-2108Java】第十六次作业成绩汇总
  • 原文地址:https://www.cnblogs.com/man-bu/p/13679324.html
Copyright © 2011-2022 走看看