范秀梅,张胜茂※,杨胜龙,王 斐,程田飞,朱文斌
(1. 中国水产科学研究院东海水产研究所渔业资源遥感信息技术重点开放实验室,上海200090;2. 浙江省海洋水产研究所,浙江省海洋渔业资源可持续利用技术研究重点实验室,舟山 316021)
为了加强渔业管理,从2006 年起,中国开始推广基于北斗卫星导航系统的船舶监控系统(Vessel Monitoring Systems,VMS)船载终端[1-2]。VMS 终端可以实时记录渔船的船名、渔船位置的经纬度、航速、航向等信息,并将这些数据自动传送到岸上的监控中心,便于监控中心及时观察和掌握渔船作业情况[3]。据统计目前安装北斗VMS 终端的渔船已超过7 万艘[4],初步实现了对海洋渔船船位的实时跟踪监控,同时获得了大量的具有时空特性的历史船位数据。在实际渔捞日志信息稀少的情况下,VMS 记录的渔船航行信息为研究渔船捕捞活动的时空分布、渔业资源的评估和管理提供了可能[5-6]。
对VMS 数据进行统计和深度挖掘分析取得了很多研究成果[7-12],例如渔船的捕捞作业方式识别[13],捕捞努力量的时空分布[14-15],提取渔船捕捞作业航次[16]等。目前分析VMS 数据的方法主要有速度阈值法[17-18]、图像处理[19]、机器学习[20-21]等。Wang 等[22]利用渔船的速度阈值和轨迹形态并选择合适的时间间隔识别出拖网作业渔船的捕捞作业时段与非捕捞作业时段。Huang 等[23]利用机器学习中的XGBoost 分类器根据中国东海渔船的航行轨迹数据将未注册登记的渔船类型分类为9 种捕捞作业方式,然后基于不同的捕捞作业方式识别各渔船的捕捞作业情况,并比较了添加未注册渔船捕捞作业活动前后的捕捞密度,指出识别出未注册渔船的捕捞类型对中国东海的捕捞密度分布影响的重要性。
现有的相关工作大多是关于如何利用VMS船位数据提取捕捞作业的相关信息并进行分析研究,而从VMS 信息中找出渔船的停泊港口时段,并确定是否为合理停船的相关研究几乎没有。传统判断渔船是否异地停靠需要手动登记,工作量大[24]。本文以2018 年浙江省北斗船位数据为例,提出了一种捕捞渔船异地停靠信息的提取和分析方法,以期为渔船管理提供一定的参考。
北斗卫星传送的船位数据的时间分辨率约为3 min,空间分辨率约为10 m,时空精度高,实时性强[25]。北斗船位数据来源于北斗民用分理服务商,数据按照年份和地区分别存储于不同文件夹中,一条船对应一个文件,文件内容包括船名、经度、纬度、航速、航向、时间等信息。船位数据中存在一些异常数据,会影响结果的准确度,因此在使用之前剔除这些异常数据。文中使用的数据为2018 年浙江省渔船的北斗VMS 船位数据,数据量达61.8 G,虽然计算机的处理器运行速度快,但是数据的读写速度较慢,所以在程序运行过程中直接剔除异常值,不参与计算。
船位数据存在以下几种异常:一是时间异常,时间范围不在所属文件夹名称表示的范围内,例如出现年份为1970 年的异常值,通过设置起止时间,将时间范围设定为2018 年1 月1 日0 时0 分0 秒至2018 年12 月31日23 时59 分59 秒,不在此范围的值剔除。二是经纬度值异常,例如经度或者纬度值为0 值,直接剔除;三是渔船定位在内陆地区的异常,这种异常值在查找异地停船的过程中处理。在查找异地停船的算法执行之前,首先将数据读入内存,保存在矩阵变量中,利用循环语句从前至后扫描数据,查找并剔除矩阵中异常数据,不改变文件中的原始数据。
休渔渔船停靠港口信息的提取步骤主要分为3 步:首先查找停船的时间段,然后确定停船地点的经度、纬度值,最后利用高德地图提供的逆地址web 查询服务查找停泊港口所属的省、市、区县。
1.2.1 查找停船时间段
1)把船位文件中的数据(船名、时间、经纬度、船速)读入内存,剔除异常值后,经度、纬度、速度和时间分别存储在变量lon,lat,v,t 中。对船速值进行简化处理,把大于0 的速度都设为1,速度大小信息丢弃,不影响结果。速度处理的表达式为其中表示船舶代号,K 表示船舶的总数,表示该速度在速度矩阵v 中的序号,H表示速度矩阵v 的长度。
2)找到所有速度为0 的时间段的开始位置 , P,1ki和结束位置根据这2 个位置得到停船时间段的开始时间和结束时间其中表示停船时间段, I 表示第k 条船舶的停船时间段总数,下标“1”表示开始,下标“2”表示结束,下同。根据起止位置计算出各停船时间段的时长得到按照停船时间段先后顺序排列的有序集合, 其 中
理论上,船舶靠岸时,发动机关闭,并被系上缆绳或者抛锚固定,船的航速为0,可以根据速度值是否为0 来判断船舶的动态。但在实际中,即使船舶已经靠岸,由于风浪等自然力的作用或船舶相互之间的碰撞,船速会出现持续时间较短的非0 值(如表1 中渔船2)。从记录的数据来看,速度从0.1 到5 m/s 不等,所以根据速度的大小无法剔除这些非零速度。渔船在海上作业时,航速会出现持续时间较短的0 值(如表1 中渔船1),会被误判为船舶停靠时间段。随机选择一条渔船的船位数据,对速度0 值和非0 值的时间段进行统计,结果如图1 所示。从图1 中可看出,连续时长小于15 min 的停船或者开船时间段占比超过70%,所以可通过设置时间阈值来剔除大部分的干扰。阈值设置为大于15 min 即可,例如可将停船阈值设置为15 min,开船阈值设置为30 min。
表1 船位数据 Table 1 Position data of fishing vessels
如果停船时长小于15 min,这段时间的速度记为1,表示这段时间不属于渔船停靠,可以排除作业过程中船速为0 被误判为靠岸的可能,表达式为
3)查找所有速度为1 的时间段的开始位置 , ,1k gQ 和结束位置根据开始和结束的位置得到开船时间段的开始时间和结束时间其 中k ∈ (1 ,2,3,… ,K),g ∈ (1 ,2,3,… , G),g 表示开船时间段的序号,G 表示开船时间段的总数。根据起止位置计算出开船时间段的时长得到按照开船时间段的先后顺序排列的有序集合其中
如果船速连续非0 的时长小于30 min,则这段时间的速度记为0,可以排除船舶在港口短距离移动被误判为出海作业的可能。表达式为
最后,重新计算所有速度为0 的时间段起始位置,并根据起止位置获得每个停船时间段的停船时长。
图1 2018 年浙江省任一渔船速度v 的0 值与非0 值时段分布(占比排在前10 的停船时间段) Fig.1 Distribution of zero value and non-zero value periods of velocity v of any fishing vessel in Zhejiang Province in 2018 (only the top 10 are shown)
1.2.2 停船地点的经纬度选择和停靠地址查询
渔船在休渔期的停船时长应该是一年中停船时间最长的,故选择停船时间最长的停船地址来确定是否属于合理的异地停船。把停船时间段按照停船时间从长至短排序,选择最长的停船时间段来查找停船位置的经纬度。由于船位文件中记录的数据是按照时间先后顺序排列,故i 表示的停船时间段也是按照时间先后排列的,需将停船时间段的集合 Sk中的元素按照停船时长从大到小排列,得到有序集合表示重新排序后的停船时间段的序号。在将集合 Sk中的元素按照停船时长从大到小排列的过程中,记录下重新排序后的停船时间段 ,k jR 在原集合 Sk中的位置 ,k jp 。
从停船时间段的有序集合 Rk中按照从前至后的顺序取一个停船时间段R,kj出来,获得该停船时间段内所有停船位置的经度值纬度值其中这些经度值组成集合纬度值组成集合其中,l 表示对应停船时间段内船位数据记录的序号,L 为第k 条船的第 ,k jp 个停船时间段的总记录条数。从该次停船的经纬度集合中选出一对经纬度坐标作为该停船时间段的停船地点坐标选择过程分为3 步。如果其中一步返回具体的地址则结束:1)选第一对来查询,如果查询结果为空,表示船只在海里;2)选择最后一对经纬度值来查询。如果前2 步查询结果都返回空,则进入步骤3),选择该次停船地点坐标集中离岸线最近的坐标点来查询该停船时间段的停船地址。离岸线最近的坐标点经度值最小,计算表达式为表示求最小值的函数,m 表示该最小值在集合中的序号。由1.1 节可知,船位存在位于内陆的异常点,所以这里选择经度最小的坐标点可能正好是位于内陆的异常点,此时需要剔除此异常点。如果是非异常点,由于船速基本为0,该时间段内的船位经度值相差很少,接近于0,而如果该点是位于内陆的异常点,该绝对值可达十几。根据这个特征,将经度差的绝对值的阈值设定在正常值(接近于0)和异常值(可达十几)之间即可,例如可设定为1,如果差值大于1°,表示该最小值为异常值,则删除该条记录。该停船时间段的第一个和最后一个坐标点经过步骤1 和步骤2 逆地址查询为空,表明船只在海里,属于正常值,故计算与正常值的差值绝对值并与阈值 1 比较,大于 1 则删除,表达式为其中∅表示将该值删除。循环上述过程直至剔除此停船时间段内的所有异常船位,然后从剩下的船位中选择经度最小的船位点作为该次停船的位置。
得到停船地点的经纬度坐标后,利用高德地图提供的逆地址查询服务获得停船地点所在的省、市、县。设逆地址的查询函数为 frev,则可得调用高德地图[26]提供的逆地址查询web服务的url 的格式为:https://restapi.amap.com/v3/geocode/ regeo?location=Lon,Lat&key=yourkey&output=json,其中的‘Lon’和‘Lat’处输入实际要查询的地理坐标经纬度,‘yourkey’是在高德开放平台上申请的应用服务key 码,返回json 格式[27]的数据,其中包含响应经纬度值对应的省、市、区等信息。这里也可以选择其他公司提供的逆地址查询Web 服务,例如百度地图等。如果高德地图逆地址查找后返回值还是空,那么表示船只还在海上,没有靠岸,令 1j j= + ,从按照停船时间长短排序的有序集合 Rk中选择第j 个元素 ,k jR ,即选择下一个停船时间段,重复以上步骤。
理论上可以遍历所有停船时间段,直至找到地址。考虑到高德地图的免费逆地址查询服务的查询次数限制和计算的时效性,从停靠时长最长的时间段开始查询,一条渔船最多只会查找排在前10 的停靠地址,如果停靠时长最长的10 次停靠查询结果都返回空,那么结果就返回空。如果返回了实际的省、市、县区,那么记录该次停靠在文件中的起止位置,起止时间,纬度,经度和停船时长,否则记录值为空。
以2018 年北斗VMS 终端记录的浙江省4 条渔船的船位数据为例来分析渔船的停靠信息。图2 中的蓝色线条表示渔船航行的轨迹,绿色实心点表示渔船停靠时长前10 的停靠位置,红色实心点表示停靠时长最长的停靠位置。红色和绿色实心点有重叠,可见渔船经常在同一地点停靠。一般情况下,渔船休渔期间停靠的时长最长,故选择停船时长最长的停船地点作为该渔船的休渔停靠地,如图2 中的红色实心点所示。
图2 渔船的行驶轨迹和停靠点 Fig.2 Trajectories and docking positions of fishing vessels
表2 为图2 的4 条渔船的停船详细信息,鉴于篇幅,这里只列出各渔船停船时长前5 的停船信息。渔船3 的船籍在浙江省台州市三门县,2018 年中停船时长最长43 d,位置在(121.458 6°E,29.110 58°N),停靠地和船籍地一致。渔船4 的船籍地为浙江省台州市温岭市,2018 年最长停船天数为71 d,停船位置为(121.642 1°E,28.297 02°N),停靠地和船籍地一致。渔船5 的船籍地和渔船4 的相同,最长停船天数为98 d,停船的经纬度为(121.520 7°E,28.492 95°N),停靠地和船籍地一致。渔船6 的船籍地为浙江省台州市路桥区,停船最长时间为82 d,位置为(121.523 6°E,28.492 22°N),地址为浙江省台州市温岭市,属于同市不同区停靠。
表2 渔船停船信息 Table 2 Information of fishing vessels docking
根据上述方法提取到的渔船停靠信息的输出内容包括船名、停靠的起止时间、停靠时长、纬度、经度、停靠地所属的省、市、区县。将根据船名得到的渔船船籍也填入表格,以便于将船籍地与停船位置对照,从而判断是否属于异地停靠。停靠信息的输出格式如表3 所示。
表3 渔船靠港休渔信息 Table 3 The fishing vessel docking for fishing moratorium information
利用2018 年浙江省渔船的北斗船位数据,总共提取7 152 条渔船的靠港数据,对应的渔船分布在浙江省的台州、温州和舟山市。如果渔船在2018 年中停靠时间最长的港口与船籍港不一致则认定为异地停靠,其中分跨省停靠,省内跨市停靠和市内跨区停靠。
将计算得到的渔船停靠信息结果存入access 数据库,然后利用SQL 语句查找异地停靠的船只。设存储数据的表名为“停靠”,变量ssheng、sshi、sxian 表示船籍地所在的省、市、县,psheng、pshi、pxian 表示停靠地所在的省、市、县。查找省外停靠的渔船使用SQL语句:select *from 停靠where ssheng<>psheng,查找省内跨市停靠的渔船使用SQL 语句:select *from 停靠where ssheng=psheng and sshi<>pshi,查找市内跨区停靠的渔船使用 SQL 语句:select *from 停靠 where ssheng=psheng and sshi=pshi and sxian<>pxian and sxian<>sshi。
渔船停靠信息的查询结果如图3 所示。跨省停靠的共197 艘,占比2.60%,其中台州市21 艘,温州市117艘,舟山市59 艘,如图3a。省内跨市停靠的共419 艘,占比5.53%,其中台州市289 艘,温州市58 艘,舟山市72 艘,如图3b。市内跨区停靠的共有1 116 艘,占比15.6%,其中台州市800 艘,温州市107 艘,舟山市209艘,如图3c。按照该规定在船籍所属港内停靠的共5 420艘,占比75.78%,其中台州市3 228 艘,温州市1 001艘,舟山市1 612 艘,异地停靠的占比22.87%,如图3d。
图3 2018 年浙江省近海渔船异地停靠统计结果 Fig.3 Statistics results of off-site docking of offshore fishing vessels in Zhejiang Province of China in 2018
北斗卫星的VMS终端能够提供高时空精度的船位数据且该VMS 终端在近海渔船上的安装已较为普及,这为研究渔船历史动态提供了便利。基于北斗船位数据,本文给出了一个提取渔船异地休渔信息的方法。主要流程为首先计算休渔渔船停靠的港口所属的省、市、县区,其次将结果存入access 数据库,利用SQL 语句查找异地停靠的船只,并进行异地停靠信息的统计。其中计算休渔渔船停靠的港口所属的行政区的步骤如下:计算得到休渔期的停船时间段,然后从中取出停船地点的经纬度坐标,最后利用高德地图提供的逆地址Web 查询服务,得到停船点的省、市、区。根据渔船登记的船名得到其所属的船籍港所在的行政区。对比船籍港和停靠港所在的行政区,得到该渔船是否按照要求在船籍港停泊休渔。
以浙江省渔船的北斗船位数据为例,利用该方法计算了浙江省7 152 条渔船异地休渔的情况,并进行了统计对比分析。在船籍港内停靠的渔船共5 420 艘,占比75.78%,异地停靠的占比24.22%,其中跨省停靠的197艘,省内跨市停靠的419 艘,市内跨区停靠的1 116 艘。北斗船位数据记录时间间隔约为3 min,所以VMS 的数据量非常大,而该方法的优点是能够快速提取出渔船异地停靠的信息,满足这种大数据的计算需求,在一定程度上能够为判断渔船是否属于异地挂靠提供一定的技术方法支持。