[TOC]
收到一个朋友的问题,如何基于一份包含坐标的文本数据(csv格式)而生成栅格数据(GeoTif)。
我认为不管是编写代码还是借助于GIS软件,都需要经过如下的工作流。相比后者,编写代码会使整个流程更简洁一点且自动化更强,可以直接由表格 --> 栅格,但对于不熟悉编程的人,实现起来可能不太很容易,因为这触及到GIS的底层逻辑了。
flowchart TD 表格 --> pt[矢量点] pt -->polygon[矢量面] polygon --> tif[栅格]
那如何在GIS软件里实现呢,下面是与之相关的一个小教程。
本教程使用QGIS,其他软件比如ArcGIS,SuperMap等,操作上会有些许不同,但流程背后的逻辑是互通的。
首先我们将工作流程细化如下
在软件顶部菜单栏依次选择 Layer-> Data Source Manager-> Delimited Text,选择待处理的csv文件后,指定哪两列字段作为坐标x和y的值。
设置完毕后,点击Add,如果设置无误,那么此时地图上应该生成一个点图层。
选择顶部的Vector-> Research Tools -> Create Grid,示例如下
注意Grid Extent
,选择以点图层的范围作为渔网范围,并且因为点与点之间的间隔是o.5°,为了将每一个点置于渔网中心,需要将范围拉长0.25。这里需要对实际数据灵活调整。
Horizontal Spaceing
以及Vertical Spacing
,保持同点与点间的间隔距离一致,也就是o.5°。
生成格网和点图层后,下面将根据格子与点之间的关系进行赋值,每一个格子的属性由被包含在里面的点的属性赋值。
选择 Vector-> Data Management Tools-> Join Attribs By Location
空间关系选择包含/are within
另外选择需要赋值的字段
点击结果图层查看要素的属性信息是否正确挂接,或者是在属性表里直接用类似SQL的语句做筛选。
可以看到,点图层的属性信息已经成功挂接道格网上。
最后一步,矢量形式的网格图层栅格化。
选择顶部菜单,Raster -> Conversion -> Rasterize(vector to raster),如下:
==几个需要注意的点==
KGPV_nb
。Georeferenced units
。局部放大查看,位置关系是否正确,像元与格子数据是否正确转换。
这是一个很基础的转换,可以看到每一步都是手动完成,且结果可视化,但自动化程度很低,相应的如果存在大量数据,继续沿用此方法将会投入大量的重复劳动,所以仍然需要探索除此之外的方法和工具,比如模型构建器,批处理等,另外如果拥有编程背景,最好是借助代码的力量。
如果你阅读到此记录时,有更好的方法,欢迎让我知道。