用程序读历史,以数据讲故事。
最近读南美史,就想着是不是能有对应时期的殖民者航线数据可以作为阅读时的参考,你还别说,一找真找到了,比如伦敦大学有一位地理信息、制图学的教授——詹姆斯·柴郡,制作了下面这样的殖民航线地图(以不同颜色区分商船归属国):
https://jcheshire.com/featured-maps/updated-colonial-shipping-routes/
殖民时代的商船航线 ▼
不过上面的地图别看密密麻麻的,但也丢失了很多信息(比如年代、季节等),于是就有另一位老哥,做了两个视频动态版本的航线图:
https://sappingattention.blogspot.com/2012/04/visualizing-ocean-shipping.html
百年航线情况 ▼
航海日志的英文是「Logbook」,虽然名字很像,但跟我们小学时老师让写的日记(Diary)是不一样的,日记更强调个人的思考、感受,如果只是简单的记录下来、通常会被老师说是“流水账”,其实更准确的说是变成了“日志”,如果换成英文Log、程序员小伙伴可能会更有共鸣,主打的就是一个准确、客观。
回到航海日志上,为什么会有这样的东西?回想一下在那个年代、海上航行的船没有自带的动力,基本都是靠风、靠水流,也就是中学地理上很重要的俩概念「季风」、「洋流」。现在问题来了,所谓的“季”风,是说这风在不同季节是会发生变化的(洋流同理),那会儿的船长可没有什么气象气球、浮标啥的用来探测季风、洋流的周期变化情况,靠的就是大家数次航线一点一滴的积累,于是逐渐就形成了航行过程中记录航海日志的规定。
那航海日志记些什么,先来看一张护卫舰大特克号上的航海日志图:
护卫舰大特克号上的航海日志 ▼
看这满桌子仪器、图纸,中间那本小册子就是航海日志了,船长需要定期测量当前船舶所在的位置、以及当前的风速、风向、水流速度等各种航线数据,把这些测量结果记录到小册上、并备注上时间,也就形成了一条航海日志的记录。
虽说手工测量、记录的方式难免存在误差错漏,但数百年积累下来的海量记录,以及足以抹平这种误差了,也给咱们今天数字化当年的航线情况给出了可能。这也就是CLIWOC(世界海洋气候数据库)这个项目干的事情,通过把1750年至1850年这100年间的航海日志记录收集整理,并以IMMA(国际海事气象档案)的格式存成了电子档(也就是前面提到两位老哥所使用的数据集)。
CLIWOC这个项目确实有点儿年头(2003年结束),那会儿互联网都还没普及,数据整理好居然是以刻光盘形式进行分发,虽然今天项目介绍网站犹在,而下载链接已经坏掉了:
https://stream-ucm.es/CLIWOC/
坏掉的数据下载链接 ▼
所幸,我们还能从互联网档案馆(archive.org)中找到他:
https://web.archive.org/web/20220528093512/http://webs.ucm.es/info/cliwoc/cliwoc15.htm
互联网档案馆中的CLIWOC快照 ▼
等好不容易把数据集下载到打开一看,发现有点儿两眼一抓瞎对不对:
1774 2101300 2403 34140 0106 10 1518ES 99 99 0 MNM;Archivo Museo Naval Madrid;Madrid;Spain;;;;;MS. 204;Spanish;;;DE LA SOLEDAD (MALVINAS);RIO DE LA PLATA;FRAGATA;;;JOSE BUSTILLOS;CAPITAN DE FRAGATA;;;;;Unknown;MEDICION Y DATOS DEL MEDIODIA MENOS DESCRIPTORES QUE SUELEN SER DEL ANOCHECER;Diario del Puerto de la Soledad en las Malvinas Al Río de La Plata del alférez de fragata don Gregorio de José y Llaños hecho en la fragata Santa Perpetua del mando del cap. José Bustillos desde el 20-10-1774. CARTA FRANCESA;Unknown;Unknown;DESCONOCIDO;;;360 degrees;17741218;;;;;;;;178.00;;;;0;;;;;;;;;;;;;SO;SO;GALENO;;GALENO;;HORIZONTES ACELAJADOS;;;;;;0;0;0;0;0;0;0;DEL S;;;;;;;;;;;0;;0;;0;;0;;0;;0;0;;;0
1774 2111300 2000 34090 0106 10 1518ES 745 67 99 0 MNM;Archivo Museo Naval Madrid;Madrid;Spain;;;;;MS. 204;Spanish;;;DE LA SOLEDAD (MALVINAS);RIO DE LA PLATA;FRAGATA;;;JOSE BUSTILLOS;CAPITAN DE FRAGATA;;;;;Unknown;MEDICION Y DATOS DEL MEDIODIA MENOS DESCRIPTORES QUE SUELEN SER DEL ANOCHECER;Diario del Puerto de la Soledad en las Malvinas Al Río de La Plata del alférez de fragata don Gregorio de José y Llaños hecho en la fragata Santa Perpetua del mando del cap. José Bustillos desde el 20-10-1774. CARTA FRANCESA;Unknown;Unknown;DESCONOCIDO;;;360 degrees;17741218;;;;;;;;174.00;;;;0;;;;;;;;;;;;;SO;SO;FRESQUITO;;FRESQUITO;;HORIZONTES CARGADOS;;;;;;0;0;0;0;0;0;0;DEL SSE Y S;;;;;;;;;;;0;;0;;0;;0;;0;;0;0;;;0
177612 71500-2698 31330 0106 10 1518ES 1445 67 99 0 MNM;Archivo Museo Naval Madrid;Madrid;Spain;;;;;MS. 204;Spanish;;;DE LA SOLEDAD (MALVINAS);RIO DE LA PLATA;FRAGATA;;;JOSE BUSTILLOS;CAPITAN DE FRAGATA;;;;;Unknown;MEDICION Y DATOS DEL MEDIODIA MENOS DESCRIPTORES QUE SUELEN SER DEL ANOCHECER;Diario del Puerto de la Soledad en las Malvinas Al Río de La Plata del alférez de fragata don Gregorio de José y Llaños hecho en la fragata Santa Perpetua del mando del cap. José Bustillos desde el 20-10-1774. CARTA FRANCESA;Unknown;Unknown;DESCONOCIDO;;;360 degrees;17741218;;;;;;;;139.00;;;;0;;;;;;;;;;;;;O1/4SO;O 1/4 SO;FRESQUITO;;FRESQUITO;;HORIZONTES CARGADOS;;;;;;0;0;0;0;0;0;0;ALGUNA MAREJADA DEL S;;;;;;;;;;;0;;0;;0;;0;;0;;0;0;;;0
177612 81500-2725 31317 0106 10 1518ES 965 46 99 0 MNM;Archivo Museo Naval Madrid;Madrid;Spain;;;;;MS. 204;Spanish;;;DE LA SOLEDAD (MALVINAS);RIO DE LA PLATA;FRAGATA;;;JOSE BUSTILLOS;CAPITAN DE FRAGATA;;;;;Unknown;MEDICION Y DATOS DEL MEDIODIA MENOS DESCRIPTORES QUE SUELEN SER DEL ANOCHECER;Diario del Puerto de la Soledad en las Malvinas Al Río de La Plata del alférez de fragata don Gregorio de José y Llaños hecho en la fragata Santa Perpetua del mando del cap. José Bustillos desde el 20-10-1774. CARTA FRANCESA;Unknown;Unknown;DESCONOCIDO;;;360 degrees;17741218;;;;;;;;68.00;;;;0;;;;;;;;;;;;;SSO;SSO;GALENO;;GALENO;;CALMA;;;;;;0;0;0;0;0;0;0;;;;;;;;;;;;0;;0;;0;;0;;0;;0;0;;;0
177612 91500-2783 31370 0106 10 1518ES 785 67 99 0 MNM;Archivo Museo Naval Madrid;Madrid;Spain;;;;;MS. 204;Spanish;;;DE LA SOLEDAD (MALVINAS);RIO DE LA PLATA;FRAGATA;;;JOSE BUSTILLOS;CAPITAN DE FRAGATA;;;;;Unknown;MEDICION Y DATOS DEL MEDIODIA MENOS DESCRIPTORES QUE SUELEN SER DEL ANOCHECER;Diario del Puerto de la Soledad en las Malvinas Al Río de La Plata del alférez de fragata don Gregorio de José y Llaños hecho en la fragata Santa Perpetua del mando del cap. José Bustillos desde el 20-10-1774. CARTA FRANCESA;Unknown;Unknown;DESCONOCIDO;;;360 degrees;17741218;;;;;;;;39.00;;;;0;;;;;;;;;;;;;NO1/4N;NO 1/4 N;FRESQUITO;;FRESQUITO;;HORIZONTES CLAROS;;;;;;0;0;0;0;0;0;0;LLANA;;;;;;;;;;;0;;0;;0;;0;;0;;0;0;;;0
这时才去查什么是IMMA文件格式,然后看了一堆介绍、好像又什么都没看。不要被“国际海事气象档案”这个名字给吓到了,用大白话来说、IMMA就是字段长度固定的一种文件格式,但是他只是一种规范,并不管具体有哪些字段、字段多长,因此格式的定义还得是去CLIWOC项目中找:
https://stream-ucm.es/CLIWOC/content/CLIWOC15all.htm
CLIWOC字段定义 ▼
注意看上面红框框出来的表格,就是对数据格式的定义,这里每一行就是对一个字段的说明,Start、End列用来表示是在记录中的多少位。根据这个定义,每一条记录的前面23个字符就表示了记录的时间(年月日小时)、以及经纬度坐标,我们从上面的数据记录中选出来一条的前面23个字符标注一下大家应该就能比较直观理解了:
177612 81500-2725 31317
上面这条航海日志翻译过来就是:于1776年12月8日,在纬度-2725、经度31317的地方进行了记录,后面就是记录的具体内容。留意这里的数字8,准确说是“ 8”,前面补了一个空格,这就是「定长字段」的含义,虽然一个字符就足够了,但定义的是2位,就需要占2个位置。
继续翻阅CLIWOC的字段定义会发现一条记录有大量的字段,不过并不是所有字段咱们都需要关注,如果说追踪特定国别、特定船只的航行,可以再提取下面的2个字段:
船只ID与所属国别 ▼
这样将数据根据船只ID、国别进行归类,最后再以时间先后顺序在地图上绘制出来,就是前面老哥实现出来的动态视频效果。