Qgis学习资料.docx
- 文档编号:8455622
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:50
- 大小:37.31KB
Qgis学习资料.docx
《Qgis学习资料.docx》由会员分享,可在线阅读,更多相关《Qgis学习资料.docx(50页珍藏版)》请在冰豆网上搜索。
Qgis学习资料
QGIS教程【GBPS详解】
写在前面的话:
我喜欢用ArcMap来绘制地图,但今天要讲的是用一款叫QGIS的软件。
为什么要用QGIS?
ArcGIS太强大了,正因为它太强大,所以,不得不考虑换一
个软件。
ArcGIS10的安装包有3.75G,如此庞大的软件,的确令人生畏。
而购
买ArcGIS的费用也基本上是天价级别,如果不用破解,大伙都用不起。
于是我
一直想找寻一款免费但功能强劲的GIS软件来支持我的GBPS理论,从QGIS到
DIVA-GIS,到MapWindow,又到QGIS。
最后还是决定用QGIS。
QGIS,全称为QuantumGIS,是一款比较知名的免费开源GIS软件,由于在这里
我们不谈论二次开发,所以什么源码、编程之类一概不谈。
(QGIS官网:
)
——————————————分割线————————————————
正文:
其实我还蛮喜欢教东西的,但是只是喜欢说教,却懒得写教程,所以可能有些地
方写的不详细,还请各位看官见谅。
有疑问可留言,我会尽快回复。
对了,我在写教程的过程中我会默认你在大学中上过有关GIS的课,哪怕你上课
睡觉或者早就忘的差不多了都没有关系。
如果没有……那你最好先补一下GIS
的基本常识(我对GIS也不是很精通,所以有个皮毛就可以了)。
1、下载和安装QGIS
下载地址:
(截至
2012年7月5日的最新版本为1.8.1,但我发现其不支持中文数据,所以在这提
供的是1.7.4版本。
大小为111M)
下载后双击安装,最好安装在非中文目录下,即路径中不要含有中文字符;而且
路径名称中不要有空格,所以不能装在ProgramFiles文件夹下面,建议装在
“C:
/QGIS”或“D:
/QGIS”目录下。
不出意外的话,点桌面上的“”图标即可打开。
如果报错,请XX或谷歌。
2、安装Openlayer插件
打开你的QGIS,如果操作界面看不大明白没关系,以后再讲。
为啥要装这个插件?
这个插件可以在地图中添加常用的网络地图为底图,对于我
们绘制地图来说非常方便。
支持谷歌、OpenStreetMap、Yahoo、Bing、Appleiphoto
等。
执行:
插件(P)->FetchPythonplugins
这时候弹出一个框,等它下载完后,出现三个标签,选第二个,即Repositories,
按“Add……”,添加一个URL为:
的Repositories(字面意思
可理解为放插件的仓库地址),名称随意,然后确定。
确定后会更新插件列表,从列表中选择OpenLayer安装。
如果不好找试试用
Filter搜索。
3、绘制地图
执行:
插件(P)->OpenLayerplugin->AddGooglePhysicalMap
谷歌地图就添加到地图窗口了。
(如果无聊的话你可以试试其他的地图,因为服
务商都不是中国的,所以,中国的数据还是谷歌的比较详细)
画哪儿的地图呢?
就画个什邡的吧,谁让什邡最近这么火呢。
先在地图上找到什邡,地图缩放到中国-四川-成都,然后上面一点就是什邡了。
如果不好找,就用openLayer再添加一个谷歌的街道地图。
地儿是找着了,没有边界啊。
现在到网上去找一张什邡的地图,看这里:
地图下载后执行:
Raster->Georeferencer->Georeferencer(或者直接点工具
栏上的配准图标)
在新弹出的窗口中点OpenRaster工具。
将下载的地图添加进来,需要说明的是
QGIS的配准方法与ArcMap稍微有一点点差别,但本质上是一样的。
这时候Add
Point工具是默认选中的,QGIS需要至少添加4个配准点才能配准。
先在图片上
找一个配准点点一下,然后会弹出一个框提示你输入地图坐标,这时候选“From
mapcanvas”,即从地图上拾取。
点击后,配准窗口自动最小化,显示出地图窗
口,然后从地图上选取与刚刚选择的配准点对应的点,点击后会自动回到配准窗
口,点击确定,以添加该配准点。
下面的截图显示了我添加的四个配准点,由于我早就有什邡的边界的shp文件,
所以我投机取巧仅仅是示意一下,大家在配准的时候,可要仔仔细细,多添加几
个配准点,而且要确保清晰准确。
配准后通过转换设定和开始配准工具,即可生
成带有坐标的tif位图。
回到地图主窗口,点添加位图工具,将配准后的tif图片加入。
调整其透明度(双
击其所在的图层),检查配准情况。
配准合格后,我们新建一个shp文件(NewShapefileLayer工具)。
类型选择线,坐标系统默认即可,设置一个名为type的新属性,格式为text,
然后确定,我们将文件名命名为border.shp。
在图层窗口中选中border.shp,工具栏点“ToggleEditing”工具,开始进行
编辑,左键画,右键完成。
设置snapping,执行:
设置(S)->Snappingoptions,设置border.shp的snapping
最大容许值,设置为0.005m,QGIS和ArcMap的这个值的单位好像不大一样,自
己试试看。
然后画边界,县界、乡镇界的type值稍微区分一下。
完成后保存编辑,我们得到这个:
设置border.shp的样式,关闭tif图片,再添加个乡镇的点shp。
最后得到:
QGIS
教程【
GBPS
详解】
-
2
:
绘制一张地图
(中)
6.
七月
2012
|
0
评论
|
by
codeychai
4、绘制道路和景点
根据之前所讲的,现在再把道路和景点临摹上去。
等所有都完成后,去掉或隐藏
所有网络地图。
然后适当调整每个图层的现实样式,得到:
5、给城市和景点添加标注
双击城镇的图层,打开图层属性,找到“标签”的tab,启用标签,设置显示字
段name,并调整标签样式。
(请原谅我写的没有那么细致,因为一项项写出来实在是太费事了,都不难,自
己看看就能学会,这是我正式用QGIS的第二天,你看,我不也都自己学会了,
QGIS的操作方法跟ArcMap很像,应该很容易上手的)
因为景点太多了,我们用另一种方式给他添加标签。
选中景点所在的图层,点击
工具栏上的“Labeling”工具,按提示设置label的样式。
随着地图的缩放你会
发现label会自动调整自己的位置以不遮挡其他label。
这个跟ArcMap的类似。
6、排版输出jpg图片
执行:
文件(F)->NewPrintComposer
这时候会弹出个排版的窗口。
工具栏上按添加新地图工具,在白纸上拖出一个画幅,放置刚刚绘制的地图。
通
过MoveitemContent工具,并配合滚轮,可以设置地图内容的位置和缩放大小。
我们选一个A3的纸张,设置为300dpi,对整个地图进行排版。
输出后,得到一
份简约的什邡旅游地图:
本次就先写到这,下次讲如何给地图加地形(可用于分析的地形,而非网络地图)。
QGIS
教程【
GBPS
详解】
-
3
:
绘制一张地图
(下)
7.
七月
2012
|
0
评论
|
by
codeychai
7、添加DEM
美国的卫星数据有很多是免费的,虽然精度有限,但对于县域地图来说,已经足
够了。
网上有很多免费的DEM可供下载,比如SRTM、ASTERGDEM等等,中
科院也有相关的镜像,可以从国内下载。
国外的地址请自行谷歌,我这里贴一个
中科院的镜像地址:
我在这里用中科院的30米分辨率数字高程数据产品,在检索页面找到什邡市的
DEM数据,有两块。
因为什邡市跨越了东经103、104两个经度段。
将它们分别
下载下来。
解压后得到两个20M左右的img格式文件。
这两个img对于什邡市地图来说,太大了。
所以最好裁剪一下,当然了,如果你
的计算机硬件足够ok,也可以忽略这一步。
但在裁剪之前必须先将这两个img合并,或者你分别对两个img进行裁剪,但我
想那不是一个好主意。
合并两个img,执行:
Raster->Miscellaneous->Merge
按提示输入两个img文件,并设置保存文件名。
这里记得勾选一下NoDateValue:
0,否则合并后有接缝。
同时勾选一下Loadintocanvaswhenfinished,这样合并完之后会自动添加
到地图中去。
点击确定,进行合并。
进行裁剪,执行:
Raster->Extraction->Clipper
裁剪范围我用的事先准备好的shp文件,当然也可手动输入坐标范围。
裁剪完成
后得到一张黑不溜秋的dem_clip。
8、生成hillshade
执行:
Raster->Analysis->DEM
设置输出文件名称,mode选hillshade。
其他参数默认,然后确定。
将dem_clip和hillshade两层至于所有图层最后,然后hillshade置于最后。
调整dem_clip的透明度为50%,并将其Style调整为显示colormap,将Colormap
标签下添加10个色段。
默认的色段颜色是蓝到红,做地形渐变很难看。
调整其
为浅绿色到浅红色的渐变。
(这一点不如ArcMap好使了,因为ArcMap有预置好
的色带可选,而QGIS则需要手动调,不过调好后可以存下来备用,下次用的时
候就方便了。
)
调整好个图层的样式后,回到printcomposer,设置地图版式和布局。
然后就
可以输出地图了。
输出jpg后发现,栅格数据输出后带了几条线,是个bug。
导出pdf也同样带这
条线。
矢量数据输出则没有任何问题。
小结:
这几天试着学了一个QGIS,顺便出这个教程,对于制图而言,发现ArcMap
可以做的,QGIS基本都可以实现。
有些情况下,ArcMap效率可能更高,毕竟是
商业软件和免费软件的区别。
但对于GBPS来说,我想QGIS已经足够了!
今天画地图只是开个小头,接下的教程里会跟大家逐一介绍如何用QGIS对规划
中各个环节进行支撑,如何分析基础条件、资源、市场、空间布局,并对基础设
施规划和生态环境保护等做详细介绍。
再次声明,GBPS不是出几张坡度、坡向、高程的分析图,而是一套完整的规划
支持体系,如果以为GIS就是谷歌地图、GIS分析就是做坡度分析,那我也无话
可说,您可以出门右拐了……毕竟很多做规划的人并不懂GIS每个字母代表什
么意思。
Filedin:
规划与
GIS
Tags:
QGIS
教程
GBPS
QGIS
教程【
GBPS
详解】
-
4
:
将地图数据与
规划团队分享
11.
七月
2012
|
0
评论
|
by
codeychai
就目前国内规划项目组的成员组成来看,你可能是你所在的规划团队中唯一一个
懂GIS的人,其他人不会对GIS软件进行操作,那你的成果如何让其他人也能享
用?
将成果导出为jpg,这是一个不错的主意,但并不是所有的东西都转成jpg来的
好使。
前三次教程主要讲如何制作一副地图,随着数据的不断深入,它完全可以作为最
终规划图件的底图。
而这一步在规划前期(项目实地考察前)即可基本完成。
当项目考察时,你可以将地图导出为高精度的jpg,这样,项目团队在考察过程
中就有了方向感。
当然,有些情况下甲方会现场提供当地的一些地图资料,但在
未到达项目地之前,你做的地图就是给大家最好的空间指引,甚至有时候你会发
现,你做的地图会比他们给出的图件更有价值。
在项目考察的过程中,你用笔或者GPS设备记录下走过的节点,回到公司,你迫
不及待的将这些点输入到GIS中,并对之前的地图做出修正。
随着项目的推进,当团队成员开始对项目地的资源进行消化的时候,你会发现,
他们虽然都不会使用GIS分析软件,但他们都打开了电脑桌面上的GoogleEarth
或者在浏览器中拖拽着谷歌卫星地图。
他们现在困惑的是:
你给出的地图上面虽
然标注的很清楚,但他们不知道这些点究竟在GE里面处于一个什么样的位置,
他们在搜索框中,冒着被GFW封锁的危险,一次次的输入想要查询的内容……
其实GE是一款大众化的地图浏览软件,其对卫星地图的浏览功能很强大,最为
重要的是:
你所在的项目组成员都会使用它!
现在要做的是:
把QGIS地图导入到GE。
在QGIS中的操作很简单,在相应的图层上点击右键,选saveas即可。
保存格式选择KeyholeMarkupLanguage(KML),然后起名,保存。
双击保存后的kml,我们就可以把该图层的信息在GE中加载了。
下面是加载了边界和旅游资源点的GE:
如果你的数据表中还有其他更多的信息,我相信,你的团队成员看到后,会大吃
一惊,并会毫不吝啬的夸奖你的!
ps:
QGIS导出的格式为kml,而ArcMap可导出Kmz。
Kmz可以看做是zippedkml,
这两种格式都是谷歌自家的格式,GE都能打开,但ArcMap导出Kmz的时候,会
把地图样式也打包进去,而QGIS导出的kml则将是GE的默认样式,你可以通过
在GE中重新修改样式来自定义点线面的样式。
不过这并不妨碍QGIS发挥其伟大
的功能为我们这些矮穷挫的屌丝规划师们提供福音。
Filedin:
规划与
GIS
Tags:
QGIS
教程
GBPS
GE
复制代码
复制代码
复制代码
QGIS二次开发教程
(一)
QGIS二次开发教程一
——用QGIS的API编写自定义应用程序
教程一:
使用QGISCanvasAPI编写一个简单的地图显示程序
参考翻译自QuantumGIS官方网站
事实上,我们并不是所有的时候都需要一个庞大、完整的GIS桌面应用程序,有时候我们的应用程序主要
用于其他的目的,而我们所需要的只是在用程序中添加一个具有地图显示功能的小工具。
譬如一个带有地
图显示功能的数据库前端。
接下来我们就创建一个简单的地图小工具,功能仅仅是加载一个shape文件并用随机颜色加以显示。
但是
通过这个简单的例子你应该能体会到将QGIS作为一个嵌入式的地图组件的潜力。
首先,在我们的应用程序里添加必要的includes:
1//
2//QGISIncludes
3//
4#include
5#include
6#include
7#include
8#include
9#include
10//
11//QtIncludes
12//
13#include
14#include
15#include
我们用QgsApplication代替Qt中的QApplication来创建应用程序,这样可以方便地调用QGIS中的许多静
态方法,比如得到库文件所在的路径等等。
各种数据的提供商plugins通过提供商注册表(QgsProviderRegistry)来管理,它会根据提供商自动加载相应
的plugins,我们所需要做的就是指定plugins所存放的目录,让应用程序实例化这样的提供商注册表。
QgsSingleSymbolRenderer是最基本的符号类,它用一种颜色表示点、线、多边形对象。
默认情况下颜色
是随机选取的,当然,你也可以自己设定希望显示的颜色。
每一个矢量图层都有一个对应的符号。
地图图层注册表(QgsMapLayerRegistry)用来管理现在正在使用的图层。
QgsVectorLayer继承自
QgsMapLayer,添加了矢量数据特有的功能。
最后,地图画布(QgsMapCanvas)才是问题的关键,我们的地图将被绘制在这个工具上。
现在,我们开始初始化我们的应用程序:
1intmain(intargc,char**argv)
复制代码
复制代码
复制代码
2{
3//StarttheApplication
4QgsApplicationapp(argc,argv,true);
5
6QStringmyPluginsDir="/home/timlinux/apps/lib/qgis";
7QStringmyLayerPath="/home/timlinux/gisdata/brazil/BR_Cidades/";
8QStringmyLayerBaseName="Brasil_Cap";
9QStringmyProviderName="ogr";
这样我们就得到了一个qgsapplication。
变量myLayerPath指定了plugins所在的目录。
变量myLayerPath和myLayerBaseName指向要使用的shape文件。
变量myProviderName很重要,它告诉qgis加载数据文件需要使用哪个数据提供商。
一般为”ogr”
或”postgres”。
现在我们可以开始创建图层了:
1//InstantiateProviderRegistry
2QgsProviderRegistry:
:
instance(myPluginsDir);
首先我们需要初始化提供商注册表。
QgsMapLayerRegistry是一个单类(singletonclass),因此我们使用
它的静态函数instance()传递供应商插件库的路径,在此之后它将在这个路径下查找提供商的插件。
接下来我们继续创建图层:
1QgsVectorLayer*mypLayer=
2newQgsVectorLayer(myLayerPath,myLayerBaseName,myProviderName);
3QgsSingleSymbolRenderer*mypRenderer=new
QgsSingleSymbolRenderer(mypLayer->geometryType());
4QList
5
6mypLayer->setRenderer(mypRenderer);
7if(mypLayer->isValid())
8{
9qDebug("Layerisvalid");
10}
11else
12{
13qDebug("LayerisNOTvalid");
14}
15
16//AddtheVectorLayertotheLayerRegistry
17QgsMapLayerRegistry:
:
instance()->addMapLayer(mypLayer,TRUE);
18//AddtheLayertotheLayerSet
19myLayerSet.append(QgsMapCanvasLayer(mypLayer,TRUE));
复制代码
复制代码
这段代码的意义显而易见。
我们用前面定义的变量创建了一个图层,然后给这个图层分配了一个渲染器
(renderer)。
在创建渲染器的时候,我们需要指定图层的几何类型,这个可以通过图层对象的
geometryType()函数得到。
然后将图层对象layer添加到图层列表layerset和地图图层注册表
QgsMapLayerRegistry中,layerset告诉QgsMapCanvas那些图层需要渲染、它们的顺序如何。
最后,我
们要保证这个图层是可见的。
现在我们创建一个地图画布用于显示地图图层。
1//CreatetheMapCanvas
2QgsMapCanvas*mypMapCanvas=newQgsMapCanvas(0,0);
3mypMapCanvas->setExtent(mypLayer->extent());
4mypMapCanvas->enableAntiAliasing(true);
5mypMapCanvas->setCanvasColor(QColor(255,255,255));
6mypMapCanvas->freeze(false);
7//SettheMapCanvasLayerSet
8mypMapCanvas->setLayerSet(myLayerSet);
9mypMapCanvas->setVisible(true);
10mypMapCanvas->refresh();
这段代码也很简单。
我们创建了一个画布,然后将它的范围设置为我们图层的范围。
接下来打开反走样功
能,并设置背景颜色为白色,解冻画布,设置其为可见并刷新。
1//StarttheApplicationEventLoop
2returnapp.exec();
3}
在这最后一步中,我们所做的仅仅是启动Qt事件循环。
是不是很简单?
这个例子中的源代码可以通过svn下载(当然,前提是安装了svn工具),下载命令如下:
分类:
C/C++,QGIS
标签:
QGIS,二次开发
QGIS二次开发教程一
时间:
2012-05-2518:
40来源:
未知作者:
admin浏览:
66人
用QGIS的API编写自定义应用程序教程一:
使用QGISCanvasAPI编写一个简
单的地图显示程序参考翻译自QuantumGIS官方网站事实上,我们并不是所有
的时候都需要一个庞大、完整的GIS桌面应用
——用QGIS的API编写自定义应用程序
教程一:
使用QGISCanvasAPI编写一个简单的地图显示程序
参考翻译自QuantumGIS官方网站
事实上,我们并不是所有的时候都需要一个庞大、完整的GIS桌面应用程序,有
时候我们的应用程序主要用于其他的目的,而我们所需要的只是在用程序中添加
一个具有地图显示功能的小工具。
譬如一个带有地图显示功能的数据库前端。
接下来我们就创建一个简单的地图小工具,功能仅仅是加载一个shape文件并用
随机颜色加以显示。
但是通过这个简单的例子你应该能体会到将QGIS作为一个
嵌入式的地图组件的潜力。
首先,在我们的应用程序里添加必要的includes:
1//2//QGISIncludes3//4#include
#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qgis 学习 资料