张胜茂,张衡,樊伟
(中国水产科学研究院东海水产研究所渔业资源遥感信息技术重点开放实验室,上海200090)
摘要:为了快速录入和分析渔获信息,了解最新的渔业资源动态,以智利竹筴鱼Trachurus murphyi渔业为例设计了一种渔获量数据录入和分析的模块。该模块利用OLE控件读取Excel数据,通过数据库管理与分析数据,选用MapObjects功能组件进行二次开发,把数据转换为矢量点数据,制成专题图,最后打包成DLL(动态链接库)发布。录入与分析模块的使用,提高了数据录入速度,降低了出错概率,提供了多种方法分析渔获量数据,该模块已成为大洋渔业信息服务系统的重要组成部分。
关键词:渔获量;渔捞日志;智利竹筴鱼;渔场预报
在渔业生产和管理过程中,及时获取与掌握渔获信息的变化对渔业生产企业十分重要[1-3]。渔获信息也是进行渔情分析、渔场预报、渔业捕捞优化等研究的重要参考资料[4-7]。目前,渔获数据的处理软件较少。国外研究多集中于利用渔获量数据建立分析模型[8-9],尚未见到渔获量数据批量录入方面的研究。国内吴开军等[10]开发了“渔捞日志管理系统”,用于处理东海区管辖范围内、中日渔业协定暂定措施水域内渔船的渔捞日志,通过人工方式将数据录入到数据库,先后组织了近200名学生、在100台计算机的机房同时输入。经过近一个月的数据输入与检验,生成有50多万条记录的数据库。很明显,该种方式耗时、耗力、成本高,而且容易出错,校对核查困难。远洋渔业公司的生产数据和产量上报数据格式多为Excel,每日各渔船所属的渔业公司都会在固定的时间接收各船的船报数据,一部分远洋渔业公司把渔获量数据转发到笔者所在的实验室。为了快速录入和分析渔获信息,有必要研发一种能将数据快速准确导入到数据库的模块,再利用大洋渔业信息服务系统读取数据库中的数据,结合海况信息编制大洋渔场速预报图,从而提高速报的准确性。模块化是解决一个复杂问题时自顶向下逐层把功能划分成若干模块的过程。良好的模块化设计可以实现高内聚低耦合,减少冗余代码,提高程序的可靠性、可维护性和复用率;而DLL(动态链接库)有助于促进模块式程序的开发,有利于多语言调用,能够简化部署和安装[11]。为此,本研究中,作者采用模块化设计程序,选用DLL(动态链接库)打包,并以智利竹筴鱼Trachurus murphyi为例,进行大洋渔业渔获量录入模块的设计和实现。
渔船一般都分组作业,由一艘指挥船负责组内各船渔获信息的收集,整理后通过海事卫星发送到公司,一般每天发送一次。发送的文件中常常有一些注释,如当渔船上报给指挥船的数据有时延时,注释中会说明数据应是什么时候的产量;如船上网具的故障、网未放好、机器检修等,注释中会说明相应的故障或问题。发送的文件中有时还会出现人为的数据收集输入错误。因此,往往还需要对数据进行人工交互式的“增删改”操作。早期的大洋渔业信息服务系统数据库中的渔获量数据通过人工整理录入,这样耗时费力,且容易出错。虽然各渔业公司渔捞数据格式存在差别,但内容相似,基本都包括位置、时间、渔获量、水温等信息,相似内容的频繁录入存在很多的重复性工作,影响了渔场速预报的效率。通过设计渔获量数据导入功能,将
远洋渔业公司Excel格式的数据直接导入到大洋渔业信息服务系统的数据库中,大大降低了工作人员的工作量,提高了效率。最后利用导入的数据,根据需要选择符合一定条件的数据进行分析制图。
开发环境选用Visual Studio 2005 MFC,大洋渔业信息服务业务系统的数据库使用SQL Server 2005。本研究中以某水产集团智利竹筴鱼渔业的渔获量数据为例,介绍了竹筴鱼渔获量数据的录入与分析过程。模块功能分为渔获量数据录入和渔获量数据分析两部分,数据处理流程如图1所示。渔捞数据表都保存在一个目录中,对目录中所有Excel文件进行遍历,利用OLE控件技术读取数据表中的数据,并保存到数据库中。根据用户的需要,选择符合一定条件的数据,对选定的数据首先生成包含属性信息的矢量点数据,再根据矢量数据的某些属性绘制成专题图,最后显示在海温、叶绿素、海流等底图上,根据渔捞信息各属性与海洋环境的关系分析渔场规律。
图1 渔捞数据处理流程图
Fig.1 The flowing diagram of fishing data process
2.1 渔获量数据导入功能
2.1.1 数据导入流程 用于本研究中的智利竹筴鱼捕捞船是由几艘拖网作业船组成,其发送的渔捞日志Excel报表格式见表1。表1中示意性的选择了两艘船,表头和表的各列名称固定,各船的网次数量不固定,由一天的具体放网数量来确定。
渔捞数据都保存在一个目录中,对目录中所有Excel文件进行遍历,利用OLE控件技术读取Excel数据表中的数据,并保存到数据库。由于文件中存在注释,以及可能出现人为的数据收集输入错误,因此需要对导入的数据(日期、网次、放网与起网时间、放网与起网位置、曳纲长度、拖速、鱼群水温、网口水平扩张、渔获量等)进行格式与取值范围的验证。如果验证的数据出错,数据导入数据库时就被赋值为默认值。
需要导入数据库的渔捞日志文件保存在某个文件夹中,通过三层循环程序把文件中的所有数据导入到数据库中。第一层循环用于遍历文件夹中的所有文件,第二层循环用于读取不同的作业船,第三层循环用于读取某艘作业船的多个网次。在第一层循环时获取渔捞日志的日期,第二层循环时获取作业船的船名,第三次循环时获取具体的网次和渔捞信息(放网与起网的时间和船位、水温、渔获量等)。在循环程序执行过程中,如果出现数据验证错误或文件中出现注释,程序将记录出错信息,并保存在文件中。
2.1.2 数据修改 捕捞船上由专人负责渔获信息收集,数据收集过程中可能存在人为输入错误,根据具体的捕捞状况还会在Excel表中加入注释。在用程序往数据库导入数据的过程中,根据取值情况验证数据,如果数据不在设定的范围内,则认为数据存在输入错误,会在“出错信息文件”中自动记录出错数据的捕捞日期、船名、网次等信息,表中的注释也会被自动记录到“出错信息文件”,通过出错信息查询到相应的记录,再根据具体的渔捞信息修改内容。渔捞数据修改与分析过程如图2所示。
表1 智利竹筴鱼渔捞日报表(2008-05-27)
Tab.1 Daily report of Chilean jack mackerel catching(2008-05-27)
船名boat name网次nets No.放网时间put time放网位置put net position纬度S经度N曳纲长度/m drag rope拖速/kn drag speed网位/m net position鱼群水温/℃temperature网口高度/m net mouth height网口水平扩张/m horizontal expansion起网时间net taking time起网位置net taking position纬度S经度N渔获量/t fishing yield 0043°46′91°14′60 A6122:4543°49′91°12′5404.83612.28710307:0043°25′91°27′120 6714:4043°42′90°47′3004.82312.4908517: 6008:4543°24′90°54′4804.44712.4989620: 0043°46′90°51′50 B6822:2843°54′91°10′3505.21911.88011500:3043°47′91°13′100 6902:5043°59′91°20′4505.13012.09010708:4043°48′91°29′50累计Accumulation 380
图2 渔捞数据修改与分析
Fig.2 The modification and analysis of fishing data
2.2 渔获量数据分析功能
2.2.1 数据分析方法 通过对渔获量的分析,可以了解渔场的动态变化,掌握小渔区的时空分布特点,为寻找渔场和预测翌年可能形成的渔场提供参考。对渔捞信息数据库可以按多种方法选择分析,如按等间距格网、等积格网、等时间段间隔、等距离范围以及船名等进行分析(表1)。分析渔获量的空间分布需要确定各船每个网次的船位,智利竹筴鱼是拖网作业,存在放网位置和起网位置,可以把放网位置、起网位置或两者的中心作为某次捕捞的位置。因为在各划分区域的捕捞船吨位不同,捕捞能力存在差别,并且在同一区域各船放网次数也不同,所以把各船平均值的和作为平均产量;其次有些分析方法(如等经纬度)划分的各区域面积大小不同,影响各区域的比较效果,因此把各划分区域投影面积与其中最小面积的比值作为权重,把各船平均渔获量和与面积权重的乘积作为比较值。具体计算方法如下:
式中:是平均渔获量;α是面积权重;Ta、Tb、…、Tc是a船、b船、…、c船的放网次数;Fai、Fbi、…、Fci,分别是第i次放网时a船、b船、…、c船的渔获量。
1)按等间距格网分析渔获数据。把渔船作业的全部海域用等间距格网划分(如等经纬度),产生多个形状相似且规则的格网单元,把渔获位置落入格网的各网次渔获量平均值作为该格网的渔获量,这样分析比较容易。但是如果跨纬度大,格网
各单元的面积差别就比较大,因此需要用式(1)计算格网单元的渔获量平均值,α是面积权重(格网单元的面积相对值)。这里也可以用等面积的方法划分作业海域,但这种方法产生的格网单元形状差别大且不规则,其应用较复杂。
2)按等时间段间隔分析渔获数据。按等时间段间隔可以把渔获信息划分成多个时间段的平均渔获量,如按月、周、间隔3 d(或其他时间间隔)划分数据,分析渔场位置随时间变化的规律,了解各时间段的渔获效益。用式(1)计算格网单元的渔获量平均值,α是面积权重,取值为1。在较短时间内,渔船移动范围较小,仅经度有些差别,纬度变化不大,因此可以把一定间隔时间段内的所有渔获位置平均值作为该时间段的渔获位置。但如果时间较长,渔船作业范围会扩大,渔获位置偏差也较大。如在一个时间段内出现一个小的渔场刚刚捕捞结束,恰巧转移到另一个新的较远的渔场,这时用平均方法计算的渔获位置误差较大,因而渔获位置并不能反映该处的渔获状况。
3)按多个渔获中心一定范围内分析渔获数据。以某几个渔获位置为中心划分一定的半径范围,把渔获位置落入某个范围的各网次渔获量平均值作为该处的渔获量。用式(1)计算格网单元的渔获量平均值,α是面积权重,取值为1。这样可以分析各小渔场的规模和渔获效益较好渔场的分布特点。采用这种方法确定半径范围较困难,如果范围大,可能包含多个小的渔场,出现大量的范围重叠,渔获量出现重复计算;如果范围小,小渔场会过于密集难于找出规律,或者有些渔获位置不能包含进去。
此外,还可以以船的名称为条件,按船名分类,分析各渔船的渔获效益。
各种选择方法可以交叉使用。如采用等间距格网和等时间段相结合的方法,可以分析格网单元渔获量随时间的变化情况以及渔场位置移动的情况;采用等间距格网和渔船名划分相结合的方法,可以分析各格网中每个渔船的渔获效益。另外,拖速、水温、网口高度、放网起止时间差、曳纲长度和网位等也可以作为统计分析的内容,还可以把渔获量与放网起止时间差的比值作为CPUE(Catch Per U-nit Effort)进行统计分析。
2.2.2 数据制图 分析结果在数据库中生成临时表,再利用临时表生成有属性信息的点矢量数据,并保存为ShipFile格式,再把矢量数据制成专题图。处理程序选用MapObjects功能组件进行二次开发,开发中所涉及到类的关系如图3所示。处理过程有以下几个步骤:
1)创建连接。用DataConnection对象建立Map控件和存放ShapeFile数据目录之间的连接,它是Map控件对地图数据进行访问的桥梁。
2)定义数据属性表。通过TableDesc对象定义数据属性表,并用FieldCount设置添加到数据集属性表列的数量,一个ShapeFile至少有一个属性列。
3)创建ShapeFile文件。使用DataConnection对象的AddGeoDataset方法,在指定的文件夹中创建一个新的ShapeFile文件。
4)属性字段赋值。利用MapLayer对象获取Recordset数据集,再通过循环作为数据集赋值。
5)图层渲染。ChartRenderer对象可以渲染图层生成专题图,通过该对象的ChartType属性设置成饼状图或柱状图。
图3 渔获量数据制图涉及的MapObjects类关系图
Fig.3 MapObjects class diagram used in map making in fishing production data
将渔获量数据录入模块打包成动态连接库DLL的形式,包含的类如图4所示。CFetchData类继承于CObject类,用AFX_EXT_CLASS宏导出类,它有矢量数据路径和数据库连接字符串两个属性,通过Get和Set公有方法操作属性。CFetchData类负责构造CFetchInput类和CFetchAnalysis类的实例,通过ShowFetchInput和ShowFetchAnalysis调用实例。CFetchInput类和CFetchAnalysis类都继承自CDialog窗体类,都有公有属性DataBaseConnetion,用于设置数据库连接字符串,都有保护方法OnIn-
itDialog用于初始化窗体。CFetchInput类通过调用公有方法InitTable初始化数据表,调用私有方法DataAdd、DataDelete、DataEdit、DataSearch实现“增删改”与查找。CFetchAnalysis类的ShipFile-Path属性用于设置矢量数据存储路径,利用私有方法EqualTimeInterval和EqualDegreeInterval分别输出等时间间隔和等经纬度间隔的矢量数据。
图4 模块中的类
Fig.4 Class diagram of the model
编译后生成动态库FetchData.dll和静态库FetchData.lib,在主程序中调用时,需要在程序中引入头文件FetchData.h,在主程序链接器的附加依赖项中包含静态库FetchData.lib。将动态库FetchData.dll复制到系统目录或当前应用程序目录,运行后的界面如图5-(a)渔获量录入界面和图5-(b)矢量输出界面。智利竹筴鱼的渔汛期从3月中旬到10月中旬,通过生成的渔获量矢量数据,可以分析出随着气温降低,渔场纬度逐渐由南向北移动;利用它还可分析渔获量高值分布的区域,以及各船渔获量的比例等。
图5 模块界面
Fig.5 Module interface
利用OLE控件技术读取Excel数据,基于数据库管理与分析数据,选用MapObjects功能组件进行二次开发,把数据转换为矢量点数据,制成专题图,最后打包成DLL动态库发布。利用该DLL开发的程序,在笔记本ThinkPad T400(Intel Core 2 Duo CPU P8700 2.53 GHz,2 GB DDR3,Windows SP3)上运行,批量导入容量大小为8.57 M的181个Excel文件,耗时5 min 8 s,共导入记录1 270条,导出出错记录信息及注释61条。因此,如果用10台类似配置的计算机导入50万条记录约需3 h,极大地提高了数据录入速度。
这种模块的实现将有利于快速查询和分析智利竹筴鱼往年渔获量的时空分布,为寻找渔场和预测翌年可能形成的渔场提供方便,也是以后建立智利竹筴鱼渔业数据库的重要模块。通过本模块的研发,类似的还可进行其它大洋渔业渔获量的录入模块研发,如大洋金枪鱼和鱿鱼渔业等。各渔业公司用于记录各鱼种渔获信息的Excel表格格式不同,因此还需要设计一个Excel表格格式的管理模块,从而实现对多种渔获信息录入的通用模块。
参考文献:
[1] 尹增强,李九奇,张国胜,等.渔业资源管理目标定量确定的探讨[J].福建水产,2004(2):29-32.
[2] 许永久,张敏.智利竹筴鱼中层拖网设计参数与作业性能分析[J].现代渔业信息,2009,24(12):20-25.
[3] Gonzalez L W,Eslava N,Suniaga J.Description and analysis of the offshore fisheries of snapper in Venezuela[J].Boletin del Centro de Investigaciones Biologicas Universidad del Zulia,2000,34(3): 332-361.
[4] 牛明香,李显森,徐玉成.智利外海竹筴鱼中心渔场时空变动的初步研究[J].海洋科学,2009,33(11):105-108.
[5] 樊伟,崔雪森,沈新强.渔场渔情分析预报的研究及其进展[J].水产学报,2005,29(5):706-710.
[6] 孙林,杨德权,肖洪钧,等.海洋渔业捕捞优化模型及其可持续发展策略研究[J].渔业经济研究,2009(1):12-17.
[7] Hara Y,Kato N,Mahapatra K,et al.An attempt to forecast favorable temperature zone for fishing ground formation of skipjack tuna Katswonus pelamis using satellite data and fishing ground data[J]. Journal of the School of Marine Science and Technology Tokai University,2009,7(1):35-43.
[8] Mainardi S.A surplus production model with latent truncation and species targeting,with an application to Papua New Guinean fisheries[J].Fisheries Research,2009,95(2-3):296-308.
[9] Abbad M,Abdallaoui G M,Benomar G.Use of dynamic programming in the modeling of sardine fishing in Morocco[J].Rairo-Operations Research,2004,38(3):215-225.
[10] 吴开军,胡光民,张澍,等.渔捞日志管理系统的开发与应用[J].海洋渔业,2006,28(2):152-157.
[11] 霍顿.Visual C++2005入门经典[M].北京:清华大学出版社, 2007.
Design and implementation of ocean catch data input and analysis module——an example of Chilean jack mackerel fishery
ZHANG Sheng-mao,ZHANG Heng,FAN Wei
(Key Laboratory of Fisheries Resources Remote Sensing and Information Technology,East China Sea Fisheries Research Institute, Chinese Academy of Fishery Sciences,Shanghai 200090,China)
Abstract:A fishing data entry and analysis module for Chilean jack mackerel was designed and implemented in order to quick entry and analysis of fishing production information on the latest dynamic fishery resources by OLE technology for read Excel data.Data management and analysis was based on database,Data was converted into vector data and made thematic maps by MapObjects as secondary development components,and finally Module was packaged into DLL dynamic link library.The data entry speed was improved and the probability of error reduced in the use of the input and analysis module as an important part of ocean fisheries information service system which provided a variety of methods to analyze fishing yield data.
Key words:fishing yield;fishing log;Chilean jack mackerel;fishing forecast
文章编号:2095-1388(2011)02-0162-06
中图分类号:TP311;S973
文献标志码:A
收稿日期:2010-04-22
基金项目:国家“十一五”科技支撑计划项目(2006BAD09A05);国家“863”计划项目(2007AA092202);中央级公益性科研院所基本科研业务费专项(2009T08,2008Z01)
作者简介:张胜茂(1976-),男,博士,助理研究员。E-mail:ryshengmao@126.com
通信作者:樊伟(1971-),男,研究员,博士。E-mail:dhyqzh@public4.sta.net.cn