范秀梅,張勝茂※,楊勝龍,王 斐,程田飛,朱文斌
(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 的數據量非常大,而該方法的優點是能夠快速提取出漁船異地停靠的信息,滿足這種大數據的計算需求,在一定程度上能夠為判斷漁船是否屬于異地掛靠提供一定的技術方法支持。