利用开源工具创建WEBGIS应用

在本文中,我们将大致说明利用开源工具如何与服务器交互以构建交互式或动态 Web GIS。 WebGIS 应用程序已成为展示地理数据的重要模式。我们现在拥有允许用户交互的机制,以便用户可以选择数据,甚至修改或添加新数据。

图片

什么是WEBGIS?

   通过网络地图即我们理解的网络上的地图的发布。WEBGIS一种允许用户通过网络查看、处理和修改数据的地图模式。这肯定需要与服务器进行某种类型的通信。

假设地理数据存储在数据库中(PostGIS、MySQL...),尽管客户端也可以支持 GIS 数据的任何类型的格式(shp、geoTIFF...),但webgis数据查询主要是通过两种方法进行(利用桌面或移动端访问服务器上的地图服务也可以认为是WEBGIS的一种特殊形式):

  1. WMS、WFS、WCS 查询地图服务器。

  2. 使用 HTTP 连接和请求服务器。

    图片

数据库的作用:

   任何应用程序的核心都是数据。有多种类型的格式和方法来保存和处理该数据。最常见的是,我们在服务器上有一个数据库,负责提供数据。使用地理数据库有几个原因,例如:

  1. 当数据定期更新时。海上浮标发送的波高或飞机、船舶、车辆或人员的地理位置等数据需要不断更新。

  2. 数据量大。如果我们有少量数据,我们可以将其保存为传统的 GIS 格式,例如 shp 或 GeoJSON,但如果数据量非常大,则不切实际。

  3. 数据访问控制。我们需要根据用户配置文件来控制数据访问。并非所有用户都可以访问或修改所有数据。

使用最广泛的空间数据库可能是PostGIS。它是一个经常使用的 PostgreSQL 扩展,因为它是GeoServer等服务的标准。GeoServer+PostGIS 与OpenLayers或Leaflet等 JavaScript 库的结合是创建基于免费软件的 WEB GIS 架构是常见方法。我们可以使用的另一个数据库是MySQL。该数据库可能是使用最广泛的数据库之一 。然而,对于地理数据,传统上它被归入 PostGIS。

通过使用 GeoServer 或 Mapserver 等服务器进行交互

按照前面的方案,我们看到数据库提供由地图服务器(例如GeoServer或MapServer)处理的资源。

数据可以由为我们提供WMS、WFS或WCS服务的地图服务器进行处理。WFS 客户端可以下载矢量数据供其使用,因此它可以操纵该数据来执行空间分析和其他操作。地图服务器(Geoserver 或 Mapserver)将充当数据库和用户之间的中介。

这具有明显的优点:有效、易于处理和使用。但它也有一些缺点:地图服务器提供GML文件,这是OGC标准。尽管有过滤实体的机制,但如果该文件是包含大量数据的地图,则速度可能会很慢。在此配置中,服务提供商负责配置数据。

作为前一种情况的替代方案,用户可以直接访问服务器上托管的数据并使用 HTTP 与其建立通信。这种方法的优点是数据查询的灵活性。在以下部分中,我们将分析使用 HTTP 的可能架构。

通过 HTTP 进行交互

HTTP 是一种协议,定义客户端和 Web 服务器之间的通信规则。客户端向服务器发送 HTTP 请求。服务器以请求的信息(网页、文件、多媒体资源等)进行响应。

图片

HTTP请求有以下几种方法:

  • GET:获取资源。

  • POST:向服务器发送数据。

  • PUT:更新资源。

  • DELETE:删除资源。

客户端工具

我们可以考虑经典的情况,使用 HTML、CSS 和 JavaScript 来构建用户界面,并使用Leaflet或OpenLayers来构建地图。此外, React或 Angular等框架可用于为应用程序提供结构。

在此架构中,客户端向包含地理空间数据的服务器(即数据库)发送 HTTP 请求。该服务器处理数据并以 JSON 格式返回。客户端接收到的数据通过OpenLayers或者Leaflet进行渲染。CRUD(创建、读取、更新、删除)操作是使用 POST、PUT 或 DELETE 请求完成的。

作为这种“经典”情况的替代方案,可以使用Axios或Fetch发出 HTTP 请求。

  • Axios 是一个基于 Promise 的 Node.js 和浏览器 HTTP 客户端。

  • Fetch 是一个 JavaScript 函数,用于从浏览器发出 HTTP 请求(例如 GET、POST、PUT、DELETE)。

服务器端工具

在服务器端,我们可以根据我们使用的编程语言找到以下几种可能性。

基于 JavaScript 的解决方案

PostGIS + Node (Express) + Leaflet-React / OpenLayers

在这种情况下,我们可以将Node.js与Express结合使用。

您可以在下图中看到该架构的示意图:

图片

本例的工作流程如下:

  1. React 客户端通过 HTTP 请求(Axios、Fetch)从 Express 服务器请求地理空间数据。

  2. Express服务器接收请求并查询PostGIS数据库。

  3. PostGIS 数据库响应请求的数据,该数据通过 HTTP 响应发送回 React 客户端。

  4. React 客户端使用接收到的数据通过 Leaflet 渲染地图。

所有工具都基于 JavaScript,因此您无需学习其他编程语言。

此选项非常适合创建单页应用程序 (SPA)。允许与服务器进行有效的交互。

基于Python的解决方案

PostGIS + Django 和 GeoDjango + Leaflet/OpenLayers

Django是一个高级 Web 框架,可以快速开发安全且可维护的网站。另一方面,  GeoDjango提供了用于地理空间数据的管理和可视化的特定工具。

基于PHP的解决方案

PostGIS + PHP + Leaflet /OpenLayers

超文本预处理器PHP 是一种服务器端脚本语言,可以嵌入到传统的 HTML 页面中。

  • PHP 可以在大多数 Web 服务器和所有操作系统上使用。

  • PHP 是免费软件。

  • PHP 在服务器端工作。因此,我们需要一台服务器,或者在我们的计算机上有一个像 Xampp 这样的服务器,可以解释 php 脚本。

  • PHP 允许您制作动态网页,其中部分内容是在调用网页时在服务器上生成的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/331355.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博客说明 5/12~5/24【个人】

博客说明 5/12~5/24【个人】 前言版权博客说明 5/12~5/24【个人】对比最后 前言 2024-5-24 13:39:23 对我在2024年5月12日到5月24日发布的博客做一下简要的说明 以下内容源自《【个人】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作…

嵌入式单片机启动地址映射关系

一、内核只会从0地址启动 1.0地址第一个字是sp栈指针,第二个字是Reset_Handler入口,参考图1中启动代码中的中断向量表。具体使用流程参考图2(参考自野火) 图1 图2 2.0地址映射以后,软件上使用0地址访问的空间是映射到的器件的空间 3.0地址映射只会影响单个器件上的地址,…

轻量级 K8S 环境 安装minikube

文章目录 操作系统DockerDocker CE 镜像源站使用官方安装脚本自动安装 (仅适用于公网环境)安装校验Docker代理docker permission denied while trying to connect to the Docker daemon socket minikubekubectl工具minikube dashboard参考资料 操作系统 …

AI大模型探索之路-基础篇5:GLM-4解锁国产大模型的全能智慧与创新应用

目录 前言一、GLM4大模型总体概述二、GLM4和GPT4功能对比三、GLM4和GPT4性能对比1、基础能力(英文)2、指令跟随能力3、对齐能力4、长文本能力5、多模态-文生图 四、GLM-4 ALL Tools1、文生图2、代码解释器3、网页浏览4、Function Call5、多工具自动调用 …

23种设计模式(持续输出中)

一.设计模式的作用 设计模式是软件从业人员长期总结出来用于解决特定问题的通用性框架,它提高了代码的可维护性、可扩展性、可读性以及复用性。 二.设计模式 1.工厂模式 工厂模式提供了创建对象的接口,而无需制定创建对象的具体类,工厂类…

HarmonyOS之ArkUI布局设计常见细节

这里写目录标题 1. Button设置带有渐变色的背景图片无效1.1 问题分析1.2 成功案例 2. 路由跳转失败2.1 问题分析 1. Button设置带有渐变色的背景图片无效 1.1 问题分析 说明:设置颜色渐变需先设置backgroundColor为透明色。 Button($r(app.string.login), { type…

【机器学习】机器学习与大型预训练模型的前沿探索:跨模态理解与生成的新纪元

🔒文章目录: 💥1.引言 ☔2.跨模态理解与生成技术概述 🚲3.大型预训练模型在跨模态理解与生成中的应用 🛴4.前沿探索与挑战并存 👊5.未来趋势与展望 💥1.引言 近年来,机器学习领…

解决Flutter位于悬浮窗口时,应用Logo不更新问题

问题描述 我已经更换了应用Logo,但是发现应用处于悬浮窗口时,logo还是更改之前的?下面的图片只是示意。 解决方案 终端命令 rm -rf ~/Library/Developer/Xcode/DerivedData2.xcode视图内解决 先在顶部找到 Xcode --> Setting --> Lo…

代码随想录算法训练营第十七天(py)| 二叉树 | 513.找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造二叉树

513.找树左下角的值 力扣链接 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 思路 层序遍历 层序遍历之后,取最后一个数组的第一个元素 class Solution:def findBottomLeftValue(self, root: Optional[TreeNode]) -> …

深入解析编程逻辑中的关键字与逻辑运算

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、认识关键字及其重要性 二、逻辑运算的关键字 1. and、or 和 not 的运用 2. 逻辑运算的…

世界上首位AI程序员诞生,AI将成为人类的对手吗?

3月13日,世界上第一位AI程序员Devin诞生,不仅能自主学习新技术,自己改Bug,甚至还能训练和微调自己的AI模型,表现已然远超GPT-4等“顶流选手”。 AI的学习速度如此之快,人类的教育能否跟上“机器学习”的速…

【C++算法】BFS解决单源最短路问题相关经典算法题

1.迷宫中离入口最近的出口 首先我们可以将这道题目简化一下,可以往我们这一章的主题上面来想想。 我们利层序遍历来解决最短路径问题,是最经典的做法。我们可以从起点开始层序遍历, 并组在遍历的过程中记录当前遍历的层数。这样就能在找到出口的时候&…

人工智能应用-实验7-胶囊网络分类minst手写数据集

文章目录 🧡🧡实验内容🧡🧡🧡🧡代码🧡🧡🧡🧡分析结果🧡🧡🧡🧡实验总结🧡🧡 &#x1f9…

缓存IO与直接IO

IO类型 缓存 I/O 缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操作都是缓存 I/O。在 Linux 的缓存 I/O 机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间(用户空间&#xff0…

常见 JVM 面试题补充

原文地址 : 26 福利:常见 JVM 面试题补充 (lianglianglee.com) CMS 是老年代垃圾回收器? 初步印象是,但实际上不是。根据 CMS 的各个收集过程,它其实是一个涉及年轻代和老年代的综合性垃圾回收器。在很多文章和书籍的划分中&…

Hive运行错误

Hive 文章目录 Hive错误日志错误SessionHiveMetaStoreClientql.Driver: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTaskerror: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster Please check …

三、自定义信号和槽函数(无参和有参)

需求: 下班后,小明说请小红吃好吃的,随便吃,吃啥买啥 无参:小红没有提出吃啥 有参:小红提出自己想吃的东西,吃啥取决于一时兴起(emit触发) 思路: 1&#xff…

【高时效通路】

一 高时效通路 1.1 pathchdumper 实时数据拉取、实时数据处理、5分钟微批dump来加速时效性,具体来说: 实时数据拉取(Fetcher):基于Databus Fetcher基建,直接对接F0层实时拉取最新数据,保证该…

电脑键盘如何练习盲打?

电脑键盘如何练习盲打?盲打很简单,跟着我做,今天教会你。 请看【图1】: 【图1】中,红色方框就是8个基准键位,打字时我们左右手的8个手指就是放在这8个基准键位上,F键和J键上各有一个小突起&…

AcW木棒-XMUOJ恢复破碎的符咒木牌-DFS与剪枝

题目 思路 话不多说,直接上代码 代码 /* AcW木棒-XMUOJ恢复破碎的符咒木牌 搜索顺序:从小到大枚举最终的长度 len从前往后依次拼每根长度为len的木棍 优化: 1.优化搜索顺序:优先选择深度短的来搜索,故从大到小去枚…