不久前,我在搜韵上看到了一件很好玩的作品:将诗人的一生轨迹展示在地图上,并且标记出在每个途经点创作的诗歌。比如下图就显示了孟浩然的诗歌轨迹。 注:图片截图自http://sou-yun.com/poetlifemap.html 这种将时间和空间结合起来展示诗人作品的方式,其实也是我长久以来就有的想法,只是因为工作量太大就一直没有动手。看到搜韵网已经做出来了,有一种心想事成的感觉,非常开心。 但是,这些地图都是图片,并没有地理信息数据,无法做到根据地点的经纬度在地图上自动做标记。我们需要的是一份数字地图,可以输入地点的经纬度,自动在图上标记。 1 老板,请给我一份1080年的中国数字地图首先要找到数据源,使用哈佛大学的Hartwell数据集作为我们的数据源。链接为:https://www.fas./~chgis/data/hartwell/ Hartwell是哈佛大学的一位教授,已于1996年逝世。这位教授在临终前将他收集制作的古代中国地理数据赠予了哈佛大学,在此向他致敬。虽然Hartwell教授已经仙逝,但是这个数据集却一直在发展。到现在为止,已经有了唐、宋、元、明详细到各个县的数据。 1.1 下载数据数据下载完毕,我们关心的地理信息都保存在.shp文件中,用QGIS打开v5_1080_chin_chn_1080_l.shp这个文件,如下图: 仔细看,图内各个行政区的划分,和现在的各个省划分还是不一样的。这份数据不能直接使用,必须经过以下预处理。 1.2 坐标转换Hartwell提供的地图数据是在西安1980坐标系,地图内各个地点的位置不是用经纬度表示。这当然很不方便,我们习惯了经纬度,况且很多历史地点都只能查到经纬度数据。因此我们首先要把地图的坐标转换到WGS-84坐标系下(想起来我在线性代数中提到过的坐标转换了吗?),这难不倒我们,用QGIS将shp文件另存为的时候,选取WGS-84坐标系就好了。 这样我们就得到了WGS-84坐标系的地图数据。 1.3 格式转换与压缩现在WGS-84坐标系下的地图数据还是shp格式,约1.6M大小。我打算继续用echarts来制图,echarts允许的自定义地图数据格式只能是geojson格式,因此要将数据从shp格式转换为geojson。此外,对于一个网页来说,1.6M有点大,我们要将其压缩一下。这两点需求都可以通过http://www./来实现。 能够看出,基本没有任何精度损失,效果令人满意。 1.4 地图上色我们知道,北宋一朝,一直都是北宋、辽、西夏、大理、吐蕃等各个国家并存。shp数据中包含了各个行政区域的国家信息,但是在地图上并没有显示出来。所以,接下来我们按照不同国家来对地图上色,最终的效果如下图: 实际上,在鼠标悬停在每个行政区之上,会显出该行政区的名称,但是截图体现不出来。请大家在我将数据整理并上传到网站后,自行体会。 1.5 补充城市数据目前这份数据还只是行政区分界线,空荡荡的。接下来我们将补充城市信息到地图中,当然是古代的城市名称。继续使用我们在《计算机告诉你,唐朝诗人之间的关系到底是什么样的》文中提到过的CBDB数据库,这个数据库在ADDRESSES表中存储了非常多的古代地名,并且有我们想要的经纬度信息。比如我们查询 福州: 有很多重名。我们通过城市所属国家“宋朝”,立刻判定出第三个福州才是我们想要的信息,并且得知福州的地理位置为:东经119.32158°,北纬26.07395°,属于福建路。 有了地图,接下来,我们就可以绘制苏东坡一生的行迹了。 2 东坡行迹2.1 东坡年谱苏东坡的一生跌宕起伏,大概可以说是二起二落: 2.2 绘制轨迹 苏轼一生去过很多地方,我们从CBDB中把年谱中涉及到的地名的经纬度查询出来,标记到地图上。并根据时间顺序画出来,最终形成下面的轨迹图: 从图中可以看出,轨迹有两个密集核心,一个是开封府,一个是杭州。开封府自不必说,是当时的首都。杭州则是苏轼任职过两次的地方,一次任通判,一次任知州,累积住过五年,并修建了苏堤,留下了“淡妆浓抹总相宜”等名句。 因为信息太多,可能有些看不清楚,我们再把地名隐去,应该就能更清楚的看出苏轼的一生是多么曲折起伏了。 这个轨迹图其实是动态的,不过截图体现不出来。我会在两天后把北宋的地图和苏轼的轨迹图都上传到我的网站mrqianjinsi.com,网站上可以体现出图的动态性。请大家长按以下图片,关注我的公众号,以便在第一时间获得通知。 |
|