ArcGIS API for JavaScript部署开发

news2024/10/5 18:29:24

官方快速上手教程:https://developers.arcgis.com/javascript/latest/
官方 API 参考文档:https://developers.arcgis.com/javascript/latest/api-reference

文章目录

    • 0.前言
    • 1.引入ArcGIS API for JavaScript部署开发
      • 1.1在线引入(via CDN)
      • 1.2本地引入(via NPM & SDK)
    • 2.结语

0.前言

There are multiple options for bringing the ArcGIS Maps SDK for JavaScript into your app.

ESRI官方提供了如下主要开发方式:

  • AMD modules via ArcGIS CDN
  • ES modules via NPM
  • ES modules via CDN
  • AMD modules hosted locally

简单来说,ArcGIS Maps SDK for JavaScript 开发可以通过在线引用官网CDN 和 通过下载本地开发包引用的两种形式来进行。(这里本地部署又分别可以通过NPM下载模块,或者在官网下载ArcGIS API for JavaScript开发包。)
而,AMD modulesES modules 是js模块化开发的规范。具体可以参考如下文章:https://zhuanlan.zhihu.com/p/467991875
https://developer.aliyun.com/article/1271340
[可以了解:AMD modules 和 ES modules 两种都是异步的,都适用于前端(另外CommonJs是同步的,适用于后端;而 UMD是一种设计模式,可以同时适用于前端和后端这两种不同的模块形式)。 |—| 此外,AMD 使用 requirejs 库来实现,可以使用 require 与 define 两种方式加载依赖。而 ESM 是通过设置type=module ,会将加载的文件视为模块文件,识别模块的import语句并加载。且 Vite 已经在dev与打包中使用ESM。]

一般情况下,我们使用的是AMD Modules,而如果是需要使用框架或构建工具(如VUE)来创建一个项目时,官方推荐使用ES Modules。

下图,这里是AMD and ES modules的比较,可以根据自己的开发需求选择开发方式:
在这里插入图片描述
(从版本 4.0 开始,API 已作为 AMD 提供,例如 CDN 使用 AMD 模块。ES 模块在 4.18 版中可用。)
详情可参考:https://developers.arcgis.com/javascript/latest/tooling-intro/

1.引入ArcGIS API for JavaScript部署开发

1.1在线引入(via CDN)

<!-- 加载官方api -->
<link rel="stylesheet" href="https://js.arcgis.com/4.15/esri/themes/light/main.css"/>
<script src="https://js.arcgis.com/4.15/"></script>

通过CDN在线引用,一般用于开发测试。
如下代码为加载官网在线2D地图的示例代码(Build with AMD modules):

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>加载一个地图</title>
    <!-- 加载官方api -->
    <link
      rel="stylesheet"
      href="https://js.arcgis.com/4.15/esri/themes/light/main.css"
    />
    <script src="https://js.arcgis.com/4.15/"></script>
    <style type="text/css">
      html,
      body,
      #container {
        height: 100%;
        width: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
    <script type="text/javascript">
      require([
        "esri/Map",
        "esri/views/MapView",
        "esri/widgets/BasemapToggle",
      ], (Map, MapView, BasemapToggle) => {
        //加载地图底图
        var map = new Map({
          basemap: "hybrid", // 指定地图的底图
        });
        //加载视图
        var mapview = new MapView({
          container: "container", // 指定对应的容器
          map: map,
          center: [106.595706, 29.423058], // 设置地图显示中心(经纬度)
          zoom: 6, // 地图显示比例
        });
        const basemapGallery = new BasemapToggle({
          // 定义一个地图切换控件
          view: mapview,
          nextBasemap: "terrain",
        });
        mapview.ui.add(basemapGallery, "bottom-right");
      });
    </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

如下代码为加载一个官网在线2D地图的示例代码(Build with ES modules):

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>maptest_ESmodule</title>
    <style type="text/css">
      @import "https://js.arcgis.com/4.27/@arcgis/core/assets/esri/themes/dark/main.css";
      html,
      body,
      #container {
        height: 100%;
        width: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
    <script type="module">
      import Map from "https://js.arcgis.com/4.27/@arcgis/core/Map.js";
      import MapView from "https://js.arcgis.com/4.27/@arcgis/core/views/MapView.js";
      import BasemapToggle from "https://js.arcgis.com/4.27/@arcgis/core/widgets/BasemapToggle.js";
      //加载地图底图
      var map = new Map({
        basemap: "hybrid", // 指定地图的底图
      });
      //加载视图
      var mapview = new MapView({
        container: "container", // 指定对应的容器
        map: map,
        center: [106.595706, 29.423058], // 设置地图显示中心(经纬度)
        zoom: 6, // 地图显示比例
      });
      const basemapGallery = new BasemapToggle({
        view: mapview,
        nextBasemap: "terrain",
      });
      mapview.ui.add(basemapGallery, "bottom-right");
    </script>
  </head>
  <body>
    <div id="container"></div>
  </body>
</html>

在这里插入图片描述

1.2本地引入(via NPM & SDK)

  • AMD modules hosted locally

本地部署可以GIS知乎上的这篇教程(很详细):http://zhihu.geoscene.cn/article/3514
这里是简单记录一下:

  1. 首先,在https://developers.arcgis.com/downloads/#javascript页面登录自己的账号,将ArcGIS API for JavaScript压缩包文件下载到本地电脑。(PS:如无账号登录下载,也可以在CSDN或其他平台下载其他他人分享的资源包。这里给个可以下载的网站http://www.xiaobaigis.com/Resource)
  2. 复制下载解压后的文件“…\arcgis_js_api\library”到你的web服务器的地址。(这里以Windows自带的IIS服务器为例,复制完成之后的地址类似于“C:\Inetpub\wwwroot\arcgis_js_api\library”)【补充:启动IIS服务器可参考这篇博客:https://blog.csdn.net/qq_38553355/article/details/98648491】
  3. 修改相关文件配置,将上述路径下的dojo.js和init.js文件内的[HOSTNAME_AND_PATH_TO_JSAPI]修改为自己的网络地址路径。(例如:localhost/arcgis_js_api/library/4.6/ 。 注意,在4.X的API中默认使用的是https协议,如果你未使用则需将前面的"https://"改成“http://” )
  4. 接下来就可以直接引用了,如CDN引用类似:
<link
    rel="stylesheet"
    href="http://localhost/arcgis_js_api/library/4.6/esri/themes/light/main.css"
/>
<script src="http://localhost/arcgis_js_api/library/4.6/init.js"></script>

JavaScript代码部分就按照 AMD modules 规范写就好。
如果需要访问官方提供的3D或其他地图资源和其他开发服务功能,则还需要设置API密钥。具体可参见:https://developers.arcgis.com/documentation/mapping-apis-and-services/security/api-keys/

  • ES modules via NPM

首先,打开一个已构建的项目,在cmd中进入该项目目录,使用如下命令将模块安装到项目中:
npm install @arcgis/core

如果在package.json中写好了依赖包,则可以直接npm install
在这里插入图片描述
(PS:如果npm下载比较慢或者报错,可以使用cnpm或者换源下载)

这里提供一个官网示例项目:https://download.csdn.net/download/m0_53156691/88405539
项目基本目录结构(这里使用了vite打包工具):
在这里插入图片描述
index.html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>layers-scenelayer | Sample | ArcGIS Maps SDK for JavaScript 4.27</title>
  </head>
  <body>
    <div id="viewDiv"></div>
    <script type="module" src="/src/main.js"></script>
  </body>
</html>

main.js:

import Map from "@arcgis/core/Map.js";
import SceneView from "@arcgis/core/views/SceneView.js";
import SceneLayer from "@arcgis/core/layers/SceneLayer.js";
import "./style.css";

......

style.css:

@import "https://js.arcgis.com/4.27/@arcgis/core/assets/esri/themes/light/main.css";
html,
body,
#viewDiv {
  padding: 0;
  margin: 0;
  height: 100%;
  width: 100%;
}

这里简单讲一下vite,一个基于原生 ES-Module 的前端构建工具:在实际开发中,我们一般不会一直敲 vite 命令,而是会将该命令写进 package.json 文件的 scripts 中,如上。 Vite 会默认把我们的代码打包进 dist/assets 文件夹中。

  • 在开发阶段想要把项目跑起来,那就直接执行 npm run devnpm run serve
  • 如果想打包准备部署了,那就执行 npm run build
  • 而如果是在打包之后,想要预览打包出来的代码的效果,那就执行 npm run preview

执行npm run dev:
在这里插入图片描述
在这里插入图片描述

2.结语

ArcGIS Maps SDK for JavaScript与流行的框架和构建工具集成的其他示例可在 https://github.com/Esri/jsapi-resources GitHub 存储库中找到。

才疏学浅,作此拙文,仅以之为学习记录分享。@WIT

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

任务工单发送失败重试方案设计

需求背景&#xff1a; 该系统为一个工单系统&#xff0c;其中任务工单为该系统中的一个模块&#xff1b;任务工单它是需要周期性调度的一种任务类型&#xff1b;可以按照用户配置的时间周期定时性触发的。由于任务需要发送到对应的工作人员上&#xff0c;所以这里需要先对员工进…

学习Origin

最近&#xff0c;在学习Origin软件&#xff0c;网上资源还是很多的。我简单地记录了Origin的一些知识点&#xff0c;来督促自己的学习。 了解一下Origin的作用。 Origin入门教程&#xff08;一&#xff09;&#xff1a;一文学会Origin (sousepad.com) 该文讲述了Origin的一些基…

从城市吉祥物进化到虚拟人IP需要哪些步骤?

在2023年成都全国科普日主场活动中&#xff0c;推出了全国首个科普数字形象大使“科普熊猫”&#xff0c;科普熊猫作为成都科普吉祥物&#xff0c;是如何进化为虚拟人IP&#xff0c;通过动作捕捉、AR等技术&#xff0c;活灵活现地出现在大众眼前的&#xff1f; 以广州虚拟动力虚…

性能测试工具概念指的是什么

性能测试工具是一类用于模拟多种负载情况下应用程序行为的软件。它们可用于测量应用程序的响应时间、吞吐量、资源利用率和稳定性。本文将介绍性能测试工具常见几种类型有哪些! 性能测试工具通常分为以下几种类型&#xff1a; 1、负载测试工具&#xff1a; 这些工具用于模拟多个…

SQL多表设计--一对多(外键)

-- 完成部门和员工的-- 选择当前db03 这个数据库use db03;-- 查看当前选中的数据库select database();-- 创建员工表create table tb_emp (id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment 用户名,password varchar(32)…

【网路安全 --- pikachu靶场安装】超详细的pikachu靶场安装教程(提供靶场代码及工具)

一&#xff0c;资源下载 所用到的工具是&#xff1a; VMware16.0 虚拟机 windows server 2003 phpstudy 2018 pikachu 靶场代码 notepadd 文本编辑器 360zip VMware 虚拟机 参照以下博客安装&#xff0c;如果已安装则忽略 【网络安全 --- 工具安装】VMware 16.0 详细安装过…

滚雪球学Java(42):探索对象的奥秘:解析Java中的Object类

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

如何编写性能测试用例?

前言 写测试用例&#xff0c;是测试绕不开的工作内容&#xff0c;不管是功能、自动化&#xff0c;还是性能。先来回顾一下功能测试用例主要包含的要素&#xff1a;测试用例编号、测试标题、所属模块、测试需求项编号、案例状态、预置条件、优先级、测试输入、操作步骤、预期输…

智慧茶园:茶厂茶园监管可视化视频管理系统解决方案

一、方案背景 我国是茶叶生产大国&#xff0c;茶叶销量全世界第一。随着经济社会的发展和人民生活水平的提高&#xff0c;对健康、天然的茶叶产品的消费需求量也在逐步提高。茶叶的种植、生产和制作过程工序复杂&#xff0c;伴随着人力成本的上升&#xff0c;传统茶厂的运营及…

Scala第十九章节

Scala第十九章节 scala总目录 文档资料下载 章节目标 了解Actor的相关概述掌握Actor发送和接收消息掌握WordCount案例 1. Actor介绍 Scala中的Actor并发编程模型可以用来开发比Java线程效率更高的并发程序。我们学习Scala Actor的目的主要是为后续学习Akka做准备。 1.1 Ja…

递归和分治算法(2)--合并排序和快速排序

目录 一、合并排序相关题 1、合并排序 2、逆序对 二、快速排序相关题 1、快速排序 目录 一、合并排序相关题 1、合并排序 2、逆序对 二、快速排序相关题 1、快速排序 2、中位数选取 三、循环赛日程表 一、合并排序相关题 1、合并排序 合并排序的原理&#xff1a;…

一文读懂|zRAM 内存压缩机制

内存是计算机系统最重要的资源之一&#xff0c;当操作系统内存不足时&#xff0c;进程申请内存将会失败&#xff0c;从而导致其运行异常或者崩溃。 Linux 内核提供 swap 机制来解决内存不足的情况&#xff0c;其原理是&#xff1a; 当系统内存不足时&#xff0c;内核会将进程不…

线性数据—栈、队列、链表

一、栈 Stack&#xff08;存取O(1)&#xff09; 先进后出&#xff0c;进去123&#xff0c;出来321。 基于数组&#xff1a;最后一位为栈尾&#xff0c;用于取操作。 基于链表&#xff1a;第一位为栈尾&#xff0c;用于取操作。 1.1、数组栈 /*** 基于数组实现的顺序栈&#…

记录:Unity脚本的编写2.0

目录 前言控制方法键盘控制鼠标控制虚拟控制器控制 平移和旋转 前言 前面记录了一些简单的unity脚本用来控制unity中对象模型的移动&#xff08;或者不能叫控制&#xff0c;毕竟它是开启之后自己在跑的&#xff09;&#xff0c;那么让模型可以根据用户的操作来进行变化的方法自…

SQL监控工具

什么是 SQL 监控 SQL 监视是跟踪和分析整个 MSSQL 生态系统的过程&#xff0c;以识别性能问题并防止依赖数据库的应用程序变慢和/或遇到中断&#xff0c;它有助于获取有关 SQL 服务器的数据库会话、查询、作业、CPU 和内存资源、群集、配置和可用性组的信息。 为什么 MSSQL 监…

JavaScript 笔记: 函数

1 函数声明 2 函数表达式 2.1 函数表达式作为property的value 3 箭头函数 4 构造函数创建函数&#xff08;不推荐&#xff09; 5 function 与object 5.1 typeof 5.2 object的操作也适用于function 5.3 区别于⼀般object的⼀个核⼼特征 6 回调函数 callback 7 利用function的pr…

TensorFlow入门(十、共享变量)

使用tf.Variable方法创建变量 使用tf.Variable方法创建变量时有两点需要注意: ①一般情况下,使用tf.Variable方法创建的变量都有作用域,也可叫做变量的可用性范围,即在变量所属的模型内,变量的名字是有效可用的。 ②使用tf.Variable方法创建变量时,会生成一个新的变量。如果在一…

激活函数与loss的梯度

激活函数&#xff1a; 最开始由生物学家对青蛙的神经元机制进行研究发现&#xff0c;青蛙的神经元有多个输入x0、x1、x2&#xff0c;响应值是他们加权后的结果&#xff0c;但响应值如果小于阈值&#xff0c;则不会响应&#xff0c;而只有大于阈值时&#xff0c;才会有固定的响应…

LeetCode 1277. 统计全为 1 的正方形子矩阵【动态规划】1613

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

紫光 DDR3 IP核调试

1. IP核简介 直接编写DDR2/DDR3的逻辑工作量不太大&#xff0c;但是涉及到双边延、高速率的读取&#xff0c;时序很复杂。因此一般抖采用IP核实现。紫光的SDRAM IP核为HMIC_H IP。 HMIC_H IP 包括了 DDR Controller、DDR PHY 和 PLL&#xff0c;用户通过 AXI4 接口实现数据的读…