Mapnik是一个开放源代码的地图学工具集,提供基于客户端与服务器端的地图渲染使用,以C++
撰写。Mapnik的原始开发者,Artem Pavlenko将目标明确设置为通过使用子像素反锯齿功能来创建美丽的地图。Mapnik现在也有Cairo渲染后端。Mapnik使用Boost C++ Libraries
来处理如存储器管理、访问文件系统、正规表达式与解析XML等的一般软件工作。地图的外观可以使用XML文件来定义,也可以通过C++
、Python
与Node.js
等编程语言来建构。
本文将要介绍在Ubuntu服务器上部署node-mapnik,通过配置好的XML发布地图服务,并使用Openlayers显示该地图服务。
|
|
1.安装Node.js
如果没有安装Node.js,需要安装Node.js LTS版本(目前是8.11.3,最新版安装node-mapnik好像出问题了)。如果没有安装过可以使用命令进行安装:
安装之后验证版本:
由于npm访问国外网站过慢,可以切换成淘宝npm镜像:
Node.js版本和npm版都不是最新的,需要进行更新,这里使用n
模块进行升级:
安装完成之后就可以通过命令安装latest、stable、lts和指定版本等,这里安装lts版本:
安装完成之后发现node.js和npm版本没有发生变化,需要将原来的node删除,并创建一个软链接到n目录下的node,所在位置如下:
npm升级到最新版本
2.安装node-mapnik
全局安装node-gyp和node-pre-gyp:
node-mapnik模块我没有全局安装,安装到当前目录下。首先创建文件夹并进入:
安装node-mapnik模块:
如果出现安装失败的情况,有的是因为一些资源下载失败,尝试科学上网、不断重试直到安装成功。
安装成功后,我们验证一下模块是否可用,我们使用node-mapnik github上的示例代码进行测试:
使用vim创建test.js测试脚本,并写入上述代码,并保存:
拷入input.jpg(可以使用xshell的rz,我用的是Windows10的Ubuntu子系统,直接把input.jpg拷贝到C:\Users\PaiConor\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\node-mapnik
目录下就可以了),启动测试脚本,如果生成了output.png,则mapnik模块安装成功。
3.配置Mapnik配图样式XML
根据Mapnik的XML配置格式,配了一个简单的地图:
这里的shapefile数据是国家2000经纬度坐标系的,最开始地图也是这个空间参考,但是需要前端访问时对应到这个空间参考上,有些麻烦,所以直接修改地图空间参考为比较流行的Web墨卡托投影坐标系了,图层进行动态投影显示。
配好之后可以使用下面的脚本生成图片,验证配图效果:
4.发布地图服务
Mapnik搞定的是地图渲染,但是发布瓦片服务,还需要使用TileStrata来进行。
安装TileStrata及其插件:
安装完成后创建瓦片服务脚本app.js,并输入以下内容:
启动脚本:
如果会计算某一级别行列号可以通过http://127.0.0.1:8099/map/{z}/{x}/{y}/tile.png
模式验证瓦片服务是否发布成功,也可以通过下面的方法,使用Openlayers加载瓦片服务进行验证。
5.使用Openlayers访问瓦片服务
到Openlayers官网上下载了新版本编译成果,创建前端目录,将ol.js拷贝到js子文件夹下,将ol.css拷贝到css子文件夹下,并创建index.html,内容如下:
这里使用Openlayers加载了Mapnik瓦片服务,并叠加了一个OSM图层,用于对比叠加效果,最终效果如下:
以上介绍的只是做了简单的地图发布,离最终高并发地图服务还有一段距离,需要继续研究和探索。
此篇博文参考think8848的博客,特此感谢!
2018年7月4日更新:
node-mapnik在6月30号发布了4.0版本,支持了最新的node.js版本(10.5.0),以及Mapnik的pre-release master版本(3.1?)。