WebGIS基礎原理

該部分內容與部分插圖、學習框架的主要參考的網站與博主如下(也趁機分享給大家):

OSGeo開源WebGIS在線教程:http://webgis.cn/
OSGeo《地理信息系統原理》:https://www.osgeo.cn/gis-tutorial/index.html
OSGeo《Python與開源GIS》:https://www.osgeo.cn/pygis/index.html
博客園李曉暉:http://www.cnblogs.com/naaoveGIS/
GitHub/知乎/公眾號 作者giscafer:https://github.com/giscafer;作者小專欄:https://xiaozhuanlan.com/webgis
GitHub博主Tek Kshetri:https://github.com/iamtekson
GitHub博主Emmanuel Jolaiya:https://github.com/jeafreezy
其他:https://github.com/petedannemann/gis-programming-roadmap/blob/master/README.md
https://medium.com/geekculture/web-gis-development-starter-guide-e9ecd32e7fad

還包括一些公眾號推送,包括老靳的WebGIS:#從0開始的WebGIS (qq.com),giscafer公眾號文章:認識 WebGIS (qq.com),測繪數據分析:WebGIS 開發人員的學習指南 (qq.com)等。

1、 WebGIS定義

WebGIS可以拆分為Web+GIS。Web按照我們一般人的理解就是網頁、網站,但是這只是我們看到的最表面的東西,它更是分布式圖形信息系統。而GIS即是地理信息系統,GIS被定義為由計算機軟硬件支持和不同方法組成的系統,該系統被設計用來進行空間數據等的采集、管理、處理、分析、建模和顯示,以便解決復雜的規劃和管理問題。

Web是一種基于超文本和HTTP的、全球性的、動態交互的、跨平臺的分布式圖形信息系統,由于 HTTP 協議采用基于C/S(Client/Server)的請求/應答機制,具有較強的用戶交互能力,可以傳輸并在瀏覽器上顯示多媒體數據。而GIS中的信息主要是需要以圖形、圖像方式表現的空間數據,用戶通過交互操作,對空間數據進行查詢分析。所以,WebGIS就是利用Web技術來擴展和完善地理信息系統的一項技術,人們基于WebGIS可以利用Web來實現空間數據的采集、處理、分析和顯示等。

OSGeo將WebGIS定義為:一個基于超文本傳輸協議的B/S模式(Browser/Server,瀏覽器/服務器模式)分布式計算機應用系統,在Internet或Intranet環境下存儲、管理、分析、發布和共享地理信息;并且其將WebGIS看作是Network GIS和Internet GIS的一個子集。

2、 WebGIS特點

主要特點是:面向對象、分布式、可互操作。

開放性:WebGIS是一個開放的系統,可以實現數據的客戶端共享、跨平臺運營、容易集成;不僅僅可以實現不同來源、尺度、格式的地理數據的共享,還可以實現與數據庫系統等的集成,支持JavaScript、Python、Java等基礎,支持c/s模式。

網絡適宜性:WebGIS更適合在萬維網中運行,共享空間數據,降低系統的數據分發、運維成本。

支持數據分發和分布式處理:GIS服務器為用戶提供地理數據目錄服務、地理數據訪問服務、地理空間分析服務、地理模型系統服務和地理空間可視化服務。通過互操作技術,處理過程可以由多個GIS服務器來協調和完成,這些服務器共享分布的數據對象,并在多個不同的平臺上協同運行,以最大限度地利用網絡資源(http://webgis.cn)。

3、 WebGIS的組成/架構

簡單來說,WebGIS架構如下圖所示,主要是包括三層:數據層(數據庫層)、邏輯層(地圖服務器中間層)、客戶端(瀏覽器)。

插圖來源公眾號:giscafer

在這里插入圖片描述

4、WebGIS優勢

平臺獨立性:基于瀏覽器實現訪問和分析

更廣泛的準入:同時訪問不同服務器的多個數據

降低系統成本:不需要專業的GIS軟件、學習和維護成本低

操作更簡單:web瀏覽器操作復雜性更低

計算負載均衡高效:相比傳統的GIS軟件依賴用戶的電腦處理器性能,WebGIS更加充分利用網絡資源

5、主要開源WebGIS(主要內容源于OSGeo)

相比于大家比較熟悉的開源GIS桌面軟件(QGIS、SAGA、GeoDa等),目前比較流行的服務器端軟件包括Geoserver、MapServer和QGISSERVER,以及開源的GIS數據庫項目,如PostGIS/PostgreSQL空間數據庫,此外還有一些開源項目,如數據轉換工具(如GDAL/OGR)和地圖投影算法庫(如Proj和GeoTrans),這大多數軟件都得到了osgeo的支持。

而從WebGIS的角度來看,開源工具可以分為兩大類:組件產品和全棧產品。組件產品可以簡單理解為該軟件是一個軟件單元,安裝過程不捆綁安裝其他的,而全棧產品安裝使用中需要捆綁安裝其他軟件單元。

5.1 組件產品

MapServer(http://www.mapserver.org)

MapServer是一個用于在Web上發布空間數據和創建交互式地圖應用程序的開源平臺。它自20世紀90年代中期出現以來,被認為是成熟穩定的,并不斷發展。其主要關注點是從多個層生成地圖,包括基礎圖像和空間數據集。此外,還提供智能標簽,包括先進的排版和布局、碰撞檢測;可以讀取和提供各種格式的空間數據,包括Shapefile、WMS、GDAL、PostGIS和GeoTIFF;常用于生成地圖切片及其MapCache擴展;擁有支持各種語言的應用程序開發的庫,包括Python、Perl、Ruby、Java和PHP。

PostGIS(http://postgis.net/)

PostGIS是支持空間查詢的PostgreSQL數據庫的擴展。PostgreSQL既是關系數據庫又是對象數據庫,被廣泛認為是最先進的開源數據庫,類似于Oracle。PostGIS支持各種空間查詢,包括鄰近度、半徑、邊界框、碰撞/重疊檢測等。在SolVES等生態或地理模型中也經常使用。

Leaflet(http://leafletjs.com/)

Leaflet是一個側重于前端用戶界面的JavaScript庫,它支持多個基本層和幾何圖形類型的組合,并涵蓋了與OpenLayers類似的領域,但功能略有減少。其相對于OpenLayers的優勢在于它對移動設備的出色支持、巨大的產品價值、簡潔的極簡主義設計以及對性能的強烈關注。

5.2 全棧產品

以下產品以“堆棧”或“捆綁”的形式分發,它們是模塊化產品的預配置組合。有些在添加配置層和基礎層之后可以按原樣使用,所有這些都可以進一步擴展以創建自定義應用程序。

GeoServer(http://geoserver.org/display/GEOS/Welcome)

Geoserver主要基于Java語言,其提供了在面向服務的體系結構中創建和編輯地理空間數據以及提供地圖的基本功能;使用OpenLayers模塊并提供和實現Web地圖服務(WMS)標準;使用GeoTools框架,該框架涵蓋了MapServer的一小部分功能。與Geoserver本身一樣,該框架也是用Java編寫的。Geoserver主要吸引習慣使用Java工具和平臺的開發人員。

GeoDjango(http://geodjango.org)

GeoDjango是Django應用程序框架的一組空間擴展。Django主要由Python編寫,是使用Python構建Web應用程序的最流行的通用框架之一。與GeoMoose或MapGuide不同,它不提供開箱即用的應用程序,而是一組精心設計的構建塊,用于構建自定義應用程序。與上面描述的一些其他堆棧產品不同,它對堆棧中將使用哪些其他地理空間工具的假設較少,并通過一系列設計清晰、文檔齊全的API提供集成點。它可能會吸引那些希望在構建應用程序時有更多選擇和控制的開發人員,以及那些更喜歡使用Python語言的開發人員。

MapFish(http://mapfish.org)

MapFish是來自Python社區的另一個堆棧產品。它基于(Python)Pylons框架,以及(基于Java的)OpenLayers和ExtJs框架。與GeoDjango不同,它提供了一個簡單的開箱即用的應用程序,可以進行定制和擴展;還支持通過插件在Rails和PHP中進行開發。它提供了一個干凈、緊湊的起點,可以很容易地在各種語言中擴展。與GeoDjango相比,它的優勢在于為開發人員提供了更多的選擇,因此他們可以更快地開始使用。它吸引具有Python或JavaScript經驗的開發人員,以及重視其干凈、緊湊設計的Rails/PHP開發人員。

6、WebGIS學習路線

全部內容見公眾號

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/45185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/45185.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/45185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DSC主備歸檔報錯

先看一個報錯: 2024-07-10 22:12:21.725 [ERROR] database P0000003511 T0000000000000003696 rafil_list_overlap_consecutive_check failed, rfil(DMDATA/data/DSC02/arch/ARCHIVE_LOCAL1_0x57843343_EP1_2024-07-10_20-44-40.log)->next_seq(2901) > nex…

mysql 8.0.37 客戶端在centos7安裝順序

8.0.37安裝客戶端順序為 yum localinstall mysql-community-libs-compat-8.0.37-1.el7.x86_64.rpm #第二步要加 --nodeps --force 參數 rpm -ivh mysql-community-libs-8.0.37-1.el7.x86_64.rpm --nodeps --force rpm -ivh mysql-community-client-plugins-8.0.37-1.el7.x8…

如何用CSS3畫一個三角形?

要用 CSS3 畫一個三角形,可以利用元素的邊框和透明邊框的特性來實現。以下是一個簡單的示例代碼: .triangle {width: 0;height: 0;border-left: 50px solid transparent; /* 左邊框為透明,控制三角形的左斜邊 */border-right: 50px solid tr…

部署Harbor倉庫

本章內容: 安裝docker-ce部署harbor倉庫上傳和拉取 1.安裝docker 1)拉取源碼 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2)安裝docker-ce yum -y install docker-ce 3&#…

【TS】Typescript 的類

TypeScript 是 JavaScript 的一個超集,它添加了可選的靜態類型和基于類的面向對象編程。在 TypeScript 中,類是一種模板,用于創建對象。通過類,你可以封裝對象的屬性(數據)和方法(函數&#xff…

C++入門到進階(圖文詳解,持續更新中)

C入門到進階(圖文詳解,持續更新中) 目錄 C入門到進階(圖文詳解,持續更新中) 數據 數據類型 基本數據類型/內置數據類型 C常用運算符 賦值運算符 關系運算符 邏輯運算符 雜項運算符 數據的本地化…

第二課:使用域名dns ping通www.baidu.com

需要一臺dns服務器,實現域名解析,把對應的網址變為Ip地址。 首先按照之前博客的配置,自動分配給PC1和PC2的IP地址等相關配置。 然后增加一臺server交換機連接到交換機上,配置好ip地址,192.168.1.100。在dnsServer中。…

7.11日學習打卡----初學Redis(六)

7.11日學習打卡 目錄: 7.11日學習打卡一. redis事務事務的概念與ACID特性Redis事務三大特性Redis事務執行的三個階段Redis事務基本操作 二. redis集群主從復制主從復制環境搭建主從復制原理剖析 哨兵監控哨兵監控環境搭建哨兵工作原理剖析 故障轉移Cluster模式Clust…

c++初階知識——類和對象(1)

目錄 1.類和對象 1.1 類的定義 1.2 訪問限定符 1.3 類域 2.實例化 2.1 實例化概念 2.2 對象大小 內存對齊規則 3.this指針 1.類和對象 1.1 類的定義 (1)class為定義類的關鍵字,Stack為類的名字,{}中為類的主體&#xf…

達夢數據庫中的線程和進程

達夢數據庫中的線程和進程 在達夢數據庫中,線程和進程的概念與操作系統中的定義類似,但有一些特定的實現細節和用途。以下是達夢數據庫中線程和進程的一些關鍵點: 進程(Process): 在達夢數據庫中&#x…

django的增刪改查,排序,分組等常用的ORM操作

Django 的 ORM(對象關系映射)提供了一種方便的方式來與數據庫進行交互。 1. Django模型 在 myapp/models.py 中定義一個示例模型:python from django.db import modelsclass Person(models.Model):name models.CharField(max_length100)age…

mysql數據庫被偷家,數據全部丟失。還勒索我給他比特幣

歹徒留下的勒索信息。 解決辦法: 1、設置ip白名單, 2、端口不要使用默認端口,隨便換個端口就行。 3、密碼設置復雜一點。

【Java16】多態

向上類型轉換 對于引用變量,在程序中有兩種形態:一種是編譯時類型,這種引用變量的類型在聲明它的時候就決定了;另一種則是運行時類型,這種變量的類型由實際賦給它的對象決定。 當一個引用變量的編譯時類型和運行時類…

【Pytorch】Conda環境pack打包遷移報錯處理

文章目錄 Anaconda虛擬環境打包一、源電腦的環境打包1.安裝conda-pack工具2.確定環境3.打包環境4.將打包環境拷貝到U盤 二、環境遷移到目標電腦上三、異常處理pip install -e. 導致無法pack→忽略管理的文件已經被刪除或者被覆蓋→壓縮成tar注意 重新激活環境 Anaconda虛擬環境…

14 - matlab m_map地學繪圖工具基礎函數 - 一些數據轉換函數(一)

14 - matlab m_map地學繪圖工具基礎函數 - 一些數據轉換函數(一) 0. 引言1. 關于m_ll2xy和m_xy2ll2. 關于m_lldist3. 關于m_xydist4 關于m_fdist5 關于m_idist6. 總結 0. 引言 通過前面篇節已經將m_map繪圖工具中大多繪圖有關的函數進行過介紹&#xff0…

Nuxt3封裝網絡請求 useFetch $fetch

前言: 剛接觸、搭建Nuxt3項目的過程還是有點懵的,有種摸石頭過河的感覺,對于網絡請求這塊,與之前的Vue3項目有所區別,在Vue項目通常使用axios這個庫進行網絡請求,但在Nuxt項目并不推薦,因為有內…

RK3568平臺(顯示篇)主屏副屏配置

一.主屏副屏配置 目前在RK3568平臺上有兩路HDMIOUT輸出,分別輸出到兩個屏幕上,一路配置為主屏,一路配置為副屏。 硬件原理圖: &hdmi0_in_vp2 {status "okay"; };&hdmi1_in_vp0 {status "okay"; }…

【JAVA入門】Day15 - 接口

【JAVA入門】Day15 - 接口 文章目錄 【JAVA入門】Day15 - 接口一、接口是對“行為”的抽象二、接口的定義和使用三、接口中成員的特點四、接口和類之間的關系五、接口中新增的方法5.1 JDK8開始接口中新增的方法5.1.1 接口中的默認方法5.1.2 接口中的靜態方法 5.2 JDK9 開始接口…

Pandas實戰指南:any()函數深度解析與高效應用

Pandas實戰指南:any()函數深度解析與高效應用 引言 在數據分析和處理過程中,經常需要快速檢查數據集中是否存在滿足特定條件的元素。Pandas庫中的any()函數正是這樣一個強大的工具,它可以幫助我們沿著指定的軸檢查是否至少有一個元素滿足某…

Transformer重要論文與書籍 - Transformer教程

近年來,人工智能領域中的Transformer模型無疑成為了炙手可熱的研究對象。從自然語言處理(NLP)到計算機視覺,Transformer展現出了前所未有的強大能力。今天,我們將探討Tra在當今的人工智能和機器學習領域,Tr…