4. 海洋矢量数据处理基础
海洋空间数据中,矢量数据是表达“离散对象”的主力:浮标是点、航线是线、海洋保护区或作业海域是面。本章围绕点、线、面三类矢量数据的创建与编辑、属性表操作、字段计算器、裁剪与合并,以及海洋边界与航线数据的处理示例展开,目标是让读者能够独立完成一套“从建库到出图”的矢量数据准备流程。
一、点、线、面矢量数据的创建与编辑
在 QGIS 中新建矢量图层,核心是确定三件事:几何类型(点/线/面)、坐标参考系(CRS)和属性字段结构。海洋数据常用地理坐标系 WGS 84(EPSG:4326)存储原始经纬度,但在做面积统计、缓冲区分析时,应切换到投影坐标系,例如中国近海可选用 CGCS2000 高斯-克吕格投影或 UTM 分带投影,以保证长度和面积量算有意义。这一点在后续裁剪、合并和面积字段计算中会直接影响结果。
创建点图层适合表达浮标、观测站、采样点、锚地等对象。新建 Shapefile 或 GeoPackage 图层时选择“点”几何,添加字段如 station_id(文本)、depth_m(小数)、obs_time(日期)。进入编辑模式后,用“添加点要素”工具在画布上落点,或在属性表中直接录入经纬度后配合“按坐标添加点”插件批量生成。线图层用于航线、测线、海底管线,编辑时注意“捕捉”设置:开启顶点捕捉和线段捕捉,可避免航线拐点出现微小缝隙或自相交。面图层用于海洋保护区、养殖区、倾废区,编辑时常用“添加多边形”“重塑要素”“分割要素”等工具,并务必用“检查几何有效性”修复自相交、悬挂边等拓扑错误。
二、属性表操作与字段计算器
属性表是矢量数据的“信息仓库”。常见操作包括:按字段排序、按表达式筛选(如筛选 "depth_m" > 50 的深水站点)、批量修改字段值、删除冗余字段。字段计算器(Field Calculator)是效率关键,它支持基于现有字段和函数生成新字段。例如为航线图层计算长度:先确保图层为投影坐标系,新建 length_km 字段,表达式使用 $length / 1000;为面图层计算面积则用 $area / 1000000 得到平方公里。若数据仍是地理坐标系,$area 返回的是平方度,没有实际意义,这是初学者最常见的错误之一。
字段计算器还可做条件赋值。例如给采样点分级:新建 level 字段,表达式写 CASE WHEN "depth_m" < 20 THEN '浅水' WHEN "depth_m" < 100 THEN '中深水' ELSE '深水' END。字符串拼接可用 concat("station_id", '-', "obs_time")。需要提醒的是,Shapefile 字段名限制为 10 个字符且不支持中文长字段名,若字段结构复杂,建议统一使用 GeoPackage 格式。
三、矢量裁剪与合并
裁剪(Clip)用于按边界提取目标区域内的要素,例如用“中国近海管理海域”面裁剪全球航线数据,只保留进入该海域的航段。操作路径为“矢量 → 地理处理工具 → 裁剪”,输入图层选航线,叠加图层选海域面,输出即被裁断的航线。注意裁剪会切断跨越边界的线要素,若需保留完整航线,应改用“按位置提取”或“空间连接”而非裁剪。
合并分两种语义:其一是“合并图层”(Merge),把多个同几何类型的图层纵向拼接为一个,例如把渤海、黄海、东海三批浮标点合并为统一站点库,要求字段结构一致,不一致的字段会在结果中产生空值;其二是“融合”(Dissolve),按某字段把相邻面合并,例如按 province 字段融合近岸海域面。实际工作中常先 Merge 再 Dissolve,形成完整数据底图。
四、海洋边界与航线数据示例
以一个可复现的教学示例说明完整流程(以下参数为示例设定,非实测数据)。假设手头有三份数据:buoys.shp(浮标点,含 depth_m)、routes.shp(航线,地理坐标系)、sea_area.shp(管理海域面,投影坐标系)。第一步统一坐标系:用“重投影图层”把航线转为与海域面相同的投影坐标系,避免后续长度计算失真。第二步对航线执行裁剪,叠加图层选海域面,得到 routes_clip。第三步在 routes_clip 上新建 length_km 字段,表达式 $length / 1000,并在属性表中按长度降序检查是否存在异常短的碎段——裁剪产生的极短线段往往需要按长度阈值(如小于 0.1 km)过滤。第四步把三批浮标点用 Merge 合并,再用字段计算器按 depth_m 生成 level 分级字段。第五步用“检查几何有效性”逐一验证面图层,修复后保存为 GeoPackage。
| 处理环节 | 关键输入 | 操作要点 | 结果判读 |
|---|---|---|---|
| 坐标统一 | 航线、海域面 | 重投影到同一投影 CRS | 图层 CRS 标识一致 |
| 航线裁剪 | 航线 + 海域面 | Clip,注意跨边界断线 | 要素数增加、出现碎段 |
| 长度计算 | 裁剪后航线 | $length/1000 | 长度量级合理,无平方度 |
| 站点合并 | 多批浮标点 | Merge,字段对齐 | 记录数等于各批之和 |
| 几何检查 | 海域面 | 有效性检查与修复 | 无自相交、无悬挂边 |
完成上述步骤后,建议做一次交叉验证:统计裁剪前后航线总长度,差值应约等于被裁掉部分;抽查若干浮标点是否落在海域面内(用“按位置选择”验证)。这些检查能及时发现坐标系错配、字段错位等隐蔽问题,是海洋矢量数据处理中不可省略的质量控制环节。