厦大地图君:我觉得我还可以再抢救一下
上周三晚上参加图书馆的泛技术分享会,陈晓亮介绍了IIIF,突然脑内某神经元之间脂肪条连接,这个可以运用在厦门大学地理信息系统的移动端。厦门大学地理信息系统,基于Flash,移动端无法浏览。如果有人要访问,我一般都会推荐去百度或者腾讯地图,不敢推我们自己的东西,蛮丢人的。
于是立刻搭起来IIIF服务器,使用Leaflet,使用Leaflet-IIIF插件,前端Nginx做应用交付,URL重写。加个Flash检测JavaScript脚本。整个流程就是,访问map.xmu.edu.cn http://map.xmu.edu.cn ,Nginx转发到新服务器的Apache,判断,如果有安装Flash,直接跳到Nginx代理的旧地图服务,保留了原先的URL,否则使用Leaflet查看地图照片。
所以抢救的结果就是,原先你用移动客户端啥都看不到,现在至少你可以看图片了,这个图片可以放大缩小,按需下载显示的区域减少流量,仅此而已。
文章目录
具体技术实现
大图怎么来
几年来一直有人找我们拿地图的底图,因为厂商没有交付给我们,我们都是建议对方自己截图拼接,直到有一天受不了了,我们冲到厂商部署的服务器内,找到厂商已经分割好的一千多张图片,写了个Python脚本拼接了起来,于是有了一张高分辨率的大图。
但是如何放到互联网去浏览一直是难题,切图拼接都必须自己写代码,所以就一直没有去做,直到这次陈晓亮介绍了IIIF。
IIIF
International Image Interoperability Framework http://iiif.io/ 的中文是国际图像互操作框架,我在写本文的时候找中文资料少之又少,可能还没开始流行起来。国际图像互操作组织成立 http://www.cnki.com.cn/Article/CJFDTotal-BJJG201504018.htm 。
2015年6月18日,大英图书馆、新西兰国家图书馆、欧罗巴那数字图书馆、牛津大学图书馆、哈佛大学等29个非营利图像资源存储机构共同成立国际图像互操作组织(ⅢF),旨在确保全球图像存储的互操作性和可获取性,对以图像为载体的书籍、地图、卷轴、手稿、乐谱、档案资料等在线资源进行统一展示和使用。
IIIF实际上提供了一个能力,对于有高分辨率大图的图书馆或者博物馆,希望图片资源有更多的消费者,但是消费者又有不同的需求,不可能为每个消费者各个访问终端提供所有尺寸和格式的照片,然而又希望消费者能够链接到他而不是下载了图片自行处理导致使用率无法跟踪,也导致互联网重复照片增多。所以使用IIIF协议,提供3种API(Image API http://iiif.io/api/image/2.1/ 、Presentation API http://iiif.io/api/presentation/2.1/ 、Search API http://iiif.io/api/search/1.0/ )。比如Image API,每张高分辨率大图都有一个JSON格式的说明,介绍了图片的结构和描述性信息,同时支持以URL直接对图像进行处理,大小、裁剪、旋转、压缩质量、格式等等,按需生成。URL格式类似:http://iiif.example.com/image_file_name/full/400,/0/default.jpg ,唯一清晰易懂。
IIIF网站有服务端和客户端的实现,也就是你只要扔给服务端一张大图,上面的要求都可以自动帮你完成。
服务端
我用的服务端是IIPImage Server,Loris没有跑起来。最开始是下载IIPImage Server的GitHub代码,自行编译,遇到非常多的库依赖问题,于是直接使用apt-get install iipimage-server,让操作系统帮我处理依赖问题,但是发现Ubuntu 16.04LTS自带的iipsrv版本太旧还不支持IIIF,于是从GitHub编译了替换可执行文件cgi,即可正常使用。
使用fcgid在Apache2下面跑。
大图处理
我们地图的底图是一张JPEG,由于IIPImage Server对TIFF的支持比较简单,无需再安装第三方类库,所以直接把JPEG转换成多分辨率格式的TIFF、金字塔层式TIFF http://www.digitalpreservation.gov/formats/fdd/fdd000237.shtml 。命令如下:
convert sm.jpg -compress jpeg -quality 90 -define tiff:tile-geometry=256*256 ptif:sm.tif
放到服务器即可。
前端
Nginx做代理。leaflet和leaflet-iiif展示大图,把其他校区分校的效果图拿来替换。Flash Detection Library http://www.featureblend.com/javascript-flash-detection-library.html 做Flash组件检测。
也就是,非常少的工作量,非常少的代码,让地理信息系统支持了移动端,虽然只能看图片,聊胜于无。
完美。
完美个头。一点也不,还没有搜索,寻路,GeoJSON,Geolocation呢!我们来看看厦门大学地理信息系统的前世今生,没有未来。
厦门大学地理信息系统
厦门大学地理信息系统始建于2010年12月,那时候Flash还如日中天,伪3D的照片确实比卫星地图效果好。
一经推出取得了很好的反响。但是,很快Flash被乔布斯干掉。移动客户端大量兴起,基于Flash的慢慢没了市场。6年下来,技术进步很快,HTML5的JavaScript框架,AR/VR,360全景,航拍,手绘地图纷纷起来。越来越落伍了。
但是我们没有去跟进,其实这个项目从开始维护就是失败的,这个系统如同其他高校如同其他项目一样,项目建设完就没有持续投入了。项目都是这样子的,开始很难得申请到一笔经费,确定好需求,建设好了,发一篇新闻稿,年终总结有得写了,有人升职了,这个事情就了了。
运维呢?持续的运维呢?敏捷开发呢?
当然好的模式项目能够得到持续的人员和资金投入。地理信息的运维涉及到下面几块:
- 技术的持续进步,平台的更新,替换Flash等,这个要写代码。
- 底图的更新,这个需要支付经费让厂商定期勘测。
- 建筑物和机构数据的更新。第一次厂商帮忙导入每个建筑和机构所在地的初始数据后,理论上还需要持续有人更新这些数据。信息与网络中心作为技术部门,更新这些信息显得过于浪费,而且更新数据没有权威性,不够及时,一个新建筑起来或者机构搬了位置,从来不会去通知信息与网络中心。但是你也没有能力强迫某个业务部门来做这个更新,所以投入使用后并没有业务部门来接手,这不是他们的事。
6年过去了,一张错误的地图还会导致大使馆被炸毁,导致把你导航到海里。厦门大学版图从最开始的思明校区已经拓展到三个校区一个分校(当然很多游客还只认本部思明校区)。现在的厦门大学思明校区去翔安校区需要经过一条海底隧道,去漳州校区需要坐船,去马来西亚分校需要坐飞机。
然而她还是如同你几年前第一次遇到的那样,美,么?
为什么不社会化
我是很拥抱社会化的,因为确实外面做得比我们专业。然而在地理信息平台上,你校内某个机构比如信息与网络中心在哪个位置,百度腾讯是不关注的,因为不会为他创造经济利益。而且就算人家添加上去了,更新也很麻烦,需要对方审批。所以高校一定得有自己可控的地理信息系统。并且这个地理信息系统除了给游客或者校内师生提供查询服务外,还可以为光纤管网、监控、资产系统、会议指引等提供底层数据支持。
未来
未来她会如何?没人知道,可能哪天我们突然有钱了,把她更新了,但是这个好像又是信息化一个很边缘的应用,估计是不太可能。或者哪天我们有人吃饱了没事做自己做了个,用了很新的技术,有一个很好的产品经理,数据更新引入UGC,希望是后者。