为了能在史纲课上拿到不错的平时分,我们小组揭榜挂帅选了一个比较有挑战性任务——制作第一次鸦片战争GIS系统。
由于老师希望实现网页端的交互,导致了我们无法使用ArcGIS Pro进行任务,从而转向有qgis2web插件的QGIS。然而好景不长,QGIS的插件不能完全做到所见即所得,虽然其很高端,能够实现炫酷的操作与交互,因而最后我们又回归ArcGIS Pro,最终方案为:ArcGIS生成合适的地图图片,再使用前端工具对图片进行标注。
一、数据选择
虑到我们要制作的GIS是针对1840年的,现有地图显然不能支持我们完成这项任务。哈佛大学的CHGIS v6很好的解决了我们的问题,在其官方数据库下载v6_1820_pref_pgn_utf
(市一级行政区边界),v6_1820_pref_pts_utf
(市一级行政区中心),v6_1820_prov_pgn_utf
(省一级行政区边界),然后将这些包导入到ArcGIS中即可。
需要注意的是,在我使用的ArcGIS中,utf编码的地图会产生乱码,建议下载gbk编码的版本。
二、整体构思
设计思路是将视图分为左右两个板块,左边为地图,右边为文本。
|
|
三、框架搭建
为了能够轻便运行,我放弃了VUE、NodeJS、flask等需要服务端的框架,转而使用轻量级的html+js+css
完成网页搭建。
感谢伟大的大语言模型deepseek的大力支持,让我在一周不到的时间里完成这个项目。
在index.html中,我们首先对网页视图进行简单划分区域:
|
|
可以看到在container中,我把视图分为两个区域:map-containe
和info-panel
,前者负责展示地图和实现交互操作,后者负责展示内容。
内容很好生成,只需要把想要放进去的文本交给大语言模型,让其转化为html即可:
|
|
左侧的地图就更加简单,直接添加图片即可:
|
|
如此,基本的网页框架就搭建完毕了。
四、细节实现
(一)样式设计
在styles/main.css
中来实现具体的样式,首先对网页大体进行设计:
|
|
在map-container
和info-panel
中分别定义flex
属性,使其做到6.5:3.5的视图占比,紧接着设计一下背景颜色和阴影部分。
之后实现info-panel
中多样化的字体样式与图文混排:
|
|
(二)鼠标悬停信息展示交互
为了可视化地展示第一次鸦片战争中一些关键战役点的信息,我们要在地图上绘制一些可交互的点,这需要依靠JavaScript。
在main.js中,实现这个功能;而在data.js中,存储着需要画图的信息。
|
|
这些机械性内容完全可以交由大语言模型来帮忙填充。需要注意的是,这里的position
是我个人手动调整的,在我的电脑上能够完美对应地图上的点,但是在别的尺寸的屏幕上会有偏移,具体原因会在后文提到。
这一段交由大语言模型实现:
|
|
首先实现动态绘图,依照data.js
的内容,定义一个展示框及其样式。
然后实现动态绘图:
|
|
到此,网站的绝大部分内容就实现了。
(三)鸦片战争动态展示
为了实现鸦片战争的动态展示,一开始我希望也通过JavaScript来实现,但是在咨询过淘宝的外包人员以后,得到的答复是比较难实现(要加钱),因而我也没有办法在一周内就实现这样的效果。
但是人生就是一场面向结果的编程,只要能实现结果,可以不考虑过程。
如何将鸦片战争的动态展示转移到我的舒适圈?于是我脑洞大开,仔细一想,如果能使用PPT自带的平滑过渡效果,就能很快实现这个功能,那么接下来我的任务实际上就是:用PPT绘制鸦片战争动态过程,然后把其转化为网页元素。
前者十分好实现,Office也算是老朋友了,不到十分钟结束战斗。但问题是如何把PPT转化为可交互的网页元素。直接另存为html显然不可行,我的核心诉求就是保留ppt的平滑过度效果。天不亡我,我找到了课件制作软件_交互式课件_scorm课件_iSpring Suite官方正版,借助这个强大的工具,可以将带动画的ppt以web形式发布,解决了我的痛点(14天的试用期在ddl为7天的时候显得苍白无力)。
接下来我直接把生成的文件放到/misc
目录下,然后在index.html
中添加一个指向它的按钮就可以完美实现我的需求:
|
|
之后实现一下对应的css样式就可以完美结束战斗:
|
|