🗓️ 2024-06-17 🏷️ #GIS相关#

目录

    • 写在前面
    • 使用GIS软件实现
      • 1.解析本文数据
      • 2.生成格网
      • 3.空间关系挂接属性
      • 4.栅格化
    • 总结

[TOC]

写在前面

收到一个朋友的问题,如何基于一份包含坐标的文本数据(csv格式)而生成栅格数据(GeoTif)。

我认为不管是编写代码还是借助于GIS软件,都需要经过如下的工作流。相比后者,编写代码会使整个流程更简洁一点且自动化更强,可以直接由表格 --> 栅格,但对于不熟悉编程的人,实现起来可能不太很容易,因为这触及到GIS的底层逻辑了。

flowchart TD
表格 --> pt[矢量点]
pt -->polygon[矢量面]
polygon --> tif[栅格]

那如何在GIS软件里实现呢,下面是与之相关的一个小教程。

使用GIS软件实现

本教程使用QGIS,其他软件比如ArcGIS,SuperMap等,操作上会有些许不同,但流程背后的逻辑是互通的。

首先我们将工作流程细化如下

  1. 导入文本数据,生成矢量点图层。
  2. 根据矢量点图层生成格网。
  3. 按空间关系,将点图层的属性信息挂接到格网图层。
  4. 将格网图层栅格化。

1.解析本文数据

在软件顶部菜单栏依次选择 Layer-> Data Source Manager-> Delimited Text,选择待处理的csv文件后,指定哪两列字段作为坐标x和y的值。

image-20240617202402792

设置完毕后,点击Add,如果设置无误,那么此时地图上应该生成一个点图层。

image-20240617202912264

2.生成格网

选择顶部的Vector-> Research Tools -> Create Grid,示例如下

image-20240617203758882

注意Grid Extent,选择以点图层的范围作为渔网范围,并且因为点与点之间的间隔是o.5°,为了将每一个点置于渔网中心,需要将范围拉长0.25。这里需要对实际数据灵活调整。

Horizontal Spaceing以及Vertical Spacing,保持同点与点间的间隔距离一致,也就是o.5°。

image-20240617204546627

3.空间关系挂接属性

生成格网和点图层后,下面将根据格子与点之间的关系进行赋值,每一个格子的属性由被包含在里面的点的属性赋值。

选择 Vector-> Data Management Tools-> Join Attribs By Location

空间关系选择包含/are within

image-20240617205940973

另外选择需要赋值的字段

image-20240617205252158

点击结果图层查看要素的属性信息是否正确挂接,或者是在属性表里直接用类似SQL的语句做筛选。

image-20240617210142812

可以看到,点图层的属性信息已经成功挂接道格网上。

4.栅格化

最后一步,矢量形式的网格图层栅格化。

选择顶部菜单,Raster -> Conversion -> Rasterize(vector to raster),如下:

image-20240617210844984

==几个需要注意的点==

  • 需要指定哪一个字段作为栅格的灰度值,这里选择KGPV_nb
  • 输出栅格的单位,因为我们需要将格网里的每一个格子作为栅格的像元,而且格子是以经纬度划分的,所以这里选择Georeferenced units
  • 分辨率也就是像元的尺寸与格网的格子一致,都是o.5°。
  • 输出栅格的范围需要与输入的矢量图层范围一致,否则超出范围的部分会丢失。

image-20240617211700244

局部放大查看,位置关系是否正确,像元与格子数据是否正确转换。

image-20240617211744470

总结

这是一个很基础的转换,可以看到每一步都是手动完成,且结果可视化,但自动化程度很低,相应的如果存在大量数据,继续沿用此方法将会投入大量的重复劳动,所以仍然需要探索除此之外的方法和工具,比如模型构建器,批处理等,另外如果拥有编程背景,最好是借助代码的力量。

如果你阅读到此记录时,有更好的方法,欢迎让我知道。