Qgis二次开发包下载及配置
2016-01-14 13:43
906 查看
实习已经一个多月了,这周的任务需要用到qgis,所以首先需要编译并配置好这个库,自己尝试编译这个库,但是感觉很复杂,中间出的问题没能解决也就放弃了(还得找时间再试试)。后来在网上找到了另外一个教程,其中提到可以利用Osgoe4W下载qgis二次开发包,不用自己编译源码,省了很多麻烦,果断尝试了下这种方法。
关于二次开发包下载这部分,这篇博客写得非常详细,可以参考:http://blog.csdn.net/deirjie/article/details/48216773,文章写了两个模块,我们只需要看“QGis二次开发包下载”这部分;
配置qgis,可以参考上面博主的另外一篇博文:http://blog.csdn.net/deirjie/article/details/21400109,也写得非常详细,不多说了。
可能你会说,博主你TM逗啊,什么都是别人写的,你还bb了这么多!但是,你以为你按照上面两片博文就一定能成功吗?天真!我主要是想记录一下自己在这个过程中遇到的问题,如果你也遇到了类似的问题,希望对你有所帮助,这才是我的初衷。
1.选择下载那个版本的Osgeo4W,32位 or 64位?
并不是你的电脑系统安装的是64位就得下64位的Osgeo4W,而是参照你安装的Qt版本,如果安装的Qt是32位的,那么就下载32位的Osgeo4W。昨天搜到一篇文章提到,对于4.x版本的Qt,官方只提供了32位版本的安装包,如果要安装64位版本,需要袭击编译。所以我估计一般人都是安装的32位版本的Qt。
如果安装过程中提示这条消息:fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64',我们可以在这里更改一下:
2.如果按照上面的方法,出现一堆无法解析的外部符号,在确定自己正确添加lib目录及依赖的lib库之后,可以尝试
对比一下前面配置qgis那篇博客的写法吧
配置成功之后,把下面的代码放到main.cpp里试试:
#include<QtGui/QApplication>
#include<qgsapplication.h>
#include<qgsproviderregistry.h>
#include<qgsmaplayerregistry.h>
#include<qgsvectorlayer.h>
#include<qgsmapcanvas.h>
#include<QString>
#include<QApplication>
#include<QWidget>
#include <QStringList>
#include<QMessageBox>
#include<QObject>
#include <QList>
#include <QFileInfoList>
#include <QDir>
#include <QLibrary>
#include <QDebug>
#include <qgssymbollayerv2.h>
#include <qgssymbolv2.h>
#include <qgsmarkersymbollayerv2.h>
#include <qgsvectorlayerrenderer.h>
#include <qgsrendercontext.h>
#include <qgssinglesymbolrendererv2.h>
#include <qgssymbollayerv2.h>
int main( int argc, char *argv[] )
{
QgsApplication myApp( argc, argv, true );
QgsApplication::setPrefixPath( "E:\\ProgramFiles\\QGIS_x86\\apps\\qgis-ltr", true );
QgsApplication::initQgis();
QgsProviderRegistry* provider = QgsProviderRegistry::instance();
// 改成你自己的点矢量文件路径
QString myLayerPath = "E:\\123.shp";
QString myLayerBaseName = "airports"; //图层名称;
QList<QgsMapLayer*> myList;
QgsVectorLayer* veclayer = new QgsVectorLayer( myLayerPath, myLayerBaseName, "ogr", false );
if ( !veclayer )
{
return 0;
}
if ( veclayer->isValid() )
{
QMessageBox::information( 0, "", "layer is valid" );
veclayer->setProviderEncoding( "System" );
myList << veclayer;
}
if ( veclayer->geometryType() == QGis::Point )
{
// 创建 svgMarkerSymbolLayer
QgsSvgMarkerSymbolLayerV2* svgMarker = new QgsSvgMarkerSymbolLayerV2();
svgMarker->setPath( "E:\\ProgramFiles\\QGIS2.12\\apps\\qgis\\svg\\money\\money_bank2.svg" );
QgsSymbolLayerV2List symList;
symList.append( svgMarker );
QgsMarkerSymbolV2* markSym = new QgsMarkerSymbolV2( symList );
QgsSingleSymbolRendererV2* symRenderer = new QgsSingleSymbolRendererV2( markSym );
svgMarker->setSize( 10 );
veclayer->setRendererV2( symRenderer );
}
QgsMapLayerRegistry::instance()->addMapLayer( veclayer );
QList<QgsMapCanvasLayer> myLayerSet;
myLayerSet.append( QgsMapCanvasLayer( veclayer ) );
QgsMapCanvas* mypMapCanvas = new QgsMapCanvas( 0, 0 );
mypMapCanvas->setExtent( veclayer->extent() );
mypMapCanvas->enableAntiAliasing( true );
mypMapCanvas->setCanvasColor( QColor( 255, 255, 255 ) );
mypMapCanvas->freeze( false );
mypMapCanvas->setLayerSet( myLayerSet );
mypMapCanvas->setVisible( true );
mypMapCanvas->refresh();
return myApp.exec();
}
如果遇到其它问题,欢迎留言。
关于二次开发包下载这部分,这篇博客写得非常详细,可以参考:http://blog.csdn.net/deirjie/article/details/48216773,文章写了两个模块,我们只需要看“QGis二次开发包下载”这部分;
配置qgis,可以参考上面博主的另外一篇博文:http://blog.csdn.net/deirjie/article/details/21400109,也写得非常详细,不多说了。
可能你会说,博主你TM逗啊,什么都是别人写的,你还bb了这么多!但是,你以为你按照上面两片博文就一定能成功吗?天真!我主要是想记录一下自己在这个过程中遇到的问题,如果你也遇到了类似的问题,希望对你有所帮助,这才是我的初衷。
1.选择下载那个版本的Osgeo4W,32位 or 64位?
并不是你的电脑系统安装的是64位就得下64位的Osgeo4W,而是参照你安装的Qt版本,如果安装的Qt是32位的,那么就下载32位的Osgeo4W。昨天搜到一篇文章提到,对于4.x版本的Qt,官方只提供了32位版本的安装包,如果要安装64位版本,需要袭击编译。所以我估计一般人都是安装的32位版本的Qt。
如果安装过程中提示这条消息:fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64',我们可以在这里更改一下:
2.如果按照上面的方法,出现一堆无法解析的外部符号,在确定自己正确添加lib目录及依赖的lib库之后,可以尝试
对比一下前面配置qgis那篇博客的写法吧
配置成功之后,把下面的代码放到main.cpp里试试:
#include<QtGui/QApplication>
#include<qgsapplication.h>
#include<qgsproviderregistry.h>
#include<qgsmaplayerregistry.h>
#include<qgsvectorlayer.h>
#include<qgsmapcanvas.h>
#include<QString>
#include<QApplication>
#include<QWidget>
#include <QStringList>
#include<QMessageBox>
#include<QObject>
#include <QList>
#include <QFileInfoList>
#include <QDir>
#include <QLibrary>
#include <QDebug>
#include <qgssymbollayerv2.h>
#include <qgssymbolv2.h>
#include <qgsmarkersymbollayerv2.h>
#include <qgsvectorlayerrenderer.h>
#include <qgsrendercontext.h>
#include <qgssinglesymbolrendererv2.h>
#include <qgssymbollayerv2.h>
int main( int argc, char *argv[] )
{
QgsApplication myApp( argc, argv, true );
QgsApplication::setPrefixPath( "E:\\ProgramFiles\\QGIS_x86\\apps\\qgis-ltr", true );
QgsApplication::initQgis();
QgsProviderRegistry* provider = QgsProviderRegistry::instance();
// 改成你自己的点矢量文件路径
QString myLayerPath = "E:\\123.shp";
QString myLayerBaseName = "airports"; //图层名称;
QList<QgsMapLayer*> myList;
QgsVectorLayer* veclayer = new QgsVectorLayer( myLayerPath, myLayerBaseName, "ogr", false );
if ( !veclayer )
{
return 0;
}
if ( veclayer->isValid() )
{
QMessageBox::information( 0, "", "layer is valid" );
veclayer->setProviderEncoding( "System" );
myList << veclayer;
}
if ( veclayer->geometryType() == QGis::Point )
{
// 创建 svgMarkerSymbolLayer
QgsSvgMarkerSymbolLayerV2* svgMarker = new QgsSvgMarkerSymbolLayerV2();
svgMarker->setPath( "E:\\ProgramFiles\\QGIS2.12\\apps\\qgis\\svg\\money\\money_bank2.svg" );
QgsSymbolLayerV2List symList;
symList.append( svgMarker );
QgsMarkerSymbolV2* markSym = new QgsMarkerSymbolV2( symList );
QgsSingleSymbolRendererV2* symRenderer = new QgsSingleSymbolRendererV2( markSym );
svgMarker->setSize( 10 );
veclayer->setRendererV2( symRenderer );
}
QgsMapLayerRegistry::instance()->addMapLayer( veclayer );
QList<QgsMapCanvasLayer> myLayerSet;
myLayerSet.append( QgsMapCanvasLayer( veclayer ) );
QgsMapCanvas* mypMapCanvas = new QgsMapCanvas( 0, 0 );
mypMapCanvas->setExtent( veclayer->extent() );
mypMapCanvas->enableAntiAliasing( true );
mypMapCanvas->setCanvasColor( QColor( 255, 255, 255 ) );
mypMapCanvas->freeze( false );
mypMapCanvas->setLayerSet( myLayerSet );
mypMapCanvas->setVisible( true );
mypMapCanvas->refresh();
return myApp.exec();
}
如果遇到其它问题,欢迎留言。
相关文章推荐
- Java我的高效编程之环境搭建
- AndroidStudio 鼠标进入代码区显示提示信息
- 海量数据迁移之误操作和防范建议
- Java学习笔记
- GDAL编译支持中文
- cell 中textfield
- 点击前后标签颜色设置
- 二叉树先序建立,先序遍历,中序遍历,后序遍历(递归)
- 通过vmstat的简单分析数据库操作
- Android:在ADT中快速多行注释的方法
- FTP主动模式与被动模式
- 一篇不错的项目管理之道
- 怎样使用docker不加sudo
- 第4时 改进小游戏
- Flask源码阅读(十)——查缺补漏
- 公司选择的三种态度(必知)
- Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!
- Linux服务器性能评估
- 实现Linux免密钥登陆
- Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!