http://linking123.github.io/2018/07/21/%E5%BC%80%E6%BA%90GIS%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%8C%E6%9A%A8GeoServer-OpenLayer%E7%BB%93%E5%90%88%E5%BC%80%E5%8F%91%E6%80%BB%E7%BB%93/
– 0.感叹
– 1.文档说明
– 2.文档内容
— 2.1 GeoServer - 地图服务
— 2.2 OpenLayers - 前端渲染引擎
— 2.3 地图资源
— 2.4 地图编辑器
— 2.5 2.5d伪三维效果
— 2.6 GeoJson
— 2.7 集成到工程中
— 2.8 商业解决方案
0.感叹
原以为,此生与GIS再无交集。
因缘际会,项目上有机会重拾 GIS 相关,这就是人生啊!
看来,早年的某个举动,在未来某个时刻真的会影响人生的轨迹吧!
1.文档说明
需满足的需求:地理信息,设备信息,建筑物信息等在地图上集中展示。
本文档主要记录此次用到的一些开源地理信息解决方案的集合,使用过程等。
2.文档内容
架构图:
2.1 GeoServer - 地图服务
GeoServer
从官网下载免安装包后,运行命令:
geoserver-x.x.x/bin/startup.sh
打开默认网址http://localhost:8080/geoserver,默认端口8080可能被占用,需要自行修改。
- workspaces:工作区
- styles:样式
- stores:数据存贮
- layers:图层
- layergroups:图层集
发布新的store时,选择字符集为utf-8
,加入新的shape文件后,在数据页,一定要点击计算地图显示范围,即从数据中计算
与Computefrom native bounds
自动计算并显示Lat/Lon Bounding Box边框数据。
部署服务器时,可直接拷贝本地 geoserver-x.x.x文件夹部署运行即可。注意自动启动与后台服务注册。
参考:
GeoServer基础教程(三):部署发布Shapefile地图数据
发布shape图层为服务
2.2 OpenLayers - 前端渲染引擎
OpenLayers OverView:
OpenLayers makes it easy to put a dynamic map in any web page. It can display map tiles「OSM, Bing, MapBox, Stamen, and any other XYZ source」, vector data「from GeoJSON, TopoJSON, KML, GML, Mapbox vector tiles」 and markers loaded from any source. OpenLayers has been developed to further the use of geographic information of all kinds. It is completely free, Open Source JavaScript, released under the 2-clause BSD License (also known as the FreeBSD).
官方实例
基本上支持所有地图资源,除了overview中介绍的,还包括百度地图、天地图等国内地图,还可以加载自发布的地图服务,如ArcGIS Server。
2.3 地图资源
利用ArcMap手绘,需要绘制室内地图(体现三维效果),自定义路径规划
2.4 地图编辑器
ArcMap 制图,请自行学习。
2.5 2.5d伪三维效果
项目中需要用到 2.5d 伪三维效果,经过搜索,找到一些参考「GeoServer官方 sld文档」、「通过sld样式拉伸渲染为伪3d建筑的地图效果通过geoserver发布」、「Geoserver伪三维SLD文件配置」、「SLD 样式 之GeoServer中设计2.5维建筑物」。
uDig自定义图层 style
可将ArcMap制作的 shapeFile 文件编辑出想要的样式。
uDig支持点线面的编辑。导入shp格式文件后,选择change style,制作自己想要的样式,然后导出xml代码到GeoServer的styles中。
2.6 GeoJson
{"type": "Feature","geometry": {"type": "Point","coordinates": [125.6, 10.1]},"properties": {"name": "Dinagat Islands"}
}
载入 GeoJson 属性图层,更灵活的展示数据,也可从后台拼接这种数据格式。
GeoJson加入Feature图层: 转换,工具, 使用
多层地图,及属性图层叠加
shape to geoJson
geoJson 生成
2.7 集成到工程中
因为我是按照 教程 用nodejs来开发前端的,所以涉及一个集成的问题。如果是直接引用openLayers的资源则不存在这个问题
前端开发完成,如果需要写成动态,可能需要集成到其他工程中。
如我集成到 Java Web 中,在 Tomcat 中发布,虽然官方只用了一句copy the dist/ folder to your production server.
说可以把生成的源码直接copy到web服务中,但由于jsp的特点,需要局部改造。所幸改造难度不大,需要注意的是切换地图时,需要先清空map容器,如下
$("#map").html("")
因为 html 标签是复用的,map容器需要先清空。然后再重新请求地图资源。
2.8 商业解决方案
在调研过程中,发现一家专业制作室内地图的公司,记录下来备用。
公司名为蜂鸟云(不是那个送外卖的哦),经过与商务沟通,了解到他们是按面积阶梯性收费,综合起来也不是很贵,而且满足离线部署这一项很符合我们的业务需求,但由于地图数据不受自己的控制,最终舍弃了这个方案。(这不属于商业秘密吗?如有违反,请联系本人侵删。)
需求方提供标准CAD文件,由他们绘制底图,这个就是按面积收费的;地图数据部署在云服务上,可以无限次编辑,下载,离线部署。
哦,说一下他们的地图坐标系,支持坐标系转换,支持大部分坐标系。室外是地理坐标系 WGS 84(4326),室内是投影坐标系。
商业上来说,这家服务真的可以考虑。
以上,为在项目开发中用到的 开源GIS解决方案的大体框架。