QGIS

project(GisFreeMap)

set(CMAKE_BUILD_TYPE Debug)
find_package(Qt4 REQUIRED QtCore QtGui QtXml)
include(${QT_USE_FILE})

include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0/src/core")
include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0/src/core/symbology-ng")
include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0/src/core/geometry")
include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0/src/core/layertree")
include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0/src/gui")
include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0/src/gui/editorwidgets/core")
include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0/src/gui/layertree")
include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0/src/gui/attributetable")
include_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0-build")
include_directories("E:/BaiduYunDownload/qgis/3rdparty/include")

link_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0-build/src/gui/Debug")
link_directories("E:/BaiduYunDownload/qgis/qgis-2.18.0-build/src/core/Debug")

add_definitions(-DCORE_EXPORT=)
add_definitions(-DGUI_EXPORT=)
add_definitions(-D_USE_MATH_DEFINES)
add_definitions(-Dnoexcept=)
set(
    SRC
    main.cpp
)

add_executable(${PROJECT_NAME} ${SRC})
target_link_libraries(${PROJECT_NAME} qgis_gui qgis_core ${QT_LIBRARIES})
#include <qgsapplication.h>
#include <qgsproviderregistry.h>
#include <qgssinglesymbolrendererv2.h>
#include <qgsmaplayerregistry.h>
#include <qgsvectorlayer.h>
#include <qgsmapcanvas.h>
#include <qgsproject.h>
#include <qgslayertreenode.h>
#include <qgslayertreegroup.h>
#include <qgslayertreeregistrybridge.h
#include <qgsattributetablemodel.h>
#include <qgsattributetableview.h>
#include <qgsattributetablefiltermodel.h>
#include <qgsvectorlayercache.h>
#include <qgseditorwidgetregistry.h>
#include <qgspallabeling.h>
#include <qgscustomlayerorderwidget.h>
int main(int argc, char ** argv)
{
    QgsApplication app(argc, argv, true);
    QgsApplication::setPluginPath("E:/BaiduYunDownload/qgis/qgis-2.18.0-build/output/plugins/Debug");
    QgsApplication::initQgis();

    QgsMapCanvas * canvas = new QgsMapCanvas();
//    QgsProject::instance()->read(QFileInfo("D:/1.qgs"));
    QgsLayerTreeMapCanvasBridge * bridge = new QgsLayerTreeMapCanvasBridge(QgsProject::instance()->layerTreeRoot(), canvas);
    QgsVectorLayer * vectorLayer = new QgsVectorLayer("D:/shpFile/china/point_sheng.shp", "point_sheng", "ogr");
    QgsVectorLayer * vectorLayer1 = new QgsVectorLayer("D:/shpFile/china/china.shp", "china", "ogr");
    QgsVectorLayer * vectorLayer2 = new QgsVectorLayer("D:/shpFile/World/line_world.shp", "line_world", "ogr");

    QgsPalLayerSettings layerSettings;
    layerSettings.enabled = true;

    // 设置显示字段
    layerSettings.fieldName = vectorLayer->pendingFields()[0].name();
    layerSettings.centroidWhole = true; // 设置位置参考的中心点

    // Label 字体设置
    layerSettings.textColor = QColor( 0, 0, 0 ); // 设置字体颜色
    layerSettings.textFont = QFont( "msyh", 12 ); // 设置字体和大小

    // Label 轮廓buffer设置
    layerSettings.bufferDraw = true;
    layerSettings.bufferColor = QColor( 255, 0, 0 ); // 轮廓buffer的颜色
    layerSettings.bufferSize = 1; // 轮廓buffer大小
    layerSettings.bufferTransp = 0.5; // 轮廓buffer的透明度

    // Label 阴影绘制
    layerSettings.shadowDraw = true;
    layerSettings.shadowOffsetAngle = 135; // 阴影的角度
    layerSettings.shadowOffsetDist = 1; // 阴影与Label的距离

    layerSettings.setDataDefinedProperty( layerSettings.Size, true, false, NULL, "size" ); // 设置 Label 大小
    layerSettings.setDataDefinedProperty( layerSettings.Color, true, false, NULL, "color" ); // 设置 Label 颜色
    layerSettings.setDataDefinedProperty( layerSettings.Family, true, false, NULL, "font" ); // 设置 Label 字体

    layerSettings.writeToLayer( vectorLayer ); // 将配置写入图层

    QgsMapLayerRegistry::instance()->addMapLayer(vectorLayer);
    QgsMapLayerRegistry::instance()->addMapLayer(vectorLayer1);
    QgsMapLayerRegistry::instance()->addMapLayer(vectorLayer2);
    canvas->setAutoFillBackground(true);
    canvas->setBackgroundBrush(QBrush(Qt::black));
    canvas->show();
    QgsEditorWidgetRegistry::initEditors( canvas ); // 一定要做这步,其实最好是main函数一开始就执行这句

    QgsVectorLayerCache* lc = new QgsVectorLayerCache( vectorLayer, vectorLayer->featureCount() );

    QgsAttributeTableView* tv = new QgsAttributeTableView();
    QgsAttributeTableModel* tm = new QgsAttributeTableModel( lc );
    tm->loadLayer(); // 一定不要忘记,否则model里面没有图层的属性数据

    QgsAttributeTableFilterModel* tfm = new QgsAttributeTableFilterModel( canvas, tm, tm );
    tfm->setFilterMode( QgsAttributeTableFilterModel::ShowAll );
    tv->setModel( tfm );

    tv->show();
    QgsCustomLayerOrderWidget * w = new QgsCustomLayerOrderWidget(bridge);
    w->show();

    QgsProject::instance()->write(QFileInfo("D:/2.qgs"));

    return app.exec();
}

时间: 2024-08-24 22:31:52

QGIS的相关文章

基于高德在线地图及REST API 的 QGIS插件开发

一.           简述 地理信息系统(以下简称GIS)的造价一般是比较昂贵的.GIS平台和地图数据是GIS的重要组成部分,其价格(商业GIS平台的价格和商业地图资源的价格)一般都比较贵,因此很多中小用户建设一套服务于自己业务的GIS应用系统却难以承受其昂贵建设费用.而开源的地理信息平台和免费的在线地图资源给我们提供了一种比较价格比较低廉的解决方案,使您在投入少量资金就可以建设自己的地理信息应用,为您的日常工作提供GIS工具.本例以QGIS结合高德地图为例介绍免费的开源平台结合在线地图如何

用 QGIS 画矢量交通路线图

一.准备工作 1.安装插件 为了方便画图,我们安装了OpenLayers,QuickOSM两个插件. 如何安装插件,度娘上都有答案.下图中打勾的部分为安装好的插件: OpenLayers提供了一些开放的地图数据,有了这些数据后,我们就不必一切从头开始,比如Bing的卫星地图,我们可以从卫星图上准确的描出所需要的线,点,多边型. Bing 卫星地图 OpenStreetMap 2.创建项目 Qgis打开后,默认创建一个空白项目,且项目的默认坐标系为3857. 建立坐标系 有时Qgis自带的坐标系统

QGIS如何使用WMS图层

这边文章的讲的是QGIS如何使用WMS图层以及其WMS图层原理和缺点. 什么是WMS? (WMS)  Web Mapping Service 是一种远程的地图服务,好像一个网站,你可以通过连接一个远程服务器来获取,QGIS可以直接加载WMS图层.WMS图层不像从GOOGLE地图上加载的栅格地图,它是静态的,一旦你下载了图片,它就不会再更新变化了(除非你删除缓存).但通过放大和缩小地图.WMS图层却是可以动态更新的, 导入WMS 图层 你既可以使用以前配置好的地图也可以创建一个新地图加载一些已经存

qgis 源码学习

我已经编译出了qgis2.4的源码,进行了一些简单的二次开发,但是仍然感觉不爽,这么优秀的软件就单单在它上层做开发,太浪费了,我想学习qgis的源码的架构,顺便学习qgis的二次开发,为我将来的自己架构自己的软件吸取些经验. qgis的文档还是比较少的,并且1.0版本和2.0以上的版本差别很大,而中文的文档绝大部分针对1.0版本,如果照搬的话会导致编译出现问题.我以下的博文是边看编写. 1.qgis的源码文档如何找到? http://qgis.org/api/2.4/files.html 这里是

Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发

关于QGis的二次开发,大致看了一下,基本都是在VC+QT的环境下做环境部署,而且QGis的版本非常老,在mingw下直接开发搭建环境的例子少之又少,基于最新的Qgis2.4.0版本做了相应的尝试,并成功搭建相应的环境,大致的配置如下: 由于在搭建的过程之中遇到的问题实在太多,没有一一记录下来,所以在本文中没有做过多的描述,如有疑问可以联系[email protected],或者留言 环境搭建 pro文件配置 QT += core gui xml greaterThan(QT_MAJOR_VER

CentOS7上安装QGIS

1.加入YUM源 rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm 2.更新 sudo yum update 3.安装软件 yum install qgis qgis-python qgis-grass qgis-mapserver

QGIS 的安卓应用

QGIS能够支持ANDROID的应用的开发.而且能够编辑矢量数据,功能还是很强大的.

QGis C++ 开发之创建临时图层并添加要素

        开发环境:Win10 + VS2010 + Qt 4.8.6 + QGis 2.14.4 其实本文实现的功能类似于QGis中"添加文本数据图层"的一个简化版,本文不会涉及到对话框的使用,不通过与用户互交的方式创建要素,而是直接通过代码方式添加点要素,起到一个抛砖引玉的作用. (一)先将整个流程大概梳理下: 1.首先创建一个临时(memory)矢量图层 ; 2.将创建的图层添加到地图画布中 ; 3.创建几何要素 ; 4.将几何要素添加到矢量图层中 ; 5.更新图层范围并刷

Qgis 里的Python脚本介绍

QGIS 入门演示之<用 QGIS 画矢量交通路线图> 脚本编程之准备知识<Python 教程> QGIS API QGIS插件库 运行QGIS脚本,对于桌面应用来讲有4种方式: QGIS 启动时自动运行Python脚本 QGIS 控制台中运行发布的Python命令 创建Python写的插件 创建基于QGIS API的应用程序 QGIS服务端绑定: 2.8 开始,QGIS服务端包含Python插件 (see: Server Python Plugins) 2.11开始 (2015-