您的位置:首页 > 其它

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();
}

如果遇到其它问题,欢迎留言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: