#pragma execution_character_set("utf-8")
#include "QMFA.h"
#include <qmenubar.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
#include "qgslayertreemodel.h"//使用给定层树构建新的树模型,一般与QgsLayerTreeView 一起使用
#include "qgridlayout.h"
#include "qtoolbutton.h"
#include "qdockwidget.h"
#include "DBCLayertreeviewmenuprovider.h" //图层管理器右键菜单类
#include "qgslayertreeregistrybridge.h"//创建与层树根同步给定项目的实例,收听地图层注册表中的更新,并在层树中进行更改
QMFA* QMFA::sm_instance = 0;
QMFA::QMFA(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//设置主窗口参数
this->resize(1200, 800);
this->setWindowTitle("MyGIS");
this->setWindowIcon(QIcon("1.ico"));
this->MenuClicks();
//初始化地图画布
mapCanvas = new QgsMapCanvas();
this->setCentralWidget(mapCanvas); //将地图画布放置我们创建的主窗口中心
mapCanvas->setCanvasColor(QColor(255, 255, 255)); //设置地图画布为白色
mapCanvas->setVisible(true);
mapCanvas->enableAntiAliasing(true);
//初始化图层管理器
layerTreeView = new QgsLayerTreeView(this);
initLayerTreeView();
//栅格布局
QWidget* centralWidget = this->centralWidget();
QGridLayout* centralLayout = new QGridLayout(centralWidget);
//centralLayout->addWidget(layerTreeView, 0, 0, 2, 1); //图层管理器位置
centralLayout->addWidget(mapCanvas, 0, 1, 2, 1); //画布位置 后面四个参数:初始行列 占位行类
QStatusBar* pStatusBar = new QStatusBar();
setStatusBar(pStatusBar);
createStatusBar();
//鼠标移动图层
QgsMapToolPan* tool = new QgsMapToolPan(mapCanvas);
mapCanvas->setMapTool(tool);
//中国shp文件-地理坐标系-utf-8
QString filename1 = "../QMFA/QGIS_shp/china.shp";
QString filename2 = "../QMFA/QGIS_shp/china_nine_dotted_line.shp";
QStringList temp1 = filename1.split('/');
QStringList temp2 = filename2.split('/');
QString basename1 = temp1.at(temp1.size() - 1);
QString basename2 = temp2.at(temp2.size() - 1);
QgsVectorLayer* vecLayer1 = new QgsVectorLayer(filename1, basename1, "ogr");
QgsVectorLayer* veclayer2 = new QgsVectorLayer(filename2, basename2, "ogr");
QgsProject::instance()->addMapLayer(vecLayer1);
QgsProject::instance()->addMapLayer(veclayer2);
mapCanvas->setExtent(vecLayer1->extent());
mapCanvas->setExtent(veclayer2->extent());
layers.append(vecLayer1);
layers.append(veclayer2);
mapCanvas->setLayers(layers);
mapCanvas->setVisible(true);
mapCanvas->freeze(false);
mapCanvas->refresh();
//设置标签样式
//首先是定义一个 QgsPalLayerSettings 变量,并启用他的属性设置
QgsPalLayerSettings layerSettings;
layerSettings.drawLabels = true;
//根据API文档中的属性,进行自定义配置
layerSettings.fieldName = vecLayer1->fields()[3].name(); // 设置Label图层
layerSettings.centroidWhole = true; //设置位置参考的中心点
layerSettings.isExpression = true;
layerSettings.placement = QgsPalLayerSettings::OverPoint;
layerSettings.yOffset = 2.5;
//// Label 字体设置:轮廓buffer设置
//QgsTextBufferSettings buffersettings;
//buffersettings.setEnabled(true);
//buffersettings.setSize(1);
//buffersettings.setColor(QColor(255, 0, 0));
////字体阴影
//QgsTextShadowSettings shadowsetings;
//shadowsetings.setEnabled(true);
//shadowsetings.setOffsetAngle(135);
//shadowsetings.setOffsetDistance(1);
//字体格式
QgsTextFormat textformat;
QFont font("Times", 5, 5, false);
font.setUnderline(false);
textformat.setFont(font);
//textformat.setBuffer(buffersettings);
//textformat.setShadow(shadowsetings);
layerSettings.setFormat(textformat);
QgsVectorLayerSimpleLabeling* labeling = new QgsVectorLayerSimpleLabeling(layerSettings);
vecLayer1->setLabeling(labeling);
vecLayer1->setLabelsEnabled(true);
/*LayerLableSet(vecLayer1);*/
/**/
//OSM在线地图-投影坐标系
//addOpenSourceRasterLayer("type=xyz&url=http://c.tile.openstreetmap.org/{z}/{x}/{y}.png", "OSM", "wms");
//addOpenSourceRasterLayer( "type=crs=EPSG:4326&xyz&url=https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}", "ESRI", "wms");
connect(mapCanvas, SIGNAL(xyCoordinates(QgsPointXY)), this, SLOT(slot_showPosition(QgsPointXY)));
}
QMFA::~QMFA()
{
}
//菜单栏按钮
void QMFA::MenuClicks()
{
//菜单栏与对应的槽函数连接
connect(ui.action, SIGNAL(triggered(bool)), this, SLOT(on_openRasterFileAction_triggered()));
connect(ui.action_3, SIGNAL(triggered(bool)), this, SLOT(on_openVectorFileAction_triggered()));
connect(ui.action_5, SIGNAL(triggered(bool)), this, SLOT(on_removeFileAction_triggered()));
connect(ui.action_6, SIGNAL(triggered(bool)), this, SLOT(slot_onlinemap()));
}
//加载在线地图
void QMFA::addOpenSourceRasterLayer(const QString& url, const QString& basename, const QString& providerKey)
{
QgsRasterLayer* rasterLayer = 0;
if (providerKey.isEmpty())
{
rasterLayer = new QgsRasterLayer(url, basename);
}
else
{
rasterLayer = new QgsRasterLayer(url, basename, providerKey);
}
if (!rasterLayer->isValid())
{
QMessageBox::critical(this, "error", "layer is invalid!");
return;
}
QgsProject::instance()->addMapLayer(rasterLayer);
mapCanvas->setExtent(rasterLayer->extent());
//layers.append(rasterLayer);
mapCanvas->setLayers(layers);
mapCanvas->setVisible(true);
mapCanvas->freeze(false);
mapCanvas->refresh();
}
//槽函数:打开并显示栅格数据
void QMFA::on_openRasterFileAction_triggered() {
//步骤1:打开文件选择对话框
QString fileName = QFileDialog::getOpenFileName(this, tr("Open raster file"), "", "TIFF(*.tif *.tiff);;Image(*.jpg *.jpeg *.png *.bmp)");
if (fileName.isNull()) //如果文件未选择则返回
{
return;
}
QStringList temp = fileName.split('/');
QString basename = temp.at(temp.size() - 1);//获取栅格数据名称
//步骤2:创建QgsRasterLayer类
QgsRasterLayer* rasterLayer = new QgsRasterLayer(fileName, basename, "gdal");
//如果不是geotiff文件,则提示错误
if (!rasterLayer->isValid())
{
QMessageBox::critical(this, "error", QString("layer is invalid: \n") + fileName);
return;
}
//步骤3:添加栅格数据
QgsProject::instance()->addMapLayer(rasterLayer); //注册
mapCanvas->setExtent(rasterLayer->extent()); //将画布范围设置为栅格图层范围
layers.append(rasterLayer); //将栅格图层追加到链表中
mapCanvas->setLayers(layers); //将图层画到画布上
mapCanvas->setVisible(true);
mapCanvas->freeze(false);
mapCanvas->refresh(); //更新画布
}
//槽函数:打开并显示矢量数据
void QMFA::on_openVectorFileAction_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open shape file"), "", "*.shp");
if (fileName.isNull()) //如果文件未选择则返回
{
return;
}
QStringList temp = fileName.split('/');
QString basename = temp.at(temp.size() - 1);
QgsVectorLayer* vecLayer = new QgsVectorLayer(fileName, basename, "ogr");
if (!vecLayer->isValid())
{
QMessageBox::critical(this, "error", QString("layer is invalid: \n") + fileName);
return;
}
//QGIS 3注册方式
QgsProject::instance()->addMapLayer(vecLayer);
mapCanvas->setExtent(vecLayer->extent());
layers.append(vecLayer);
mapCanvas->setLayers(layers);
mapCanvas->setVisible(true);
mapCanvas->freeze(false);
mapCanvas->refresh();
}
//槽函数:移除图层
void QMFA::on_removeFileAction_triggered() {
layers.clear(); //从链表中清除所有图层
mapCanvas->setLayers(layers);
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
QGIS编译好的工程文件,包含基本的QGIS功能模块 使用CMAKE+VS2019+QT5.15.2编译成功,亲测可用,下载后直接打开工程文件即可运行。 通过源码编译,使用CMAKE 编译成功,使用IDE为visual studio 2019包含常用的GIS模块,可自行增添或删改相应的模块。功能内容完整,可直接使用。 QGIS编译好的工程文件,QGIS编译好的工程文件,QGIS编译好的工程文件,QGIS编译好的工程文件,QGIS编译好的工程文件,QGIS编译好的工程文件,QGIS编译好的工程文件,QGIS编译好的工程文件,QGIS编译好的工程文件。
资源推荐
资源详情
资源评论
收起资源包目录
QGIS编译好的工程文件,包含基本的QGIS功能模块 (8183个子文件)
PyQGIS.api 2.21MB
PyQt5.api 1.62MB
PyQGIS-2.2.api 596KB
PyQGIS-2.0.api 536KB
PyQGIS-1.8.api 243KB
Python-3.6.api 229KB
PyQGIS-1.7.api 209KB
QScintilla2-2.7.2.api 117KB
QScintilla2-2.4.5.api 95KB
OSGeo_GDAL-OGR-2.2.3.api 72KB
OSGeo_GDAL-OGR-1.10.0.api 44KB
OSGeo_GDAL-OGR-1.9.1.api 37KB
OSGeo_GEOS-3.4.2.api 7KB
OSGeo_GEOS-3.6.2.api 7KB
QMFA.APS 68KB
AUTHORS 3KB
saga-refresh.bat 2KB
moc_predefs.h.cbt 55B
hillshade_renderer.cl 5KB
hillshade.cl 2KB
calcfirstder.cl 2KB
aspect_renderer.cl 2KB
slope_renderer.cl 2KB
ruggedness.cl 2KB
slope.cl 2KB
aspect.cl 2KB
FindQGIS.cmake 8KB
CONTRIBUTORS 2KB
china.cpg 5B
DBC.cpg 5B
DBC_ty.cpg 5B
DBC.cpg 5B
china_nine_dotted_line.cpg 5B
DBC_ty.cpg 5B
QMFA.cpp 36KB
moc_QMFA.cpp 6KB
DBCLayertreeviewmenuprovider.cpp 5KB
moc_QMFA.cpp 5KB
moc_DBCLayertreeviewmenuprovider.cpp 3KB
moc_DBCLayertreeviewmenuprovider.cpp 3KB
qrc_QMFA.cpp 1KB
qrc_QMFA.cpp 1KB
main.cpp 366B
chunk-vendors.a728f495.css 269KB
chunk-123bc409.8679d8ba.css 99KB
chunk-a28d6c70.162a27d1.css 48KB
chunk-23874add.0889ca49.css 2KB
jsonFormatter.min.css 2KB
style.css 1KB
style.css 1KB
jsonFormatter.css 1KB
app.ca3f5643.css 62B
LinkPropertyLookupTable.csv 25KB
country_code_ISO_3166.csv 16KB
language_codes_ISO_639.csv 3KB
md_scope_codes.csv 1KB
mime.csv 672B
licenses.csv 290B
Browse.VC.db 32.7MB
srs.db 2.69MB
spatialite.db 577KB
qgis.db 23KB
china.dbf 159KB
DBC.dbf 1KB
DBC.dbf 1KB
DBC_ty.dbf 1KB
DBC_ty.dbf 1KB
china_nine_dotted_line.dbf 768B
table.dbf 490B
Qt5WebEngineCored.dll 182.88MB
Qt5WebEngineCore.dll 97.36MB
oraociicus19.dll 71.96MB
Qt5WebKit.dll 46.96MB
icudt67.dll 27.08MB
qgis_core.dll 24.35MB
qgis_core.dll 24.35MB
gdal303.dll 22.8MB
gdal302.dll 22.65MB
libGLESv2d.dll 16.97MB
Qt5Guid.dll 15.32MB
qgis_gui.dll 13.24MB
qgis_gui.dll 13.24MB
mod_spatialite.dll 12.61MB
spatialite.dll 12.39MB
Qt5Quickd.dll 12.03MB
Qt5Cored.dll 11.7MB
Qt5Widgetsd.dll 11.56MB
Qt5Pdfd.dll 11.55MB
Qt5Qmld.dll 9.82MB
wxmsw315u_core_vc_osgeo4w.dll 8.98MB
qgis_app.dll 8.55MB
qgis_app.dll 8.55MB
Qt5XmlPatternsd.dll 8.38MB
Qt5Designerd.dll 7.65MB
Qt53DRenderd.dll 7.04MB
Qt5Scriptd.dll 6.85MB
libmysql.dll 6.48MB
Qt5Gui.dll 6.32MB
assimpd.dll 5.71MB
Qt5Widgets.dll 5.24MB
共 8183 条
- 1
- 2
- 3
- 4
- 5
- 6
- 82
GISerQ.
- 粉丝: 1w+
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页