webgis从基础到开发实践_开源WebGIS教程系列——11.1 GISLite 的开发背景与设计
地理信息門戶可以幫助人們更容易地發(fā)現(xiàn)、訪問和使用地理空間信息, 是地理信息發(fā)布、服務(wù)和共享的重要環(huán)節(jié)。許多國家都很重視地理信息門戶的 建設(shè),把它作為國家空間數(shù)據(jù)基礎(chǔ)設(shè)施(spatial data infrastructure,SDI)的重要組成部分。
GISLite 是地理數(shù)據(jù)發(fā)布的一個項目,使用了本書前面章節(jié)中的一些地理信息與互聯(lián)網(wǎng)方面的一些技術(shù), 做的一個功能簡單的 GIS 數(shù)據(jù)發(fā)布系統(tǒng),以形成一個小型的靜態(tài)網(wǎng)站,方便地理空間數(shù)據(jù)的查看與管理。本書兩位作者負責與參與的數(shù)據(jù)中心與知識服務(wù)項目的工作,很多數(shù)據(jù)就通過這種方式發(fā)布出來。
由于 GISLite 實現(xiàn)之初寫的比較匆忙,沒有經(jīng)過好的設(shè)計;而且其處理的內(nèi)容也比較簡單,后面也沒有再經(jīng)過仔細的修改。而且隨著使用,代碼也在更新之中。在這一章進行說明時,會對設(shè)計的思想與涉及的代碼進行一些說明, 但不會太詳細,以避免代碼更新之后與書的內(nèi)容對應(yīng)不起來。發(fā)布一個版本也許是一種解決的方法,但隨時使用最新的代碼可能更好一點。
項目的地址為 https://www.osgeo.cn/gislite/?, 這個功能也集成到本書的配套網(wǎng)站中, 通過 http://webgis.cn/gislite-index.html 訪問。
先來了解一下開發(fā)的背景與設(shè)計。
11.1.1.?開發(fā)背景
在數(shù)據(jù)中心工作,經(jīng)常會有一些地理空間數(shù)據(jù)需要通過 WebGIS 技術(shù)發(fā)布出來 。前面提到過數(shù)據(jù)共享。現(xiàn)在數(shù)據(jù)共享的工作越來越多。在數(shù)據(jù)共享中,很多的內(nèi)容需要充分公開地向用戶發(fā)布出來。
元數(shù)據(jù)是了解數(shù)據(jù)的一種方式,它包含了數(shù)據(jù)的大小, 各個方面的屬性,以及空間范圍。科學數(shù)據(jù)一般也都有縮略圖,縮略圖也是一個可視化的方式。地理信息方面的一些數(shù)據(jù),就是這種方式來快速了解。使用 WebGIS 技術(shù)可視化效果更好一些, 而且也是一個管理的一個方式,因為所有的數(shù)據(jù)能看見,當用的時候,查找更加方便。
在實際使用 WebGIS 技術(shù)發(fā)布數(shù)據(jù)時,存在有以下的問題:
有大量發(fā)布的需求,需要經(jīng)常進行配置。也需要進行重新的轉(zhuǎn)換;
Mapfile 的編輯修改需要較多專業(yè)的知識;
發(fā)布后需要進行查看,以進行檢查;
數(shù)據(jù)發(fā)布過程需要的步驟較多,需要通過程序工具集成到一起。
11.1.2.?設(shè)計的基本思路
基于以上背景,建立了 GISLite 項目,基本設(shè)計思路如下。
GISLite是一個基于開源GIS技術(shù)開發(fā),使用了靜態(tài)網(wǎng)站形式的GIS數(shù)據(jù)發(fā)布的應(yīng)用程序。基于 MapServer 的服務(wù)器端 GIS 數(shù)據(jù)圖層發(fā)布管理系統(tǒng)。用于解決發(fā)布較多數(shù)量的地圖時的數(shù)據(jù)更新、樣式修改,以及不同樣式組合應(yīng)用的問題。解決辦法是使用 XLSX 文件定義樣式,利用MapServer、MapProxy實現(xiàn)GIS數(shù)據(jù)圖層發(fā)布管理。主要面向GIS開發(fā)人員、學生以及GIS愛好者。
使用 XLSX 是工程實踐的妥協(xié)。作為一種二進制的文件形式,XLSX 的修改無法使用 Git 等代碼管理工具進行歷史的記錄, 也就無法進行回溯與比較,所以并不能算是一種好的記錄方式。在定義 Mapfile 時,其實也可以使用 XML 或 YAML 。YAML 已經(jīng)比較容易編輯修改,但是依然容易出錯。而使用 XLSX 建立好模板,則不需要進行太多的說明,普通的工作人員就可以使用其來修改與更新地圖的樣式。考慮到地圖的樣式可能不必需要太多的代碼級別的仔細核對,所以最終決定了使用這種方式。
盡量實現(xiàn)數(shù)據(jù)源唯一性,使用 XLSX 文件定義樣式。主要實現(xiàn) GIS 數(shù)據(jù)圖層的發(fā)布,但也實現(xiàn)了多源數(shù)據(jù)發(fā)布為單個地圖瓦片, 以及多個圖層發(fā)布為圖層分組的功能。主要有以下特點:
基于 MapServer 、 MapProxy ;
使用開放電子表格格式 XLSX 定義樣式 ;
可用于團隊地理信息數(shù)據(jù)快速發(fā)布管理 。
11.1.3.?靜態(tài)網(wǎng)站的優(yōu)點
在 GISLite 設(shè)計中,參考了靜態(tài)網(wǎng)站程序的方案。
近年來,作為傳統(tǒng)動態(tài)網(wǎng)站基礎(chǔ)架構(gòu)的替代方案,現(xiàn)代靜態(tài)網(wǎng)站生成器日漸盛行。許多導致靜態(tài)網(wǎng)站失敗的限制已不復存在。現(xiàn)在,每周都會有新的靜態(tài)網(wǎng)站生成器發(fā)布。簡單來說,靜態(tài)網(wǎng)站生成器就是一個由輕量的標記語言以及模版語言和元數(shù)據(jù)以及 CSS 預處理器, 加上可以編譯成 JavaScript 的語言構(gòu)成的用來生成靜態(tài) HTML , CSS 和 JS 文件的程序。
以 PHP 應(yīng)用為例,PHP 項目得到廣泛應(yīng)用的一個原因,就是易于部署。項目整體打包在一起,拷貝到約定的目錄下,配置好相關(guān)的一些參數(shù),就可以運行起來。將數(shù)據(jù)與程序獨立出來,程序提供了功能的接口。
靜態(tài)網(wǎng)站有以下優(yōu)點:
訪問速度快
即使是優(yōu)化最好的動態(tài)網(wǎng)站,其性能也無法同靜態(tài)網(wǎng)站相比。并且,對于動態(tài)網(wǎng)站而言,緩存失效非常難以恢復,尤其是需要充分利用 CDN 的分布式緩存。靜態(tài)網(wǎng)站所有內(nèi)容都儲存在 html 里面,不需要后臺服務(wù)器對內(nèi)容進行渲染, 避免了查詢數(shù)據(jù)庫等操作,而且可以充分利用緩存和 CDN 。
非常安全
動態(tài)網(wǎng)站容易遭受蠕蟲攻擊。據(jù)保守估計,超過 70% 的 WordPress 部署容易因為已知漏洞遭受攻擊 (超過23%的 WEB 網(wǎng)站以 WordPress 為基礎(chǔ)構(gòu)建)。網(wǎng)站安全兩大威脅 SQL 注入和 XSS(cross-site scritpting)攻擊, 靜態(tài)站點都可以很好的避免。
易于部署
靜態(tài)網(wǎng)站沒有后端要求,想部署在哪兒就部署在哪兒。服務(wù)器端配置簡單。只需要一個 web 服務(wù)器程序(apache、nginx)。
利于版本控制
靜態(tài)網(wǎng)站是由靜態(tài)文件組成,所以非常容易使用 Git 等工具進行版本控制,非常容易維護。
? ? ?5.易于集成
另外還有一點就是易于集成。在本書的配套網(wǎng)站中就集成了 GISLite 發(fā)布的數(shù)據(jù), 見 http://webgis.cn/gislite-index.html 。
基于以上靜態(tài)網(wǎng)站的特點,適合地圖發(fā)布服務(wù)的應(yīng)用。因為在用戶使用過程中只是瀏覽、查看,不需要更新、刪除等操作, 沒有動態(tài)網(wǎng)站的需求。
11.1.4.?程序配置
GISLite 基于 MIT 協(xié)議開源發(fā)布,托管在 github,下載程序, 源代碼網(wǎng)址為:https://github.com/bukun/GISLite.git 。
在開始之前,首先下載部署 GISLite 的實例,來了解一下。以下的操作都 以 Ubuntu/Debian 為例。
服務(wù)器端的安裝配置
程序的運行需要操作系統(tǒng)與應(yīng)用程序的支持。服務(wù)器端的基本環(huán)境包括本書涉及的 Apache 、 Python3 、MapServer ;Python 語言所需要的環(huán)境包括本書前面章節(jié)介紹的 mappyfile 、 MapProxy , 以及 GDAL 、 Markdown、OpenpyXL 等模塊。
OpenpyXL 是一個Python庫,用于讀取/寫入Excel xlsx / xlsm / xltx / xltm文件。
Markdown 是一種標志語言,Python-Markdown 則用來進行解析處理。
GDAL 是柵格和矢量地理空間數(shù)據(jù)格式的轉(zhuǎn)換器庫,作為一個庫, 它為調(diào)用的應(yīng)用程序提供了所有支持的格式的單個柵格抽象數(shù)據(jù)模型和單個矢量抽象數(shù)據(jù)模型。它還帶有用于數(shù)據(jù)轉(zhuǎn)換和處理的各種有用的命令行實用程序。
GISLite 綜合使用了本書介紹的技術(shù),在安裝使用時首先需要基本的 WebGIS 運行環(huán)境。在操作系統(tǒng)中運行如下命令安裝基本的環(huán)境,由于 mappyfile 未包括在 Debian 源中, 需要使用 Python 的 pip 命令安裝。
sudo apt install -y apache2 php libapache2-mod-fcgid cgi-mapserver mapserver-bin libapache2-mod-phpsudo apt install -y python3-openpyxl python3-mapproxy python3-markdownsudo apt install -y build-essential python3-gdal python3-pippip3 install mappyfile程序安裝與配置
為了進行說明,先將 GISLite 配置安裝一下。
首先獲取源代碼, 使用命令:
git?clone?https://github.com/bukun/GISLite/
GISLite 運行需要有數(shù)據(jù)支持,可以到 http://webgis.cn 網(wǎng)站將示例數(shù)據(jù)下載下來。
有了數(shù)據(jù)之后,需要使用配置文件將說明項目的地址、數(shù)據(jù)的位置等信息。由于 Python 語言的特征,直接將配置信息寫到 .py 文件中。cfg_demo.py 文件是一個包括配置信息的模板文件, 程序運行時需要 cfg.py 文件。將 cfg_demo.py 文件復制為 cfg.py , 并進行相應(yīng)的修改。
下面是一個基本的例子,進行一下簡要說明。
TILE_SVR = '192.168.56.1:8011'GIS_BASE = '/home/bk/opt/geodemo'SITE_WS = '/home/bk/github/GISLite'USER = 'bk'這幾個變量是必須要定義的。
TILE_SVR?聲明服務(wù)器端瓦片服務(wù)的地址與接口,
GIS_BASE?聲明地理空間數(shù)據(jù)庫所在的目錄,
SITE_WS?聲明項目(即代碼庫)的目錄,
USER 聲明進行操作的用戶名,這個用戶需要在 sudo 組內(nèi)。
cfg.py 中的定義是比較靈活的。如果要使用遠程部署,可以將服務(wù)器登陸的信息放到這里:
machines = { 'aliyun3': {'u': 'bk', 'h': '192.168.56.1', 'p': 'passwd', 'ws': 'workspace'},}mach = machines['aliyun3']現(xiàn)在可以在代碼倉庫下運行:
python3?build_gislite.py運行后會生成地圖圖層的 Mapfile ,網(wǎng)站 HTML 文件,以及運行 MapProxy 需要的文件。這會生成一個靜態(tài)的網(wǎng)站。其中 Mapfile 是由主文件與各圖層定義的 Mapfile 組成。
文件生成后,需要使用下面命令將 MapProxy 服務(wù)運行起來:
cd wcs_imgmap/usr/lib/python3-mapproxy/mapproxy-util serve-develop ./mapproxy.yaml -b 0.0.0.0:8013在 Web 瀏覽器內(nèi)打開就可以瀏覽發(fā)布的 GIS 數(shù)據(jù)了 。
以上就是《開源WebGIS》教程系列——11.1 GISLite 的開發(fā)背景與設(shè)計的
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的webgis从基础到开发实践_开源WebGIS教程系列——11.1 GISLite 的开发背景与设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AD中的五种角色
- 下一篇: 上周回顾:艾妮闹春 Sun/HP高层人士