qt qgis linux,QT_QGIS_基本使用

QT_QGIS_基本使用

​ 1、打开矢量图层

​ 2、新建矢量图层

​ 1、添加几何要素——点

​ 2、添加几何要素——线

​ 1、打开栅格图层

/* #include "QgsMapCanvas"

* class QgsMapCanvas;

* 继承于QWidget,可以直接当成Widget使用

*/

QgsMapCanvas* m_canvas = new QgsMapCanvas; // 实例化画布

QgsMapToolPan * toolPan = new QgsMapToolPan(m_canvas); // 新建移动工具

// QgsMapToolZoom * toolZoom = new QgsMapToolZoom(m_canvas,true); // 放大工具

// m_canvas->setMapTool(toolZoom);

m_canvas->setMapTool(toolPan); // 将移动工具设置到画布

m_canvas->freeze(false); // 画布解冻

m_canvas->setCanvasColor(QColor(255,255,255)); // 设置画布颜色

m_canvas->setVisible(true); // 设置可见

m_canvas->enableAntiAliasing(true); // 设置可抗锯齿

QGridLayout * layout = new QGirdLayout(this);

layout->addWidget(m_canvas); // 显示画布

1、打开矢量图层

QString fileName = QFileDialog::getOpenFileName(this,

tr("Open shape file"),

"",

"*.shp"); // 选择文件

QStringList list = fileName.split("/"); // 通过"/" 分隔获取的路径

Qstring baseName = list.back; // 图层名

/* #include "qgsvectorlayer.h"

* class QgsVectorLayer;

* 继承 QgsMapLayer

* @parameter1 要打开的文件

* @parameter2 图层名称

* @parameter3 数据提供者的名称,"memory"/"postgres"/...

*/

QgsVectorLayer * layer = new QgsVectorLayer(fileName,baseName,"ogr"); // 实例化矢量图层类

if(!layer->isValid()) // 判断图层是否有效

{

return;

}

QList m_layers; // 创建一个容器用于保存图层

m_layers.append(layer); // 将打开的图层添加到容器

m_canvas->setLayers(m_layers); // 将容器的中的图层设置到画布

2、新建矢量图层

1、添加几何要素——点

/* @parameter1 组成

* 几何类型:

* 点 "Point?"

* 线 "LineString?"

* 多边形 "Polygon?"

* 参照坐标系:

* "crs=epsg:4326&"

* 添加字段:

* "field=id:integer&field=name:string(50)&"

* 创建索引:

* "index=yes&"

*/

QgsVectorLayer * pointLayer = new QgsVectorLayer("Point?crs=epsg:4326&","MyPoint","memory"); // 实例化矢量图层,作为点图层

pointLayer->startEditing(); // 设置图层状态为开始编辑

/* #include "qgsgeometry.h"

* class QgsGeometry;

* 几何类

*/

QgsGeometry point = QgsGeometry::fromPointXY(QgsPointXY(116.46,39.92)); // 调用静态函数,实例化一个几何点

/* #include "qgsfeature.h"

* class QgsFeature;

* QGis 要素类

*/

QgsFeature feature; // 创建要素

feature.setGeometry(point); // 将几何点设置为要素

feature.setAttributes(QgsAttributes() << QVariant(1) << QVariant("test")); // 设置要素属性

/* #include "qgsvectordataprovider.h"

* class QgsVectorDataProvider;

* 继承于 QgsDataProvider(同样继承于此类的还有 QgsRasterDataProvider)

* 是矢量数据提供者的基类

*/

QgsVectorDataProvider * provider = pointLayer->dataProvider(); // 获取点图层的数据提供者的指针,用于添加要素

provider->addFeature(feature); // 将点要素添加到矢量层

// provider->addFeatures(featureList << feature); // 此方法用于添加多个要素

pointLayer->commitChanges(); // 保存图层

pointLayer->updateExtents(); // 更新图层

m_layer.push_front(pointLayer); // 将设置好的图层添加到保存图层的容器中

m_canvas->setExtent(pointLayer->extent()); // 设置画布范围为当前图层的范围,也就是将图层平铺到画布上

m_canvas->setLayers(m_layer); // 将容器设置到画布

m_canvas->refresh(); // 刷新画布

2、添加几何要素——线

/* 添加线的流程和点基本一样

*/

QgsVectorLayer * pointLayer = new QgsVectorLayer("LineString?crs=epsg:4326","MyPoint","memory");

pointLayer->startEditing(); // 设置图层状态为开始编辑

QgsPolyline l;

l << QgsPoint(116.2448,40.0573) << QgsPoint(116.2448,80)

<< QgsPoint(110,80) << QgsPoint(50,50) << QgsPoint(116,40); // 添加若干坐标,组成一条拆线

QgsGeometry line = QgsGeometry::fromPolyline(line); // 调用静态函数,实例化一条拆线

QgsFeature feature; // 创建要素

feature.setGeometry(line); // 设置几何拆线设置为要素

feature.setAttributes(QgsAttributes() << QVariant(1) << QVariant("test")); // 设置属性

QgsVectorDataProvider * provider = pointLayer->dataProvider(); // 获取一个用于添加要素的指针

provider->addFeature(feature); // 将几何点添加到矢量层

// provider->addFeatures(featureList << feature); // 此方法用于添加多个要素

pointLayer->commitChanges(); // 保存图层

pointLayer->updateExtents(); // 更新图层

m_layer.push_front(pointLayer); // 将设置好的图层添加到保存图层的容器中

m_canvas->setExtent(pointLayer->extent()); // 设置画面范围为图层的范围,也就是将图层平铺到画布上

m_canvas->setLayers(m_layer); // 将容器设置到画布

m_canvas->refresh(); // 刷新画布

1、打开栅格图层

// 还没写

20200901172624466f3kej80v51n4yr5_0.gif

后续更新...

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值