![1ce07d39fc68c240d6d5bcebe4ad4aba.png](https://i-blog.csdnimg.cn/blog_migrate/acc3d7fcd84b1559d83fd482eb21dd3b.jpeg)
前言
这是零起步的第一篇,零不是绝对意义上的零,有Node+Express框架做为基底,其它的事情就只需关注我们要做什么。另外,类似如何新建一个Express应用程序,不是本文重点,请另行找寻资料。从本篇起,会一步步来说明如果最终形成green-gis-server 0.1.0版本代码,中间有些临时想法也会一并介绍,故中间代码并非最终仓库代码,但中间思路必不可少。(仓库地址)
GIS Server的简单诉求
GIS Server,它作为一个服务,必然是要为请求提供资源的,这是它最单纯的目的。同时,作为一个专业的服务,它提供的必然也是专业的资源,简而言之,它要向客户端提供GIS数据。但有所区别的是,文件服务器往往是客户提供文件名,服务器返回对应文件;而GIS服务器,客户会提交更为复杂的请求参数,比如有时请求整个图层(确切说是要素类,Layer=Feature+Symbol+Label+other layer definition),有时通过空间范围或查询条件请求符合条件的部分数据,有时请求多个图层加渲染的动态图片,所以请求方式多而且复杂,这也是为什么OGC要规范WFS、WMS、WMTS等协议与接口的原因,让所有GIS Server之间能够以统一的方式来交互。
惭愧的是,从做05年开始做.net开发,到15年之后彻底的转向了前端开发,XML,Web Service这些再也回不去了,转而代之的是JSON、Express Restful Service。因此,从这个角度出发,GeoJSON是我们实现轻量服务的最佳格式,也是目前前端多个API可以兼容的数据格式,了解的同仁,可以关注下除了Leaflet之外的非GIS API:例如Echarts、d3等等。
综上,在这一篇:最最简单诉求,请求通过要素名称返回对应的GeoJSON数据格式。
GeoJSON
请求通过要素名称返回对应的GeoJSON数据格式,这个需求有很多实现方法,可能最简单就是一个文件服务器,管理一堆GeoJSON文件,用户请求哪个文件名就返回哪个。OK,没问题,广义来说,这也是GIS 服务器,但这个方案可能存在如下问题:
1.大数据量时如何做切片,
2.如何返回符合条件的数据,
3.GeoJSON数据格式并非是传统GIS平台的输出,GeoJSON作为只适合Web的数据格式如何生成和编辑得来。
4.如果这个方案可以接受的话,那还需要大书特书吗
因此,在这一篇,我们需要实现一个能将传统的GIS数据格式作为输入(发布),GeoJSON作为输出(response返回)的解决方案,同时,为将来做切片和查询打下良好基础。
Node+Express+Mongo
Node+Express+Mongo,MEAN架构就查Angular,其实manager是采用Angular来开发的。个人较为推崇该架构。
Node+Express:Node无需解释,Why Express,作为一个要返回Restful数据及资源的服务器,Express是最佳的,更何况切片请求是最为典型Restful风格,选择Express已经完成了工作的一半:不夸张的说,WebStorm自动生成的Express框架,确实已经完成了50%的代码。
Mongo+mongoose:Mongo作为非关系库,一是它存储的就是JSON格式,二是GeoJSON就格式来说是不严谨的,同一GeoJSON中甚至可以同时存储点、线、面等多个形状类型,这对于关系数据库来说,简直不要太难受,而对于Mongo,这就是小case。(当然不推荐在一个GeoJSON中存储多种要素类)除此之外,GeoJSON属性数据(即properties),这部分是非常自由的,没有事先定义,而Mongo几乎就为处理此类数据而生。
mongoose,不多说,Express+Mongo,中间一般都采用mongoose来访问Mongo。
事半功倍,正确的选型是成功的一半。
GDAL
gdal对于经常从事GIS数据格式转换的同仁,一定不会陌生,同时&#