开源GIS解决方案,暨GeoServer+OpenLayer结合开发总结
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.文檔內(nèi)容
— 2.1 GeoServer - 地圖服務(wù)
— 2.2 OpenLayers - 前端渲染引擎
— 2.3 地圖資源
— 2.4 地圖編輯器
— 2.5 2.5d偽三維效果
— 2.6 GeoJson
— 2.7 集成到工程中
— 2.8 商業(yè)解決方案
0.感嘆
原以為,此生與GIS再無交集。
因緣際會,項目上有機(jī)會重拾 GIS 相關(guān),這就是人生啊!
看來,早年的某個舉動,在未來某個時刻真的會影響人生的軌跡吧!
1.文檔說明
需滿足的需求:地理信息,設(shè)備信息,建筑物信息等在地圖上集中展示。
本文檔主要記錄此次用到的一些開源地理信息解決方案的集合,使用過程等。
2.文檔內(nèi)容
架構(gòu)圖:
2.1 GeoServer - 地圖服務(wù)
GeoServer
從官網(wǎng)下載免安裝包后,運(yùn)行命令:
geoserver-x.x.x/bin/startup.sh打開默認(rèn)網(wǎng)址http://localhost:8080/geoserver,默認(rèn)端口8080可能被占用,需要自行修改。
- workspaces:工作區(qū)
- styles:樣式
- stores:數(shù)據(jù)存貯
- layers:圖層
- layergroups:圖層集
發(fā)布新的store時,選擇字符集為utf-8,加入新的shape文件后,在數(shù)據(jù)頁,一定要點擊計算地圖顯示范圍,即從數(shù)據(jù)中計算與Computefrom native bounds自動計算并顯示Lat/Lon Bounding Box邊框數(shù)據(jù)。
部署服務(wù)器時,可直接拷貝本地 geoserver-x.x.x文件夾部署運(yùn)行即可。注意自動啟動與后臺服務(wù)注冊。
參考:
GeoServer基礎(chǔ)教程(三):部署發(fā)布Shapefile地圖數(shù)據(jù)
發(fā)布shape圖層為服務(wù)
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中介紹的,還包括百度地圖、天地圖等國內(nèi)地圖,還可以加載自發(fā)布的地圖服務(wù),如ArcGIS Server。
2.3 地圖資源
利用ArcMap手繪,需要繪制室內(nèi)地圖(體現(xiàn)三維效果),自定義路徑規(guī)劃
2.4 地圖編輯器
ArcMap 制圖,請自行學(xué)習(xí)。
2.5 2.5d偽三維效果
項目中需要用到 2.5d 偽三維效果,經(jīng)過搜索,找到一些參考「GeoServer官方 sld文檔」、「通過sld樣式拉伸渲染為偽3d建筑的地圖效果通過geoserver發(fā)布」、「Geoserver偽三維SLD文件配置」、「SLD 樣式 之GeoServer中設(shè)計2.5維建筑物」。
uDig自定義圖層 style
可將ArcMap制作的 shapeFile 文件編輯出想要的樣式。
uDig支持點線面的編輯。導(dǎo)入shp格式文件后,選擇change style,制作自己想要的樣式,然后導(dǎo)出xml代碼到GeoServer的styles中。
2.6 GeoJson
{"type": "Feature","geometry": {"type": "Point","coordinates": [125.6, 10.1]},"properties": {"name": "Dinagat Islands"} }載入?GeoJson?屬性圖層,更靈活的展示數(shù)據(jù),也可從后臺拼接這種數(shù)據(jù)格式。
GeoJson加入Feature圖層:?轉(zhuǎn)換,工具,?使用
多層地圖,及屬性圖層疊加
shape to geoJson
geoJson 生成
2.7 集成到工程中
因為我是按照?教程?用nodejs來開發(fā)前端的,所以涉及一個集成的問題。如果是直接引用openLayers的資源則不存在這個問題
前端開發(fā)完成,如果需要寫成動態(tài),可能需要集成到其他工程中。
如我集成到 Java Web 中,在 Tomcat 中發(fā)布,雖然官方只用了一句copy the dist/ folder to your production server.說可以把生成的源碼直接copy到web服務(wù)中,但由于jsp的特點,需要局部改造。所幸改造難度不大,需要注意的是切換地圖時,需要先清空map容器,如下
$("#map").html("")因為 html 標(biāo)簽是復(fù)用的,map容器需要先清空。然后再重新請求地圖資源。
2.8 商業(yè)解決方案
在調(diào)研過程中,發(fā)現(xiàn)一家專業(yè)制作室內(nèi)地圖的公司,記錄下來備用。
公司名為蜂鳥云(不是那個送外賣的哦),經(jīng)過與商務(wù)溝通,了解到他們是按面積階梯性收費(fèi),綜合起來也不是很貴,而且滿足離線部署這一項很符合我們的業(yè)務(wù)需求,但由于地圖數(shù)據(jù)不受自己的控制,最終舍棄了這個方案。(這不屬于商業(yè)秘密嗎?如有違反,請聯(lián)系本人侵刪。)
需求方提供標(biāo)準(zhǔn)CAD文件,由他們繪制底圖,這個就是按面積收費(fèi)的;地圖數(shù)據(jù)部署在云服務(wù)上,可以無限次編輯,下載,離線部署。
哦,說一下他們的地圖坐標(biāo)系,支持坐標(biāo)系轉(zhuǎn)換,支持大部分坐標(biāo)系。室外是地理坐標(biāo)系 WGS 84(4326),室內(nèi)是投影坐標(biāo)系。
商業(yè)上來說,這家服務(wù)真的可以考慮。
以上,為在項目開發(fā)中用到的 開源GIS解決方案的大體框架。
總結(jié)
以上是生活随笔為你收集整理的开源GIS解决方案,暨GeoServer+OpenLayer结合开发总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Security3源码分析
- 下一篇: 在WordPress文章中插入表格的四种