Qgis应用-矢量操作

来源:互联网 发布:知乎风油精帖子链接 编辑:程序博客网 时间:2024/05/17 23:08

Qgis应用-矢量操作

sf2gis@163.com

2015年1月23日

1 矢量

在QGIS中矢量主要在Vector菜单中的功能进行操作,也可以使用ogr相关功能完成,另外有还工具箱中的其它工具完成。

2 文件操作

2.1 手动输入坐标生成矢量图形

需要下载quickwkt插件,然后选择类型,如Polygon,然后在下方的对话框中手动输入坐标对,就可以完成矢量图形的创建了。

创建完成后可以转换为需要的格式。

参考:

http://gis.stackexchange.com/questions/13270/visualising-wkt-geometry-string-in-qgis

3 格式转换

3.1 另存在其它格式文件

在源图层上右击-》saveas-》选择输出类型和其它选项。

可以转换为kml,gml,sqlite等几乎所有格式。

3.2 使用ogr2ogr工具:将不同格式的矢量进行转换。

3.3 批量转换:可以写一个批处理程序,循环调用ogr2ogr。

示例:将指定目录下所有shp转换为kml格式

//shp2kml.bat

::only after set utf8=no, you can use gbk

set GDAL_FILENAME_IS_UTF8=NO

md kml

for %%i in (*.shp) do ogr2ogr -f KML"kml\%%i.kml" "%%i"

 

4 图形操作

4.1 缓冲区Buffer

矢量-》地理处理工具-》缓冲区。

segment to approximate:表示使用线段来拟合90度圆弧所需的线段数目。

下图所示上层为5条线段(最小为5),下层(绿色)为10条线段。

参考:http://lists.osgeo.org/pipermail/qgis-user/2013-November/025029.html

 

4.2 抽稀Simplify

vector->geometry tools->simplify geometries

simplify tolerance:表示进行抽稀的限值,超过此值的节点保留,注意,要xy两个方向都大于此值才能保留。

4.3 合并union

合并两个图层:vector->geoprecssing tools->union。

两个图层中相交的多边形会初分割成独立的多边形。

实现方式:先进行difference()操作,生成外部多边形,再进行intersect()操作,生成相交,多边形,再进行difference()操作,生成内部多边形(来源Union.py)。

4.4 融合dissolve

将同一个图层中不同的多边形合并为一个。

可以通过属性表进行控制融合的行为。

1)   如果使用id为融合选项,则id相同的部分会进行融合,不同的则单独作为一个对象。

2)   如果使用“全部融合”为融合选项,则所有对象会合并为一个对象。

 

4.5 相交intersect

矢量-》地理处理工具-》取交集。

结果中包含两个图层相交的部分,然后相交的多边形作为独立多边形存在。这种操作会形成比两个图层之和更多的多边形。

4.6 先缓冲再抽稀

先进行缓冲,再将缓冲区抽稀。

4.7 生成图幅/格网grid

目的:根据固定的大小生成一幅规则格网。

原理:根据范围和间隔生成规则风格。

方法:

1)   可以使用工具箱-》QGis geoalgorithms-》vector creation tools->Create Grid。

指定格式的水平、垂直方向跨度;整个格网的大小,中心点;生成图像的几何类型(线、矩形、菱形、六角形);CRS和输出目录等。

2)   也可以使用矢量工具:Vector->Research Tools->Vector Grid.

3)   使用装饰工具(不能输出,只能显示):View->Decorations->Grids.

4.8 裁剪Clip

vector-》geoprocessingtools-》clip。

使用Clip Layer的几何边界,把InputLayer的图层进行裁剪,结果只是输入图层的一部分。

4.9 异或SymDifference

vector-》geoprocessingtools-》symmetrical difference。

异或,表示从输入中去除相交的部分。两个有相交部分的实体合成为一个异或实体(这点与Union去除intersect不同)。

5 属性操作

5.1 元素计算

目的:根据已有的矢量数据,计算新的结果。

原理:使用提供的函数,根据计算公式,输出新的结果,并更新或添加到属性列中。

方法:使用属性表的元素计算(Feature Calculate)对话框。

示例:

右击图层-》打开编辑-》点击元素计算,打开对话框-》输入相关公式、参数等(注意属性列类型,如果类型不符,结果无法保存)-》输出结果-》保存(如果类型不符,可以看到结果,但保存的时候会出错)。

 

5.2 导出元素为矢量图层

打开属性表,选择要导出的元素-》Edit,Copy Features-》Edit,PasteFeatures as,new Vector Layer-》选择坐标系统-》选择输出文件。

5.3 统计:列值的类数及其它

计算矢量图形列值中共有多少种类:使用Procssing Toolbox->QgisGeoalgrithm->vector statics->basic statics

可以获取列值种类及其它统计信息。

5.4 将矢量图按属性输出为独立的矢量图:split vector layer

vector->data management tools -> split vectorlayer->弹出设置对话框,选择作为分隔的属性和输出目录,OK-》开始出图。

注意:如果分隔属性不是唯一值,则所有相同属性的图形将作为一个shp文件导出。

5.5通过空间位置关联属性表

目标:具有相同空间位置的图形,将两个矢量文件中属性关联,使该图形具有两个矢量文件的所有属性。

方法:vector->data management tools->joinattributes by location->选择目标矢量图层,该图层的元素将具有合并的属性。->选择合并图层,本图层提供额外的属性。->选择其它选项:可以选择多个额外属性的运算结果或者直接使用第一个元素的属性;输出属性中可以只输出具有并集的记录或者输出所有记录。->选择输出文件。

示例:

本例 中bou2_4p是省界,提供省名等信息。

5.6通过相同属性关联属性表

目标:将一个图层中元素的所有属性关联到另一个图层中具有相同属性的元素。

方法:Processing->Toolbox->Qgisgeoalgorithms->vector general tools -> join attribute tables-》打开关联表对话框,在其中选择要关联的两个图层(注意:第一个图层是目标图层,第二个图层中的属性会附加到目标图层的属性中),指定要匹配相同属性的属性列,选择输出文件(两个表中有相同属性名的列将自动添加_2后缀)。

 

6 应用

6.1 将全国县级行政区按相同省份导出为kml,以省份名称为文件夹名称存储

目标:如题。当前具有国家400万省级polyshp和县级polyshp。

方法:

附:相关数据excel文件:

6.1.1构造分省数据

1)   通过县级地图提取省级ID:参见元素计算。

2)   将县级和省级属性表关联

通过相同的省级ID关联属性表:参见:通过相同属性关联属性表

3)   将省份名称和县名称合并为新的县名称

参见:元素计算

4)   删除不需要的数据

只保留省份图层中的省名。

 

6.1.2将以上县级shp导出为kml。

1)   先导出shp

参见:将矢量图按属性输出为独立的矢量图:splitvector layer

2)   批量重命名

dir/b>../cityname.bat

copy cityname.bat数据到execl中,使用公式="ren "&A1&""&MID(A1,26,200)生成重命名命令。

将生成的列copy到cityname.bat中覆盖原有数据,执行。

参考:http://blog.sina.com.cn/s/blog_48b07acf0100fgjx.html

3)   再转换为kml

参见:使用ogr2ogr工具:将不同格式的矢量进行转换。

6.1.3按省份存储:shp

1)   生成省份文件夹

提取新名称

=MID(A1,26,200)

在excel中提取省份

=LEFT(C1,SEARCH("_",C1,1)-1)

将省份copy到另一个sheet中,数据-》删除重复项。

构造生成文件夹命令:

="md"&A1

将此列数据copy到文本中,存为createprovfolder.bat,执行。

2)   按名称复制到省份文件夹

构建复制命令

="copy"&C1&" "&E1&"\"&C1

将此列数据copy到文本中,存为movecities.bat,执行。

6.1.4按省份存储:kml

与shp相似

1)   批量重命名

所有名称:dir /b>../../kmlname.bat

新名称:=MID(REPLACE(A1,SEARCH(".shp",A1),4,""),1,200)

重命名命令:="REN "&A1&""&B1

存储为kmlname.bat,执行。

2)   生成省份文件夹

直接在kml文件夹下调用createprovfolder.bat。

3)   移动到省份文件夹

构建copy命令

="copy "&B1&""&LEFT(B1,SEARCH("_",B1)-1)&"\"&B1

将此列数据copy到文本中,存为copykml2prov.bat,执行。

2 0
原创粉丝点击