kisssy
卧底
卧底
  • 注册日期2004-04-18
  • 发帖数235
  • QQ
  • 铜币614枚
  • 威望2点
  • 贡献值0点
  • 银元0个
阅读:1869回复:0

[转发]从零开始实现GIS Server

楼主#
更多 发布于:2019-02-28 18:39


前言

了解ArcGIS的同仁们应该知道,自从ArcGIS Desktop与ArcGIS Server捆绑销售后,整个下来成本不菲,所以只有大项目敢上这些重量级的支撑软件。小项目就只有求助于开源平台,而最近在一直肤浅地学习GeoServer与OpenLayer,发现还是太啰嗦,尤其是使用GeoServer发布数据,各种选项(大多用不着,尤其是从一个小项目角度出发),各种协议(OGC的WMS、WFS、WMTS,这里说句不爱听的,一大堆所谓的专家与大学教授聚在一起搞这个,虽然协议与接口是非常重要,但是在目前大前端的发展来讲,这些基于XML的WMS、WFS,以及KML与GML,都是落伍的。当然WMS、WFS、WMTS的3.0在考虑基于JSON的协议与接口),总而言之,GeoServer这个采用Java开发的开源GIS Server,对于目前一些Web应用来讲,口味还是有点重,这个就好比那些推行Leaflet的同仁们,一直在拿之与OpenLayer比较的过程,以轻量这个优点来克敌制胜。那么,问题来了,能否自己动手写一个简单的GIS Server来满足采用轻量API(Leaflet)来做GIS开发的Web应用?答案会在这个系列的连载中来回答。(连载的原因,一次没太多时间来进行总结和写作)


需求设定

这部分很重要,自己实现的肯定是一只麻雀,比不了商业的和成熟的,但是简单有多简,轻量有多轻,在这一小节会把功能范围大致框定,可能不一定会适用于各位看官的需求,但整个实现思路会对您有所启发,这也是个人迫不及待想要写下来的一个原因。
1.前端支持Leaflet API;(原先也考虑可以用ArcGIS JS API来调用,但尝试ArcGIS JS API调用GeoServer发布的WFS服务之后,就放弃了,问题之多难以列表)
2.支持GeoJSON,不支持WMS、WFS、WMTS、KML、GML等等,理由如前言所述;
3.发布格式目前只支持ShapeFile,GIS格式由于百花齐放,格式万万千,但SHP应该是最基础的,各平台转换成该格式的功能也是约定俗成的;
4.框架选用NodeJS+ExpressJS,不多说,也不争辩,这个基于目前只应用在前端开发上,因此采用Java的同仁请继续支持GeoServer。(前两天,一公司的技术副总(Java出身)竟然问我这样一个问题,Node能访问数据库吗? 。。。。。。)
5.支持静态栅格切片、动态矢量切片(支持前端和后端渲染,这个是重点,请各位看下去,这个本人也是在摸索中去窥探其它GIS Server的实现方式,请放心,本文能实现的功能,各位只要有基础也能实现,即使只是GIS开发的初学者)。如果看官有心的话,应该可以做一个简单对应:WFS用GeoJSON,WMS用栅格切片,WMTS用矢量切片。
6.Mongo数据库存储发布数据
7.坐标系只支持wgs84(4326)、web mercator(3857)
8.支持高德地图、谷歌地图,暂不支持百度地图(切片计算方式不同)
补充说明,NodeJS+ExpressJS+Mongo与GeoJSON也是完美结合,如果NodeJS+ExpressJS去支持XML,不是不可以,相信各位也一定会觉得很难受。


技术准备

如果您要动手实现,请先储备如下技术:
1.GIS初学者或爱好者,老鸟请回避,抬杠受不鸟;
2.NodeJS+ExpressJS
3.Mongo+mongoose
4.Leaflet
5.开发IDE:WebStorm或VS Code
本文不会手把手来进行教学,所以在了解以上技术的情况,对重点实现思路或部分重点代码进行讲解。




源码仓库

1.server(服务):green-gis-server,仓库地址
2.manager(后台管理以及调用示例):green-gis-manager,仓库地址




示例效果

  1. 发布数据(publish shp,wkid=4326 or 3857)
[p][/p]2.GeoJSON(use leaflet geojson class to render geojson data)
[p][/p]3.Backend(use node-canvas render data in node)
[p][/p]4.Frontend(extend leaflet GridLayer to render data in browser)
[p][/p]5.Vector Tile(checkout chrome dev tools)
[p][/p]



连载章节

1.node-gdal:shapefile in and geojson out
2.tile:generate tile to handle big data
3.node-canvas:draw vector tile from backend
4.leaflet gridlayer:draw vector tile from frontend
5.cache:eat memory for faster tile
6.static tile:the fastest tile
喜欢0 评分0
个人专栏: https://zhuanlan.zhihu.com/c_165676639
游客

返回顶部