范秀梅,張勝茂※,楊勝龍,王 斐,程田飛,朱文斌
(1. 中國水產(chǎn)科學研究院東海水產(chǎn)研究所漁業(yè)資源遙感信息技術重點開放實驗室,上海200090;2. 浙江省海洋水產(chǎn)研究所,浙江省海洋漁業(yè)資源可持續(xù)利用技術研究重點實驗室,舟山 316021)
為了加強漁業(yè)管理,從2006 年起,中國開始推廣基于北斗衛(wèi)星導航系統(tǒng)的船舶監(jiān)控系統(tǒng)(Vessel Monitoring Systems,VMS)船載終端[1-2]。VMS 終端可以實時記錄漁船的船名、漁船位置的經(jīng)緯度、航速、航向等信息,并將這些數(shù)據(jù)自動傳送到岸上的監(jiān)控中心,便于監(jiān)控中心及時觀察和掌握漁船作業(yè)情況[3]。據(jù)統(tǒng)計目前安裝北斗VMS 終端的漁船已超過7 萬艘[4],初步實現(xiàn)了對海洋漁船船位的實時跟蹤監(jiān)控,同時獲得了大量的具有時空特性的歷史船位數(shù)據(jù)。在實際漁撈日志信息稀少的情況下,VMS 記錄的漁船航行信息為研究漁船捕撈活動的時空分布、漁業(yè)資源的評估和管理提供了可能[5-6]。
對VMS 數(shù)據(jù)進行統(tǒng)計和深度挖掘分析取得了很多研究成果[7-12],例如漁船的捕撈作業(yè)方式識別[13],捕撈努力量的時空分布[14-15],提取漁船捕撈作業(yè)航次[16]等。目前分析VMS 數(shù)據(jù)的方法主要有速度閾值法[17-18]、圖像處理[19]、機器學習[20-21]等。Wang 等[22]利用漁船的速度閾值和軌跡形態(tài)并選擇合適的時間間隔識別出拖網(wǎng)作業(yè)漁船的捕撈作業(yè)時段與非捕撈作業(yè)時段。Huang 等[23]利用機器學習中的XGBoost 分類器根據(jù)中國東海漁船的航行軌跡數(shù)據(jù)將未注冊登記的漁船類型分類為9 種捕撈作業(yè)方式,然后基于不同的捕撈作業(yè)方式識別各漁船的捕撈作業(yè)情況,并比較了添加未注冊漁船捕撈作業(yè)活動前后的捕撈密度,指出識別出未注冊漁船的捕撈類型對中國東海的捕撈密度分布影響的重要性。
現(xiàn)有的相關工作大多是關于如何利用VMS船位數(shù)據(jù)提取捕撈作業(yè)的相關信息并進行分析研究,而從VMS 信息中找出漁船的停泊港口時段,并確定是否為合理停船的相關研究幾乎沒有。傳統(tǒng)判斷漁船是否異地??啃枰謩拥怯?,工作量大[24]。本文以2018 年浙江省北斗船位數(shù)據(jù)為例,提出了一種捕撈漁船異地??啃畔⒌奶崛『头治龇椒?,以期為漁船管理提供一定的參考。
北斗衛(wèi)星傳送的船位數(shù)據(jù)的時間分辨率約為3 min,空間分辨率約為10 m,時空精度高,實時性強[25]。北斗船位數(shù)據(jù)來源于北斗民用分理服務商,數(shù)據(jù)按照年份和地區(qū)分別存儲于不同文件夾中,一條船對應一個文件,文件內(nèi)容包括船名、經(jīng)度、緯度、航速、航向、時間等信息。船位數(shù)據(jù)中存在一些異常數(shù)據(jù),會影響結果的準確度,因此在使用之前剔除這些異常數(shù)據(jù)。文中使用的數(shù)據(jù)為2018 年浙江省漁船的北斗VMS 船位數(shù)據(jù),數(shù)據(jù)量達61.8 G,雖然計算機的處理器運行速度快,但是數(shù)據(jù)的讀寫速度較慢,所以在程序運行過程中直接剔除異常值,不參與計算。
船位數(shù)據(jù)存在以下幾種異常:一是時間異常,時間范圍不在所屬文件夾名稱表示的范圍內(nèi),例如出現(xiàn)年份為1970 年的異常值,通過設置起止時間,將時間范圍設定為2018 年1 月1 日0 時0 分0 秒至2018 年12 月31日23 時59 分59 秒,不在此范圍的值剔除。二是經(jīng)緯度值異常,例如經(jīng)度或者緯度值為0 值,直接剔除;三是漁船定位在內(nèi)陸地區(qū)的異常,這種異常值在查找異地停船的過程中處理。在查找異地停船的算法執(zhí)行之前,首先將數(shù)據(jù)讀入內(nèi)存,保存在矩陣變量中,利用循環(huán)語句從前至后掃描數(shù)據(jù),查找并剔除矩陣中異常數(shù)據(jù),不改變文件中的原始數(shù)據(jù)。
休漁漁船??扛劭谛畔⒌奶崛〔襟E主要分為3 步:首先查找停船的時間段,然后確定停船地點的經(jīng)度、緯度值,最后利用高德地圖提供的逆地址web 查詢服務查找停泊港口所屬的省、市、區(qū)縣。
1.2.1 查找停船時間段
1)把船位文件中的數(shù)據(jù)(船名、時間、經(jīng)緯度、船速)讀入內(nèi)存,剔除異常值后,經(jīng)度、緯度、速度和時間分別存儲在變量lon,lat,v,t 中。對船速值進行簡化處理,把大于0 的速度都設為1,速度大小信息丟棄,不影響結果。速度處理的表達式為其中表示船舶代號,K 表示船舶的總數(shù),表示該速度在速度矩陣v 中的序號,H表示速度矩陣v 的長度。
2)找到所有速度為0 的時間段的開始位置 , P,1ki和結束位置根據(jù)這2 個位置得到停船時間段的開始時間和結束時間其中表示停船時間段, I 表示第k 條船舶的停船時間段總數(shù),下標“1”表示開始,下標“2”表示結束,下同。根據(jù)起止位置計算出各停船時間段的時長得到按照停船時間段先后順序排列的有序集合, 其 中
理論上,船舶靠岸時,發(fā)動機關閉,并被系上纜繩或者拋錨固定,船的航速為0,可以根據(jù)速度值是否為0 來判斷船舶的動態(tài)。但在實際中,即使船舶已經(jīng)靠岸,由于風浪等自然力的作用或船舶相互之間的碰撞,船速會出現(xiàn)持續(xù)時間較短的非0 值(如表1 中漁船2)。從記錄的數(shù)據(jù)來看,速度從0.1 到5 m/s 不等,所以根據(jù)速度的大小無法剔除這些非零速度。漁船在海上作業(yè)時,航速會出現(xiàn)持續(xù)時間較短的0 值(如表1 中漁船1),會被誤判為船舶??繒r間段。隨機選擇一條漁船的船位數(shù)據(jù),對速度0 值和非0 值的時間段進行統(tǒng)計,結果如圖1 所示。從圖1 中可看出,連續(xù)時長小于15 min 的停船或者開船時間段占比超過70%,所以可通過設置時間閾值來剔除大部分的干擾。閾值設置為大于15 min 即可,例如可將停船閾值設置為15 min,開船閾值設置為30 min。
表1 船位數(shù)據(jù) Table 1 Position data of fishing vessels
如果停船時長小于15 min,這段時間的速度記為1,表示這段時間不屬于漁船??浚梢耘懦鳂I(yè)過程中船速為0 被誤判為靠岸的可能,表達式為
3)查找所有速度為1 的時間段的開始位置 , ,1k gQ 和結束位置根據(jù)開始和結束的位置得到開船時間段的開始時間和結束時間其 中k ∈ (1 ,2,3,… ,K),g ∈ (1 ,2,3,… , G),g 表示開船時間段的序號,G 表示開船時間段的總數(shù)。根據(jù)起止位置計算出開船時間段的時長得到按照開船時間段的先后順序排列的有序集合其中
如果船速連續(xù)非0 的時長小于30 min,則這段時間的速度記為0,可以排除船舶在港口短距離移動被誤判為出海作業(yè)的可能。表達式為
最后,重新計算所有速度為0 的時間段起始位置,并根據(jù)起止位置獲得每個停船時間段的停船時長。
圖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 停船地點的經(jīng)緯度選擇和??康刂凡樵?/p>
漁船在休漁期的停船時長應該是一年中停船時間最長的,故選擇停船時間最長的停船地址來確定是否屬于合理的異地停船。把停船時間段按照停船時間從長至短排序,選擇最長的停船時間段來查找停船位置的經(jīng)緯度。由于船位文件中記錄的數(shù)據(jù)是按照時間先后順序排列,故i 表示的停船時間段也是按照時間先后排列的,需將停船時間段的集合 Sk中的元素按照停船時長從大到小排列,得到有序集合表示重新排序后的停船時間段的序號。在將集合 Sk中的元素按照停船時長從大到小排列的過程中,記錄下重新排序后的停船時間段 ,k jR 在原集合 Sk中的位置 ,k jp 。
從停船時間段的有序集合 Rk中按照從前至后的順序取一個停船時間段R,kj出來,獲得該停船時間段內(nèi)所有停船位置的經(jīng)度值緯度值其中這些經(jīng)度值組成集合緯度值組成集合其中,l 表示對應停船時間段內(nèi)船位數(shù)據(jù)記錄的序號,L 為第k 條船的第 ,k jp 個停船時間段的總記錄條數(shù)。從該次停船的經(jīng)緯度集合中選出一對經(jīng)緯度坐標作為該停船時間段的停船地點坐標選擇過程分為3 步。如果其中一步返回具體的地址則結束:1)選第一對來查詢,如果查詢結果為空,表示船只在海里;2)選擇最后一對經(jīng)緯度值來查詢。如果前2 步查詢結果都返回空,則進入步驟3),選擇該次停船地點坐標集中離岸線最近的坐標點來查詢該停船時間段的停船地址。離岸線最近的坐標點經(jīng)度值最小,計算表達式為表示求最小值的函數(shù),m 表示該最小值在集合中的序號。由1.1 節(jié)可知,船位存在位于內(nèi)陸的異常點,所以這里選擇經(jīng)度最小的坐標點可能正好是位于內(nèi)陸的異常點,此時需要剔除此異常點。如果是非異常點,由于船速基本為0,該時間段內(nèi)的船位經(jīng)度值相差很少,接近于0,而如果該點是位于內(nèi)陸的異常點,該絕對值可達十幾。根據(jù)這個特征,將經(jīng)度差的絕對值的閾值設定在正常值(接近于0)和異常值(可達十幾)之間即可,例如可設定為1,如果差值大于1°,表示該最小值為異常值,則刪除該條記錄。該停船時間段的第一個和最后一個坐標點經(jīng)過步驟1 和步驟2 逆地址查詢?yōu)榭?,表明船只在海里,屬于正常值,故計算與正常值的差值絕對值并與閾值 1 比較,大于 1 則刪除,表達式為其中?表示將該值刪除。循環(huán)上述過程直至剔除此停船時間段內(nèi)的所有異常船位,然后從剩下的船位中選擇經(jīng)度最小的船位點作為該次停船的位置。
得到停船地點的經(jīng)緯度坐標后,利用高德地圖提供的逆地址查詢服務獲得停船地點所在的省、市、縣。設逆地址的查詢函數(shù)為 frev,則可得調用高德地圖[26]提供的逆地址查詢web服務的url 的格式為:https://restapi.amap.com/v3/geocode/ regeo?location=Lon,Lat&key=yourkey&output=json,其中的‘Lon’和‘Lat’處輸入實際要查詢的地理坐標經(jīng)緯度,‘yourkey’是在高德開放平臺上申請的應用服務key 碼,返回json 格式[27]的數(shù)據(jù),其中包含響應經(jīng)緯度值對應的省、市、區(qū)等信息。這里也可以選擇其他公司提供的逆地址查詢Web 服務,例如百度地圖等。如果高德地圖逆地址查找后返回值還是空,那么表示船只還在海上,沒有靠岸,令 1j j= + ,從按照停船時間長短排序的有序集合 Rk中選擇第j 個元素 ,k jR ,即選擇下一個停船時間段,重復以上步驟。
理論上可以遍歷所有停船時間段,直至找到地址。考慮到高德地圖的免費逆地址查詢服務的查詢次數(shù)限制和計算的時效性,從停靠時長最長的時間段開始查詢,一條漁船最多只會查找排在前10 的??康刂?,如果??繒r長最長的10 次??坎樵兘Y果都返回空,那么結果就返回空。如果返回了實際的省、市、縣區(qū),那么記錄該次??吭谖募械钠鹬刮恢茫鹬箷r間,緯度,經(jīng)度和停船時長,否則記錄值為空。
以2018 年北斗VMS 終端記錄的浙江省4 條漁船的船位數(shù)據(jù)為例來分析漁船的??啃畔?。圖2 中的藍色線條表示漁船航行的軌跡,綠色實心點表示漁船停靠時長前10 的??课恢?,紅色實心點表示停靠時長最長的??课恢?。紅色和綠色實心點有重疊,可見漁船經(jīng)常在同一地點???。一般情況下,漁船休漁期間??康臅r長最長,故選擇停船時長最長的停船地點作為該漁船的休漁??康?,如圖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 年最長停船天數(shù)為71 d,停船位置為(121.642 1°E,28.297 02°N),??康睾痛匾恢隆O船5 的船籍地和漁船4 的相同,最長停船天數(shù)為98 d,停船的經(jīng)緯度為(121.520 7°E,28.492 95°N),??康睾痛匾恢?。漁船6 的船籍地為浙江省臺州市路橋區(qū),停船最長時間為82 d,位置為(121.523 6°E,28.492 22°N),地址為浙江省臺州市溫嶺市,屬于同市不同區(qū)???。
表2 漁船停船信息 Table 2 Information of fishing vessels docking
根據(jù)上述方法提取到的漁船??啃畔⒌妮敵鰞?nèi)容包括船名、??康钠鹬箷r間、??繒r長、緯度、經(jīng)度、停靠地所屬的省、市、區(qū)縣。將根據(jù)船名得到的漁船船籍也填入表格,以便于將船籍地與停船位置對照,從而判斷是否屬于異地???。??啃畔⒌妮敵龈袷饺绫? 所示。
表3 漁船靠港休漁信息 Table 3 The fishing vessel docking for fishing moratorium information
利用2018 年浙江省漁船的北斗船位數(shù)據(jù),總共提取7 152 條漁船的靠港數(shù)據(jù),對應的漁船分布在浙江省的臺州、溫州和舟山市。如果漁船在2018 年中??繒r間最長的港口與船籍港不一致則認定為異地??浚渲蟹挚缡⊥??,省內(nèi)跨市??亢褪袃?nèi)跨區(qū)???。
將計算得到的漁船??啃畔⒔Y果存入access 數(shù)據(jù)庫,然后利用SQL 語句查找異地??康拇?。設存儲數(shù)據(jù)的表名為“??俊保兞縮sheng、sshi、sxian 表示船籍地所在的省、市、縣,psheng、pshi、pxian 表示??康厮诘氖 ⑹?、縣。查找省外??康臐O船使用SQL語句:select *from 停靠where ssheng<>psheng,查找省內(nèi)跨市??康臐O船使用SQL 語句:select *from ??縲here ssheng=psheng and sshi<>pshi,查找市內(nèi)跨區(qū)??康臐O船使用 SQL 語句:select *from ???where ssheng=psheng and sshi=pshi and sxian<>pxian and sxian<>sshi。
漁船??啃畔⒌牟樵兘Y果如圖3 所示??缡⊥?康墓?97 艘,占比2.60%,其中臺州市21 艘,溫州市117艘,舟山市59 艘,如圖3a。省內(nèi)跨市??康墓?19 艘,占比5.53%,其中臺州市289 艘,溫州市58 艘,舟山市72 艘,如圖3b。市內(nèi)跨區(qū)??康墓灿? 116 艘,占比15.6%,其中臺州市800 艘,溫州市107 艘,舟山市209艘,如圖3c。按照該規(guī)定在船籍所屬港內(nèi)??康墓? 420艘,占比75.78%,其中臺州市3 228 艘,溫州市1 001艘,舟山市1 612 艘,異地停靠的占比22.87%,如圖3d。
圖3 2018 年浙江省近海漁船異地??拷y(tǒng)計結果 Fig.3 Statistics results of off-site docking of offshore fishing vessels in Zhejiang Province of China in 2018
北斗衛(wèi)星的VMS終端能夠提供高時空精度的船位數(shù)據(jù)且該VMS 終端在近海漁船上的安裝已較為普及,這為研究漁船歷史動態(tài)提供了便利?;诒倍反粩?shù)據(jù),本文給出了一個提取漁船異地休漁信息的方法。主要流程為首先計算休漁漁船停靠的港口所屬的省、市、縣區(qū),其次將結果存入access 數(shù)據(jù)庫,利用SQL 語句查找異地??康拇?,并進行異地??啃畔⒌慕y(tǒng)計。其中計算休漁漁船停靠的港口所屬的行政區(qū)的步驟如下:計算得到休漁期的停船時間段,然后從中取出停船地點的經(jīng)緯度坐標,最后利用高德地圖提供的逆地址Web 查詢服務,得到停船點的省、市、區(qū)。根據(jù)漁船登記的船名得到其所屬的船籍港所在的行政區(qū)。對比船籍港和??扛鬯诘男姓^(qū),得到該漁船是否按照要求在船籍港停泊休漁。
以浙江省漁船的北斗船位數(shù)據(jù)為例,利用該方法計算了浙江省7 152 條漁船異地休漁的情況,并進行了統(tǒng)計對比分析。在船籍港內(nèi)??康臐O船共5 420 艘,占比75.78%,異地??康恼急?4.22%,其中跨省??康?97艘,省內(nèi)跨市停靠的419 艘,市內(nèi)跨區(qū)??康? 116 艘。北斗船位數(shù)據(jù)記錄時間間隔約為3 min,所以VMS 的數(shù)據(jù)量非常大,而該方法的優(yōu)點是能夠快速提取出漁船異地??康男畔?,滿足這種大數(shù)據(jù)的計算需求,在一定程度上能夠為判斷漁船是否屬于異地掛靠提供一定的技術方法支持。