ArcGIS API for JavaScript部署开发

官方快速上手教程:https://developers.arcgis.com/javascript/latest/

官方 API 参考文档:https://developers.arcgis.com/javascript/latest/api-reference

文章目录

    • 0.前言
    • [1.引入ArcGIS API for JavaScript部署开发](#1.引入ArcGIS API for JavaScript部署开发)
      • [1.1在线引入(via CDN)](#1.1在线引入(via CDN))
      • [1.2本地引入(via NPM & SDK)](#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)

html 复制代码
<!-- 加载官方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):

html 复制代码
<!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):

html 复制代码
<!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引用类似:
html 复制代码
<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:

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:

javascript 复制代码
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:

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
相关推荐
腾讯TNTWeb前端团队35 分钟前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰4 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪4 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪4 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy5 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom6 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom6 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom6 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom6 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom6 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试