WebGIS开发常用的JS库:VUE/React/Angular对比

Angular:

作用

Angular是一个完整的基于TypeScript的Web应用开发框架,主要用于构建单页Web应用(SPA)。它适用于大型和复杂的项目,具有强大的组件集合和丰富的文档。

架构

Angular采用组件化的方式,每个组件都有一个类或模板,定义了应用逻辑和元数据。它使用HTML编写模板,并支持依赖注入的服务。

以下场景适合使用Angular:

  • 用于开发渐进式 Web 应用程序(PWA)。
  • 用于重新设计网站应用程序。
  • 用于建立基于内容的动态网页设计。
  • 用于创建有着复杂基础架构的大型企业应用程序。

示例:

创建应用使用官方的angular-cli脚手架可以快速创建。
依次执行下边命令即可创建一个名为ng-ol-demo的应用:

npm install -g @angular/cli
ng new ng-ol-demo
cd ng-ol-demo
ng serve

其中ng serveangular-cli脚手架启动应用的意思,ng是angular-cli的缩写,serve是启动,build是构建,更多命令见angular-cli/wiki

同样安装openlayers模块npm i ol,然后编辑.\ng-ol-demo\src\app\app.component.ts 文件:

import { Component, AfterViewInit } from '@angular/core';
// 导入ol相应的包
import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements AfterViewInit {

  title = 'app';
  map = null;

  ngAfterViewInit(): void {
    this.map = new Map({
      target: 'map',
      layers: [
        new TileLayer({
          source: new XYZ({
            url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'
          })
        })
      ],
      view: new View({
        center: [0, 0],
        zoom: 2
      })
    });
  }
}

编辑.\ng-ol-demo\src\app\app.component.html 文件:

<!--The content below is only a placeholder and can be replaced.-->
<div style="text-align:center">
  <h1>
    Welcome to {{ title }}!
  </h1>
</div>
<h2>Angular openlayers demo </h2>
<div id="map" class="map"></div>

最终效果:

如果使用Angular来开发应用,UI库选择有ant-design样式的ng-zorro-antd 和 PrimeNg

React:

作用:

React是一个开源的前端库,主要用于开发用户界面。它灵活且易于上手,不强制执行特定的项目结构。

架构:

React基于JavaScript,通常与**JSX(JavaScript XML)**结合使用。React组件是Web应用的最小构建块,可以在JavaScript中创建。

以下场景下适合使用React:

  • 对于涉及包含导航项,折叠或展开的手风琴分节,可用或不可用状态,动态输入,可用或不可用按钮,用户登录,用户访问权限等的许多组件的应用程序。
  • 对于具有扩展和增长可能的项目,因为 React 组件具有声明性,因此它可以轻松处理此类复杂结构。
  • 当 UI 是网络应用程序的中心时。

示例:

可以通过官方提供的脚手架 create-react-app 来快速创建,npm版本 > 5.2+ 时,可以使用下面方式快速创建react初始化应用(以下命令一行表示单独执行一次)

npx create-react-app react-demo
cd react-demo
npm install
npm start

npm低于5.2版本的话使用以下方式

npm install -g create-react-app
create-react-app react-demo
cd react-demo
npm intall
npm start

创建好react-demo并启动成功就是一个基本的React应用环境了。接下来我们安装openlayers来做个简单的地图展示效果。

安装openlayers模块npm install ol (npm上命名为ol是最新版本,支持ES6 Module分包的版本,openlayers则为老版本),然后编辑src/App.js文件,如下:

import React, { Component } from 'react';
// 导入ol相应的包
import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';
import logo from './logo.svg';
import './App.css';

class App extends Component {

  componentDidMount() {
    // 创建map
    this.map = new Map({
      target: 'map',
      layers: [
        new TileLayer({
          source: new XYZ({
            url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'
          })
        })
      ],
      view: new View({
        center: [0, 0],
        zoom: 2
      })
    });
  }

  render() {
    return (
      <div className="App">
        <div className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Edit <code>src/App.js</code> and save to reload.
          </p>
          <a className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer">
            Learn React
          </a>
        </div>
        {/* 地图DOM容器 */}
        <div id="map" className="map"></div>
      </div >
    );
  }
}

export default App;

样式文件./src/index.css 如下:

body {
  margin: 0;
  padding: 0;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
    "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
    sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

code {
  font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
    monospace;
}
.App-header{
  position: absolute;
  width: 300px;
}
.map { 
  position: absolute;
  left:305px;
  /* height: 400px;  */
  width: 80%;
  height: 100%;
}

运行结果:

Vue.js:

作用:

Vue用于开发用户界面和单页Web应用,是一个开源的MVVM前端JavaScript库。它被称为渐进式框架,易于学习且适用于小型项目。

架构:

Vue的模板语法类似于HTML,允许开发者声明性地定义UI。组件是小巧、自成一体且可复用的,通常使用单文件组件(SFC)。

以下场景下适合使用Vue:

  • 你需要带有动画或交互式元素的 Web 应用程序的开发项目。
  • 无需高级技能即可进行原型制作。
  • 需要与多个其他应用程序无缝集成的应用程序。
  • 更早推出 MVP

示例:

使用vue-cli脚手架可以快速创建一个名为vue-ol-demo的应用:

npm install -g @vue/cli
vue create vue-ol-demo
cd vue-ol-demo
npm run serve

安装openlayers依赖,npm i ol,然后编辑./src/App.vue文件:

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png" class="header">
    <div id="map" class="map"></div>
  </div>

</template>

<script>
// 导入ol相应的包
import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';


export default {
  name: 'app',
  components: {
  },
  mounted(){
    this.map = new Map({
      target: 'map',
      layers: [
        new TileLayer({
          source: new XYZ({
            url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'
          })
        })
      ],
      view: new View({
        center: [0, 0],
        zoom: 2
      })
    });
  }
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
.header{
  position:absolute;
  left:0;
  width:300;
}
.map {
    position: absolute;
    /* height: 400px;  */
    left:305px;
    width: 80%;
    height: 100%;
}

最终效果:

Vue的组件库可以选择ant-design-vue或iView、Element等。

Vue小白教程:

VUE3.0基础教程icon-default.png?t=N7T8https://www.bilibili.com/video/BV1Hs4y1q7zh/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【DC-DC】世微AP5192 LED恒流IC 摩托电动车货车 12-80V 1.5A 有极输入 电源驱动芯片

产品描述 AP5192是一款PWM工作模式,效率高、简单、内置功率MOS管&#xff0c;适用于4.5-100V输入的高精度降压LED恒流驱动芯片。电流1.5A。AP5192可实现线性调光和PWM调光&#xff0c;线性调光脚有效电压范围0.55-2.6V.AP5192 工作频率可以通过RT 外部电阻编程来设定&#xff0…

[经验] 动车盒饭价格2022 #其他#职场发展

动车盒饭价格2022 1、动车盒饭 近年来&#xff0c;随着中国高速铁路的发展&#xff0c;动车盒饭也成为了不可忽视的一份美食。它不仅解决了旅途中的饮食需求&#xff0c;还体现了中国美食文化的多样性和可口。 动车盒饭是一种便捷且美味的餐食&#xff0c;在火车上也不失为一…

胶原蛋白市场研究:预计2029年将达到27亿美元

胶原蛋白是一种白色、无支链的纤维状蛋白&#xff0c;是细胞外间质蛋白质的主要成分&#xff0c;占人体总蛋白质的25%到30%。 按胶原蛋白来源划分&#xff0c;可分为天然胶原蛋白和人工合成的胶原蛋白&#xff0c;后者以重组类人胶原蛋白为主&#xff0c;而重组类人胶原蛋白又可…

失败了,又继续失败了

这是一个普通的老人在小县城坚持写作的故事。与很多人的老年生活不同&#xff0c;78岁的舒绍平每天过着规律的写作生活&#xff0c;不做家务的时候&#xff0c;他便坐在书房&#xff0c;打开笔记本电脑&#xff0c;时断时续地敲字写作。 年轻时&#xff0c;他当过老师&#xf…

五种多目标优化算法(MOJS、MOGWO、NSWOA、MOPSO、NSGA2)性能对比,包含6种评价指标,9个测试函数(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOJS 1.2MOGWO 1.3NSWOA 1.4MOPSO 1.5NSGA2 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…

C++学习Day08之函数模板

目录 前言一、程序及输出1.1 不使用函数模板1.2 使用函数模板1.2.1 自动类型推导1.2.2 显示指定类型 二、分析与总结 前言 C 函数模板是一种通用编程技术&#xff0c;允许您编写通用的函数代码&#xff0c;以适用于不同类型的数据。 一、程序及输出 1.1 不使用函数模板 每一…

【riscv】使用qemu运行riscv裸机freestanding程序

文章目录 1. 运行显示2. 工具准备3. 裸机代码和编译3.1 源码3.2 编译 4. 使用qemu仿真运行riscv裸机程序 1. 运行显示 详见左下角&#xff0c; 运行时串口输出的字符 A ; 2. 工具准备 # for riscv64-linux-gnu-gcc sudo apt-get install gcc-riscv64-linux-gnu# for qemu-s…

【RT-DETR有效改进】大核注意力 | LSKAttention助力极限涨点

一、本文介绍 在这篇文章中,我们将讲解如何将LSKAttention大核注意力机制应用于RT-DETR,以实现显著的性能提升。首先,我们介绍LSKAttention机制的基本原理,它主要通过将深度卷积层的2D卷积核分解为水平和垂直1D卷积核,减少了计算复杂性和内存占用。接着,我们介绍将这一…

记录留下的脚印

记录走过的脚印&#xff01;

【爬虫JS逆向-工具篇】浏览器内存漫游加密参数Hook实战教程

文章目录 1. 写在前面2. 环境搭建2. 加密定位实战 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋友可以关…

数据库的备份模式(完全备份,增量备份,差异备份)

数据库的备份 备份原因 数据的丢失 数据的删除 备份目标 数据的一致性 数据的可用性 备份技术 物理备份/冷备份 直接复制数据库文件&#xff0c;适用于大型数据库环境&#xff0c;不受存储引擎的限制&#xff0c;但不能恢复到不同的MySQL版本。 常用的冷备份工具 ta…

利用iSCSI服务部署IP SAN网络存储服务

一、配置环境&#xff08;Vmware WorkStation虚拟环境&#xff09; 服务端与客户端OS&#xff1a;openEuler 22.03-LTS CPU&#xff1a;1U1C 内存&#xff1a;2G 硬盘&#xff1a;5个SCSI磁盘&#xff0c;其中一个作为系统盘&#xff0c;另外四个配置为RAID5阵列 服务器IP…

Leetcode刷题笔记题解(C++):83. 删除排序链表中的重复元素

思路&#xff1a;链表相关的问题建议就是画图去解决&#xff0c;虽然理解起来很容易&#xff0c;但就是写代码写不出来有时候&#xff0c;依次去遍历第二节点如果与前一个节点相等则跳过&#xff0c;不相等则遍历第三个节点 /*** Definition for singly-linked list.* struct …

实现Slider 滑块组件标记动态变化

实现以上效果&#xff0c;下拉框、slider滑块、按钮都在同一行&#xff0c;设置flex布局后&#xff0c;发现silider滑块最右边的标记数字一直都如下竖着显示&#xff0c;后来通过给源组件的标记区.el-slider__marks-text增加一个宽度后解决该问题。 <template><div>…

Polyspace静态检测步骤

Polyspace 是一个代码静态分析和验证的工具&#xff0c;隶属于MATLAB&#xff0c;用于检测代码中的错误和缺陷&#xff0c;包括内存泄漏、数组越界、空指针引用等。帮助开发团队提高代码质量&#xff0c;减少软件开发过程中的错误和风险。 1、打开MATLAB R2018b 2、找到Polys…

基于java,springboot和vue房屋租赁租房销售平台设计

摘要 在现代城市生活中&#xff0c;房屋租赁市场一直是一个活跃且复杂的领域。随着互联网技术的不断发展&#xff0c;基于Spring Boot和Vue的房屋租赁系统应运而生&#xff0c;旨在提供一个高效、方便、可靠的在线服务平台。该系统利用了前后端分离架构的优势&#xff0c;后端…

护眼台灯哪个品牌质量比较好?五大热门产品点评

护眼台灯作为孩子书桌上的照明神器&#xff0c;因为能起到护眼作用和很好的照明体验&#xff0c;得到了不少的认可。不过如今市场中也有很多劣质台灯&#xff0c;存在各种不足、做工差、选材廉价&#xff0c;导致光线无法起到护眼作用&#xff0c;甚至会引起近视。那么护眼台灯…

说一下 JVM 有哪些垃圾回收算法?

一、标记-清除算法 标记无用对象&#xff0c;然后进行清除回收。 标记-清除算法&#xff08;Mark-Sweep&#xff09;是一种常见的基础垃圾收集算法&#xff0c;它将垃圾收集分为两个阶段&#xff1a; 标记阶段&#xff1a;标记出可以回收的对象。清除阶段&#xff1a;回收被标…

Flutter插件开发指南02: 事件订阅 EventChannel

Flutter插件开发指南02: 事件订阅 EventChannel 视频 https://www.bilibili.com/video/BV1zj411d7k4/ 前言 上一节我们讲了 Channel 通道&#xff0c;但是如果你是卫星定位业务&#xff0c;原生端主动推消息给 Flutter 这时候就要用到 EventChannel 通道了。 本节会写一个 1~…

Fiddler工具 — 18.Fiddler抓包HTTPS请求(一)

1、Fiddler抓取HTTPS过程 第一步&#xff1a;Fiddler截获客户端发送给服务器的HTTPS请求&#xff0c;Fiddler伪装成客户端向服务器发送请求进行握手 。 第二步&#xff1a;服务器发回相应&#xff0c;Fiddler获取到服务器的CA证书&#xff0c; 用根证书&#xff08;这里的根证…