Qgis学习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
QGIS教程【GBPS详解】
写在前面的话:
我喜欢用ArcMap来绘制地图,但今天要讲的是用一款叫QGIS的软件。
为什么要用QGIS?ArcGIS太强大了,正因为它太强大,所以,不得不考虑换一个软件。
ArcGIS 10的安装包有3.75G,如此庞大的软件,的确令人生畏。
而购
买ArcGIS的费用也基本上是天价级别,如果不用破解,大伙都用不起。
于是我一直想找寻一款免费但功能强劲的GIS软件来支持我的GBPS理论,从QGIS到DIVA-GIS,到MapWindow,又到QGIS。
最后还是决定用QGIS。
QGIS,全称为Quantum GIS,是一款比较知名的免费开源GIS软件,由于在这里我们不谈论二次开发,所以什么源码、编程之类一概不谈。
(QGIS官网:)
——————————————分割线————————————————
正文:
其实我还蛮喜欢教东西的,但是只是喜欢说教,却懒得写教程,所以可能有些地方写的不详细,还请各位看官见谅。
有疑问可留言,我会尽快回复。
对了,我在写教程的过程中我会默认你在大学中上过有关GIS的课,哪怕你上课睡觉或者早就忘的差不多了都没有关系。
如果没有……那你最好先补一下GIS
的基本常识(我对GIS也不是很精通,所以有个皮毛就可以了)。
1、下载和安装QGIS
下载地址:
/downloads/QGIS-OSGeo4W-1.7.4-d211b16-Setup.exe (截至
2012年7月5日的最新版本为1.8.1,但我发现其不支持中文数据,所以在这提供的是1.7.4版本。
大小为111M)
下载后双击安装,最好安装在非中文目录下,即路径中不要含有中文字符;而且路径名称中不要有空格,所以不能装在Program Files文件夹下面,建议装在“C:/QGIS”或“D:/QGIS”目录下。
不出意外的话,点桌面上的“Quantum GIS Desktop (1.7.4)”图标即可打开。
如果报错,请百度或谷歌。
/image.axd?picture=2012%2f7%2fQQ%e6%88%aa%e5%9b% be20120706180649.jpg
2、安装Openlayer插件
打开你的QGIS,如果操作界面看不大明白没关系,以后再讲。
为啥要装这个插件?这个插件可以在地图中添加常用的网络地图为底图,对于我
们绘制地图来说非常方便。
支持谷歌、OpenStreetMap、Yahoo、Bing、Apple iphoto
等。
执行: 插件(P)->Fetch Python plugins
这时候弹出一个框,等它下载完后,出现三个标签,选第二个,即Repositories,
按“Add……”,添加一个URL为:
http://build.sourcepole.ch/qgis/plugins.xml 的Repositories(字面意思
可理解为放插件的仓库地址),名称随意,然后确定。
确定后会更新插件列表,从列表中选择OpenLayer安装。
如果不好找试试用
Filter搜索。
3、绘制地图
执行:插件(P)->OpenLayer plugin->Add Google Physical Map
谷歌地图就添加到地图窗口了。
(如果无聊的话你可以试试其他的地图,因为服
务商都不是中国的,所以,中国的数据还是谷歌的比较详细)
画哪儿的地图呢?就画个什邡的吧,谁让什邡最近这么火呢。
先在地图上找到什邡,地图缩放到中国-四川-成都,然后上面一点就是什邡了。
如果不好找,就用openLayer再添加一个谷歌的街道地图。
地儿是找着了,没有边界啊。
现在到网上去找一张什邡的地图,看这里:
/articleimage/200805/scxsfxd.jpg
地图下载后执行:Raster->Georeferencer->Georeferencer(或者直接点工具
栏上的配准图标)
在新弹出的窗口中点Open Raster工具。
将下载的地图添加进来,需要说明的是QGIS的配准方法与ArcMap稍微有一点点差别,但本质上是一样的。
这时候Add Point工具是默认选中的,QGIS需要至少添加4个配准点才能配准。
先在图片上找一个配准点点一下,然后会弹出一个框提示你输入地图坐标,这时候选“From map canvas”,即从地图上拾取。
点击后,配准窗口自动最小化,显示出地图窗口,然后从地图上选取与刚刚选择的配准点对应的点,点击后会自动回到配准窗口,点击确定,以添加该配准点。
下面的截图显示了我添加的四个配准点,由于我早就有什邡的边界的shp文件,所以我投机取巧仅仅是示意一下,大家在配准的时候,可要仔仔细细,多添加几个配准点,而且要确保清晰准确。
配准后通过转换设定和开始配准工具,即可生成带有坐标的tif位图。
回到地图主窗口,点添加位图工具,将配准后的tif图片加入。
调整其透明度(双击其所在的图层),检查配准情况。
配准合格后,我们新建一个shp文件(New Shapefile Layer工具)。
类型选择线,坐标系统默认即可,设置一个名为type的新属性,格式为text,
然后确定,我们将文件名命名为border.shp。
在图层窗口中选中border.shp,工具栏点“Toggle Editing”工具,开始进行
编辑,左键画,右键完成。
设置snapping,执行:设置(S)->Snapping options,设置border.shp的snapping
最大容许值,设置为0.005m,QGIS和ArcMap的这个值的单位好像不大一样,自己试试看。
/image.axd?picture=2012%2f7%2f04.jpg 然后画边界,县界、乡镇界的type值稍微区分一下。
完成后保存编辑,我们得到这个:
设置border.shp的样式,关闭tif图片,再添加个乡镇的点shp。
最后得到:
QGIS
教程【
GBPS
详解】
-
2
:绘制一张地图
(中)
6.
七月
2012
|
评论
|
by
codeychai
4、绘制道路和景点
根据之前所讲的,现在再把道路和景点临摹上去。
等所有都完成后,去掉或隐藏所有网络地图。
然后适当调整每个图层的现实样式,得到:
5、给城市和景点添加标注
双击城镇的图层,打开图层属性,找到“标签”的tab,启用标签,设置显示字段name,并调整标签样式。
(请原谅我写的没有那么细致,因为一项项写出来实在是太费事了,都不难,自己看看就能学会,这是我正式用QGIS的第二天,你看,我不也都自己学会了,QGIS的操作方法跟ArcMap很像,应该很容易上手的)
因为景点太多了,我们用另一种方式给他添加标签。
选中景点所在的图层,点击工具栏上的“Labeling”工具,按提示设置label的样式。
随着地图的缩放你会
发现label会自动调整自己的位置以不遮挡其他label。
这个跟ArcMap的类似。
6、排版输出jpg图片
执行:文件(F)->New Print Composer
这时候会弹出个排版的窗口。
工具栏上按添加新地图工具,在白纸上拖出一个画幅,放置刚刚绘制的地图。
通过Move item Content工具,并配合滚轮,可以设置地图内容的位置和缩放大小。
我们选一个A3的纸张,设置为300dpi,对整个地图进行排版。
输出后,得到一份简约的什邡旅游地图:
/image.axd?picture=2012%2f7%2fQQ%e6%88%aa%e5%9b% be20120706175252.jpg
本次就先写到这,下次讲如何给地图加地形(可用于分析的地形,而非网络地图)。
QGIS
教程【
GBPS
详解】
-
3
:绘制一张地图
(下)
7.
七月
2012
|
评论
|
by
codeychai
7、添加DEM
美国的卫星数据有很多是免费的,虽然精度有限,但对于县域地图来说,已经足够了。
网上有很多免费的DEM可供下载,比如SRTM、ASTER GDEM等等,中
科院也有相关的镜像,可以从国内下载。
国外的地址请自行谷歌,我这里贴一个中科院的镜像地址:/admin/datademMain.jsp
我在这里用中科院的30米分辨率数字高程数据产品,在检索页面找到什邡市的DEM数据,有两块。
因为什邡市跨越了东经103、104两个经度段。
将它们分别
下载下来。
解压后得到两个20M左右的img格式文件。
这两个img对于什邡市地图来说,太大了。
所以最好裁剪一下,当然了,如果你的计算机硬件足够ok,也可以忽略这一步。
但在裁剪之前必须先将这两个img合并,或者你分别对两个img进行裁剪,但我想那不是一个好主意。
合并两个img,执行:Raster->Miscellaneous->Merge
按提示输入两个img文件,并设置保存文件名。
这里记得勾选一下No Date Value:0,否则合并后有接缝。
同时勾选一下Load into canvas when finished,这样合并完之后会自动添加
到地图中去。
点击确定,进行合并。
进行裁剪,执行:Raster->Extraction->Clipper
裁剪范围我用的事先准备好的shp文件,当然也可手动输入坐标范围。
裁剪完成后得到一张黑不溜秋的dem_clip。
be20120707230502.jpg
8、生成hillshade
执行:Raster->Analysis->DEM
设置输出文件名称,mode选hillshade。
其他参数默认,然后确定。
将dem_clip和hillshade两层至于所有图层最后,然后hillshade置于最后。
调整dem_clip的透明度为50%,并将其Style调整为显示colormap,将Colormap 标签下添加10个色段。
默认的色段颜色是蓝到红,做地形渐变很难看。
调整其为浅绿色到浅红色的渐变。
(这一点不如ArcMap好使了,因为ArcMap有预置好的色带可选,而QGIS则需要手动调,不过调好后可以存下来备用,下次用的时候就方便了。
)
be20120707231024.jpg
调整好个图层的样式后,回到print composer,设置地图版式和布局。
然后就可以输出地图了。
输出jpg后发现,栅格数据输出后带了几条线,是个bug。
导出pdf也同样带这条线。
矢量数据输出则没有任何问题。
be20120707232557.jpg
小结:这几天试着学了一个QGIS,顺便出这个教程,对于制图而言,发现ArcMap 可以做的,QGIS基本都可以实现。
有些情况下,ArcMap效率可能更高,毕竟是商业软件和免费软件的区别。
但对于GBPS来说,我想QGIS已经足够了!
今天画地图只是开个小头,接下的教程里会跟大家逐一介绍如何用QGIS对规划中各个环节进行支撑,如何分析基础条件、资源、市场、空间布局,并对基础设施规划和生态环境保护等做详细介绍。
再次声明,GBPS不是出几张坡度、坡向、高程的分析图,而是一套完整的规划支持体系,如果以为GIS就是谷歌地图、GIS分析就是做坡度分析,那我也无话可说,您可以出门右拐了……毕竟很多做规划的人并不懂GIS每个字母代表什
么意思。
Filed in:
规划与
GIS
Tags:
QGIS
教程
,
GBPS
QGIS
教程【
GBPS
详解】
-
4
:将地图数据与
规划团队分享
11.
七月
2012
|
评论
|
by
codeychai
就目前国内规划项目组的成员组成来看,你可能是你所在的规划团队中唯一一个懂GIS的人,其他人不会对GIS软件进行操作,那你的成果如何让其他人也能享用?
将成果导出为jpg,这是一个不错的主意,但并不是所有的东西都转成jpg来的好使。
前三次教程主要讲如何制作一副地图,随着数据的不断深入,它完全可以作为最终规划图件的底图。
而这一步在规划前期(项目实地考察前)即可基本完成。
当项目考察时,你可以将地图导出为高精度的jpg,这样,项目团队在考察过程中就有了方向感。
当然,有些情况下甲方会现场提供当地的一些地图资料,但在未到达项目地之前,你做的地图就是给大家最好的空间指引,甚至有时候你会发现,你做的地图会比他们给出的图件更有价值。
在项目考察的过程中,你用笔或者GPS设备记录下走过的节点,回到公司,你迫不及待的将这些点输入到GIS中,并对之前的地图做出修正。
随着项目的推进,当团队成员开始对项目地的资源进行消化的时候,你会发现,他们虽然都不会使用GIS分析软件,但他们都打开了电脑桌面上的Google Earth 或者在浏览器中拖拽着谷歌卫星地图。
他们现在困惑的是:你给出的地图上面虽然标注的很清楚,但他们不知道这些点究竟在GE里面处于一个什么样的位置,他们在搜索框中,冒着被GFW封锁的危险,一次次的输入想要查询的内容……
其实GE是一款大众化的地图浏览软件,其对卫星地图的浏览功能很强大,最为重要的是:你所在的项目组成员都会使用它!
现在要做的是:把QGIS地图导入到GE。
/image.axd?picture=2012%2f7%2fQQ%e6%88%aa%e5%9b% be20120711134800.jpg
在QGIS中的操作很简单,在相应的图层上点击右键,选save as即可。
保存格式选择Keyhole Markup Language(KML),然后起名,保存。
双击保存后的kml,我们就可以把该图层的信息在GE中加载了。
下面是加载了边界和旅游资源点的GE:
如果你的数据表中还有其他更多的信息,我相信,你的团队成员看到后,会大吃
一惊,并会毫不吝啬的夸奖你的!
ps:QGIS导出的格式为kml,而ArcMap可导出Kmz。
Kmz可以看做是zipped kml,
这两种格式都是谷歌自家的格式,GE都能打开,但ArcMap导出Kmz的时候,会
把地图样式也打包进去,而QGIS导出的kml则将是GE的默认样式,你可以通过
在GE中重新修改样式来自定义点线面的样式。
不过这并不妨碍QGIS发挥其伟大
的功能为我们这些矮穷挫的屌丝规划师们提供福音。
Filed in:
规划与
GIS
Tags:
QGIS
教程
,
GBPS
,
GE
复制代码
复制代码
复制代码
QGIS二次开发教程(一)
QGIS二次开发教程一
——用QGIS的API编写自定义应用程序
教程一:使用QGIS Canvas API编写一个简单的地图显示程序
参考翻译自Quantum GIS官方网站
事实上,我们并不是所有的时候都需要一个庞大、完整的GIS桌面应用程序,有时候我们的应用程序主要
用于其他的目的,而我们所需要的只是在用程序中添加一个具有地图显示功能的小工具。
譬如一个带有地
图显示功能的数据库前端。
接下来我们就创建一个简单的地图小工具,功能仅仅是加载一个shape文件并用随机颜色加以显示。
但是
通过这个简单的例子你应该能体会到将QGIS作为一个嵌入式的地图组件的潜力。
首先,在我们的应用程序里添加必要的includes:
1 //
2 // QGIS Includes
3 //
4 #include <qgsapplication.h>
5 #include <qgsproviderregistry.h>
6 #include <qgssinglesymbolrenderer.h>
7 #include <qgsmaplayerregistry.h>
8 #include <qgsvectorlayer.h>
9 #include <qgsmapcanvas.h>
10 //
11 // Qt Includes
12 //
13 #include <QString>
14 #include <QApplication>
15 #include <QWidget>
我们用QgsApplication代替Qt中的QApplication来创建应用程序,这样可以方便地调用QGIS 中的许多静
态方法,比如得到库文件所在的路径等等。
各种数据的提供商plugins通过提供商注册表(QgsProviderRegistry)来管理,它会根据提供商自动加载相应
的plugins,我们所需要做的就是指定plugins所存放的目录,让应用程序实例化这样的提供商注册表。
QgsSingleSymbolRenderer是最基本的符号类,它用一种颜色表示点、线、多边形对象。
默认情况下颜色
是随机选取的,当然,你也可以自己设定希望显示的颜色。
每一个矢量图层都有一个对应的符号。
地图图层注册表(QgsMapLayerRegistry)用来管理现在正在使用的图层。
QgsVectorLayer 继承自
QgsMapLayer,添加了矢量数据特有的功能。
最后,地图画布(QgsMapCanvas)才是问题的关键,我们的地图将被绘制在这个工具上。
现在,我们开始初始化我们的应用程序:
1 int main(int argc, char ** argv)
复制代码
复制代码
复制代码
2 {
3 // Start the Application
4 QgsApplication app(argc, argv, true);
5
6 QString myPluginsDir = "/home/timlinux/apps/lib/qgis";
7 QString myLayerPath = "/home/timlinux/gisdata/brazil/BR_Cidades/";
8 QString myLayerBaseName = "Brasil_Cap";
9 QString myProviderName = "ogr";
这样我们就得到了一个qgsapplication。
变量myLayerPath指定了plugins所在的目录。
变量myLayerPath和myLayerBaseName指向要使用的shape文件。
变量myProviderName很重要,它告诉qgis加载数据文件需要使用哪个数据提供商。
一般为”ogr”
或”postgres”。
现在我们可以开始创建图层了:
1 // Instantiate Provider Registry
2 QgsProviderRegistry::instance(myPluginsDir);
首先我们需要初始化提供商注册表。
QgsMapLayerRegistry是一个单类(singleton class),因此我们使用
它的静态函数instance()传递供应商插件库的路径,在此之后它将在这个路径下查找提供商的插件。
接下来我们继续创建图层:
1 QgsVectorLayer * mypLayer =
2 new QgsVectorLayer(myLayerPath, myLayerBaseName, myProviderName);
3 QgsSingleSymbolRenderer *mypRenderer = new QgsSingleSymbolRenderer(mypLayer->geometryType());
4 QList <QgsMapCanvasLayer> myLayerSet;
5
6 mypLayer->setRenderer(mypRenderer);
7 if (mypLayer->isValid())
8 {
9 qDebug("Layer is valid");
10 }
11 else
12 {
13 qDebug("Layer is NOT valid");
14 }
15
16 // Add the Vector Layer to the Layer Registry
17 QgsMapLayerRegistry::instance()->addMapLayer(mypLayer, TRUE);
18 // Add the Layer to the Layer Set
19 myLayerSet.append(QgsMapCanvasLayer(mypLayer, TRUE));
复制代码
复制代码
这段代码的意义显而易见。
我们用前面定义的变量创建了一个图层,然后给这个图层分配了一个渲染器
(renderer)。
在创建渲染器的时候,我们需要指定图层的几何类型,这个可以通过图层对象的
geometryType()函数得到。
然后将图层对象layer添加到图层列表layerset和地图图层注册表QgsMapLayerRegistry中,layerset告诉QgsMapCanvas那些图层需要渲染、它们的顺序如何。
最后,我
们要保证这个图层是可见的。
现在我们创建一个地图画布用于显示地图图层。
1 // Create the Map Canvas
2 QgsMapCanvas * mypMapCanvas = new QgsMapCanvas(0, 0);
3 mypMapCanvas->setExtent(mypLayer->extent());
4 mypMapCanvas->enableAntiAliasing(true);
5 mypMapCanvas->setCanvasColor(QColor(255, 255, 255));
6 mypMapCanvas->freeze(false);
7 // Set the Map Canvas Layer Set
8 mypMapCanvas->setLayerSet(myLayerSet);
9 mypMapCanvas->setVisible(true);
10 mypMapCanvas->refresh();
这段代码也很简单。
我们创建了一个画布,然后将它的范围设置为我们图层的范围。
接下来打开反走样功
能,并设置背景颜色为白色,解冻画布,设置其为可见并刷新。
1 // Start the Application Event Loop
2 return app.exec();
3 }
在这最后一步中,我们所做的仅仅是启动Qt事件循环。
是不是很简单?
这个例子中的源代码可以通过svn下载(当然,前提是安装了svn工具),下载命令如下:svn co https:///qgis/trunk/code_examples/1_hello_world_qgis_style
分类: C/C++, QGIS
标签: QGIS, 二次开发
QGIS二次开发教程一
时间:2012-05-25 18:40来源:未知作者:admin浏览: 66人
用QGIS的API编写自定义应用程序教程一:使用QGIS Canvas API编写一个简
单的地图显示程序参考翻译自Quantum GIS官方网站事实上,我们并不是所有的时候都需要一个庞大、完整的GIS桌面应用
——用QGIS的API编写自定义应用程序
教程一:使用QGIS Canvas API编写一个简单的地图显示程序
参考翻译自Quantum GIS官方网站
事实上,我们并不是所有的时候都需要一个庞大、完整的GIS桌面应用程序,有时候我们的应用程序主要用于其他的目的,而我们所需要的只是在用程序中添加一个具有地图显示功能的小工具。
譬如一个带有地图显示功能的数据库前端。
接下来我们就创建一个简单的地图小工具,功能仅仅是加载一个shape文件并用随机颜色加以显示。
但是通过这个简单的例子你应该能体会到将QGIS作为一个嵌入式的地图组件的潜力。
首先,在我们的应用程序里添加必要的includes:
1 //
2 // QGIS Includes
3 //
4 #include <qgsapplication.h>
5 #include
<qgsproviderregistry.h> 6 #include <qgssinglesymbolrenderer.h> 7
#include <qgsmaplayerregistry.h> 8 #include <qgsvectorlayer.h> 9
#include <qgsmapcanvas.h>10 //11 // Qt Includes12 //13 #include
<QString>14 #include <QApplication>15 #include <QWidget>
QGIS二次开发教程一
QgsSingleSymbolRenderer是最基本的符号类,它用一种颜色表示点、线、多边
形对象。
默认情况下颜色是随机选取的,当然,你也可以自己设定希望显示的颜色。
每一个矢量图层都有一个对应的符号。
地图图层注册表(QgsMapLayerRegistry)用来管理现在正在使用的图层。
QgsVectorLayer 继承自QgsMapLayer,添加了矢量数据特有的功能。
最后,地图画布(QgsMapCanvas)才是问题的关键,我们的地图将被绘制在这个工具上。
现在,我们开始初始化我们的应用程序:
1 int main(int argc, char ** argv)
2 {
3 // Start the Application
4 QgsApplication app(argc, argv, true);
5
6 QString myPluginsDir
= "/home/timlinux/apps/lib/qgis";7 QString myLayerPath =
"/home/timlinux/gisdata/brazil/BR_Cidades/";8 QString
myLayerBaseName = "Brasil_Cap";9 QString myProviderName =
"ogr";
这样我们就得到了一个qgsapplication。
各种数据的提供商plugins通过提供商注册表(QgsProviderRegistry)来管理,
它会根据提供商自动加载相应的plugins,我们所需要做的就是指定plugins所
存放的目录,让应用程序实例化这样的提供商注册表。
变量myLayerPath指定了plugins所在的目录。
变量myLayerPath和myLayerBaseName指向要使用的shape文件。
首先我们需要初始化提供商注册表。
QgsMapLayerRegistry是一个单类(singleton class),因此我们使用它的静态函数instance()传递供应商插件
库的路径,在此之后它将在这个路径下查找提供商的插件。
变量myProviderName很重要,它告诉qgis加载数据文件需要使用哪个数据提供商。
一般为”ogr”或”postgres”。
QGIS二次开发教程一(2)
时间:2012-05-25 18:40来源:未知作者:admin浏览: 67人
现在我们可以开始创建图层了:1 // Instantiate Provider Registry 2 QgsProviderRegistry::instance(myPluginsDir); 接下来我们继续创建图层:
1 QgsVectorLayer * mypLayer =
2 new Qg
现在我们可以开始创建图层了:
1 // Instantiate Provider Registry2
QgsProviderRegistry::instance(myPluginsDir);
接下来我们继续创建图层:
1 QgsVectorLayer * mypLayer =
2 new QgsVectorLayer(myLayerPath,
myLayerBaseName, myProviderName); 3 QgsSingleSymbolRenderer *mypRenderer = new
QgsSingleSymbolRenderer(mypLayer->geometryType());if (mypLayer->isValid()) 8 { 9 qDebug("Layer is valid");10 }11
else12 {13 qDebug("Layer is NOT valid");14 }15 16 // Add the Vector Layer to the Layer Registry17
QgsMapLayerRegistry::instance()->addMapLayer(mypLayer, TRUE);18 //
Add the Layer to the Layer Set19
myLayerSet.append(QgsMapCanvasLayer(mypLayer, TRUE));
这段代码的意义显而易见。
我们用前面定义的变量创建了一个图层,然后给这个图层分配了一个渲染器(renderer)。
在创建渲染器的时候,我们需要指定图层的几何类型,这个可以通过图层对象的geometryType()函数得到。
然后将图层
对象layer添加到图层列表layerset和地图图层注册表QgsMapLayerRegistry
中,layerset告诉QgsMapCanvas那些图层需要渲染、它们的顺序如何。
最后,我们要保证这个图层是可见的。
现在我们创建一个地图画布用于显示地图图层。
1 // Create the Map Canvas
2 QgsMapCanvas * mypMapCanvas = new QgsMapCanvas(0, 0);
3 mypMapCanvas->setExtent(mypLayer->extent());
4 mypMapCanvas->enableAntiAliasing(true); 5
mypMapCanvas->setCanvasColor(QColor(255, 255, 255)); 6
mypMapCanvas->freeze(false); 7 // Set the Map Canvas Layer Set 8 mypMapCanvas->setLayerSet(myLayerSet); 9
mypMapCanvas->setVisible(true);10 mypMapCanvas->refresh();
这段代码也很简单。
我们创建了一个画布,然后将它的范围设置为我们图层的范围。
接下来打开反走样功能,并设置背景颜色为白色,解冻画布,设置其为可见并刷新。
1 // Start the Application Event Loop
2 return app.exec();
3 }
在这最后一步中,我们所做的仅仅是启动Qt事件循环。
是不是很简单
QGIS二次开发教程一(3)
时间:2012-05-25 18:40来源:未知作者:admin浏览: 68人
这个例子中的源代码可以通过svn下载(当然,前提是安装了svn工具),下载命令如下:我们用QgsApplication代替Qt中的QApplication来创建应用程序,这样可以方
这个例子中的源代码可以通过svn下载(当然,前提是安装了svn工具),下载命令如下:
我们用QgsApplication代替Qt中的QApplication来创建应用程序,这样可以
方便地调用QGIS中的许多静态方法,比如得到库文件所在的路径等等。
svn co
https:///qgis/trunk/code_examples/1_hello_world_qgis_style
QGIS推出1.8.0版‘Lisboa’
2012年6月25日發表評論閱讀評論
去年6月QGIS推出1.7.0版本,官方並表示應該不會再進行1.X系列的更新,但相隔1年左右的時間,
仍繼續推出QGIS 1.8.0版’Lisboa’,相信這是為了能推出更完善的QGIS 2.0版本所做的準備。
事實上,
在QGIS 1.8.0版中做了相較於前面版本中所沒有的大改變,以下介紹此版本中新增的功能:>>下載安裝QGIS 1.8.0版
*QGIS瀏覽器
. 1.8.0版本加入了一個獨立的應用程式–QGIS Browser。
這個應用程式的功能有點像ESRI ArcGIS中的ArcCatalog,能在載入圖檔之前先預覽其縮圖或metadata。
決定要載入後,可使用拖曳的方式直接將圖檔加入QGIS 主程式中載入圖層。
.tw/kumahl/qgis_1.8.0/03_s.png
*資料庫管理
. 本版本將原本是第三方所開發的資料庫管理Plugins(DB Manager)加入QGIS官方的核心元件。
此功能可以使用拖曳的方式將圖層自QGIS主程式中上載至資料庫,或從資料庫中載入圖層,除
此之外,也提供SQL語法檢索及預覽縮圖及metadata檢索。
*新增地型分析模組
. 下圖以台灣30米dtm為例進行套色
.tw/kumahl/qgis_1.8.0/08.png *可將數個檔案加入至群組中
*Log Message
o 記錄開啓程式後的所有動作
.tw/kumahl/qgis_1.8.0/10_s.png
*客製化工作列
*可在檔案中自訂動作,設定完成後即可用滑鼠控制觸發動作
.tw/kumahl/qgis_1.8.0/12.png *比例尺列提供下拉式選單供選擇
*坐標系統選擇器的對話框更新
*全新網頁集中管理QGIS Plugins
*額外的圖層順序功能
o 提供另一個控制介面讓使用者在不影響圖層表現的情況下重新排列圖層(如以圖層的重要性、或年代等等)
轉貼至個人Facebook
此次的更新加入了許多全新的功能,在此僅列出部份,如有興趣可直接前往官網查看所有的更新項目。
轉貼至個人Facebook
Categories: QGIS Tags:
QGIS二次开发教程之一加载图层
2011-03-14 11:07:38| 分类:QGIS | 标签:|字号大中小订阅
QGIS是一个基于GPL协议的免费的桌面GIS软件,如果要用其进行二次开发,需要用源码进行编译,生
成适合所使用开发环境的开发库,本教程使用vc8和qt4.7.1对其进行编译,生成基于vc8和qt4.7.1的开
发库,核心库主要包括:qgis_analysis.lib、qgis_core.lib、qgis_gui.lib三个库,开发前需要在vc8中设置
好include文件目录和lib文件目录。
首先建立一个基于QT的GUI应用程序工程,程序的主窗口类名称为:examp2,设置编译所需要核心库
文件,并且设置预处理指令:CORE_EXPORT=__declspec(dllimport)、
GUI_EXPORT=__declspec(dllimport)和ANALYSIS_EXPORT=__declspec(dllimport),建立好开发环境。
使用QGIS库加载图层的步骤是:
1)创建图层,包括图层文件所在的路径和文件名称,读取图层文件数据的提供者。
2)将图层存储到图层管理器和绘制图层列表中。
3)绘制图层
下面分别说明这几个步骤。
使用QgsVectorLayer类创建矢量图层,创建图层时需要提供图层文件所在的路径和文件名,图层名称及
提供者名称,在examp2的构造函数中添加如下代码,创建图层:
LayerPath=QString::fromLocal8Bit("..\\兰州地图\\居民地.tab");
//设置图层,图层提供者为"ogr",图层名称为""。
QgsVectorLayer *pLayer1=new QgsVectorLayer(LayerPath,"","ogr");
if(!pLayer1->isValid()){
QMessageBox::about(this,"load layer","Layer is not valid");
return;
}
使用QList<QgsMapCanvasLayer> myLayerSet和QgsMapLayerRegistry 类存储图层,定义如下变量:
QList<QgsMapCanvasLayer> myLayerSet; //绘制图层列表
QgsMapLayerRegistry *pMapLayer; //图层管理器
//将图层添加到图层管理器
pMapLayer->addMapLayer(pLayer1,true);
//添加图层到图层集中
myLayerSet.append(QgsMapCanvasLayer(pLayer1));
使用QgsMapCanvas类绘制图层,定义如下变量:
QgsMapCanvas *pMapCanvas;
//创建地图显示画板
pMapCanvas=new QgsMapCanvas(this,0);
pMapCanvas->enableAntiAliasing(true);
pMapCanvas->useImageToRender(false);
pMapCanvas->setCanvasColor(QColor(255,255,255)); pMapCanvas->freeze(false);
pMapCanvas->setVisible(true);
pMapCanvas->refresh();
pMapCanvas->show();
//设置绘制图层集
pMapCanvas->setLayerSet(myLayerSet);
//绘制图层
pMapCanvas->zoomToFullExtent();
pMapCanvas->refresh();
在创建图层之前,需要注册插件库,使用如下的代码注册插件库:
//注册QGIS插件
QString myPluginsDir="..\\plugins";
QgsProviderRegistry::instance(myPluginsDir);
通过上面几个步骤完成了图层加载的工作。
显示结果如下:。