QGIS - #003 加载显示矢量图

在这里插入图片描述

加载显示矢量图

1 目标

加载显示矢量图

2 代码

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#define _SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING

#include <QApplication>
#include <QMainWindow>

#include <qgsmapcanvas.h>
#include <qgsrasterlayer.h>
#include <qgsvectorlayer.h>

#include <qgsmaptoolpan.h>
#include <iostream>
#include <random>
#include <qgsPointXY.h>
#include <qgsFeature.h>
#include <qgsVectorLayer.h>
#include <qgsGeometry.h>
#include <qgsMarkerSymbol.h>
#include <qgsTextFormat.h>
#include <qgsTextRenderer.h>
#include <qgsTextBufferSettings.h>
#include <qgsSingleSymbolRenderer.h>
#include <qgstextbuffersettings.h>




// 函数:加载矢量图层
// 参数:
// - filePath: 矢量文件的路径
// - layerName: 图层名称
// - provider: 数据提供者类型
// 返回值:
// - QgsVectorLayer* 类型的指针,指向加载的矢量图层
QgsVectorLayer* loadVectorLayer(const QString& filePath, const QString& layerName, const QString& provider) {
	QgsVectorLayer* vectorLayer = new QgsVectorLayer(filePath, layerName, provider);
	if (!vectorLayer->isValid()) {
		std::cerr << "Failed to load vector layer.\n";
		return nullptr;
	}


	// 设置标签
	QgsPalLayerSettings labelSettings;
	labelSettings.fieldName = "STATE_NAME";  // 设置标签字段为 "STATE_NAME"
	labelSettings.isExpression = false;

	// 设置标签格式
	QgsTextFormat textFormat;
	textFormat.setSize(10);  // 设置字体大小
	textFormat.setColor(Qt::blue);  // 设置字体颜色
	labelSettings.setFormat(textFormat);

	// 应用标签设置
	QgsVectorLayerSimpleLabeling* labeling = new QgsVectorLayerSimpleLabeling(labelSettings);
	vectorLayer->setLabeling(labeling);
	vectorLayer->setLabelsEnabled(true);

	return vectorLayer;
}

int main(int argc, char** argv)
{
	//std::cout << "Hello World!\n";

	// 创建QGIS应用程序对象
	QApplication qgisApp(argc, argv);

	// 创建主窗口
	QMainWindow mainWindow;

	// 创建地图画布对象
	QgsMapCanvas mapCanvas;

	

	// 加载矢量图层
	QgsVectorLayer* vectorLayer = loadVectorLayer(R"(C:\Shapes\china_province.shp)", "My Shapefile Layer", "ogr");

	// 确保图层成功加载
	if (!vectorLayer || !vectorLayer ) {
		delete vectorLayer ;
		return -1;
	}

	// 将图层添加到地图画布中
	mapCanvas.setLayers({vectorLayer});

	// 设置地图画布的显示范围为图层的范围
	mapCanvas.setExtent(vectorLayer->extent());

	// 刷新地图画布以应用更改
	mapCanvas.refresh();


	// 将地图画布设置为主窗口的中央部件
	mainWindow.setCentralWidget(&mapCanvas);



	// 显示主窗口
	mainWindow.show();

	// 运行QGIS应用程序的事件循环
	int result = qgisApp.exec();

	// 清理资源
	delete vectorLayer;

	return result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满天飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值