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.mzph.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…

部署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&#…

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…

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"; }…

axios使用sm2加密数据后请求参数多了双引号解决方法

axios使用sm2加密数据后请求参数多了双引号解决 背景问题描述解决过程 背景 因项目安全要求,需对传给后端的入参加密,将请求参数加密后再传给后端 前期将axios降低到1.6.7后解决了问题,但最近axios有漏洞,安全要求对版本升级&…

【Qt 初识 Test】用图形化和代码的方式实现简单的Qt程序

文章目录 1. 通过图形化的方式实现🍎2. 通过代码的方式实现 1. 通过图形化的方式实现🍎 在界面创建出一个控件,显示 hello world,通过拖拽的方式实现; widget.ui文件如下:🔍 生成的 ui_widget.…

【mybatis】mybatisX插件概述

一、主要功能 智能补全与提示 MyBatisX 可以智能地提示和补全 SQL 语句中的关键字、表名、列名等信息,从而显著提高开发效率。代码生成器 虽然 MyBatisX 本身可能不直接提供一个完整的、独立的代码生成器,但它可能集成了或支持与其他代码生成工具&#…

卤味江湖中,周黑鸭究竟该抓住什么赛点?

近年来,卤味江湖的决斗从未停止。 随着休闲卤味、佐餐卤味等细分赛道逐渐形成,“卤味三巨头”(周黑鸭、绝味食品、煌上煌)的牌桌上有了更多新对手,赛道变挤了,“周黑鸭们”也到了转型关键期。 这个夏天&a…

MySQL字符串相关数据处理函数

目录 1. 转大小写 2. 截取字符串 sunstr 3. 获取字符长度 4. 字符串拼接 concat 5. 去掉空白 trim 1. 转大小写 转大写:upper() 转小写:lower() 虽然MySQL不严格区分大小写,但是我们还是需要掌握这种大小写的操作以方便学习其他…

Nessus相关

tenable 1 安装nessus scanner 1 )安装nessus scanner: 方法一 curl -H X-Key: xxxxx https://cloud.tenable.com/install/scanner?namescanner-name&groupsscanner-group | bash方法二: **# for ubuntu, its https://www.tenable.com/downloads/api/v1/pu…

Google登录时人机身份验证的图片类型和通过的经验建议,以及一些常见问题

很多朋友在登录谷歌账号时,都遇到过要求人机身份验证的步骤,而且有一些时候人机身份验证这个步骤很让人纠结,甚至压根就出不来具体的验证图片,或者花了十几分钟、几十分钟都过不去。 所以今天GG账号服务就来为您解析一下谷歌登录…