官方快速上手教程:https://developers.arcgis.com/javascript/latest/
官方 API 参考文档:https://developers.arcgis.com/javascript/latest/api-reference
There are multiple options for bringing the ArcGIS Maps SDK for JavaScript
into your app.
ESRI官方提供了如下主要开发方式:
简单来说,ArcGIS Maps SDK for JavaScript
开发可以通过在线引用官网CDN 和 通过下载本地开发包引用的两种形式来进行。(这里本地部署又分别可以通过NPM下载模块,或者在官网下载ArcGIS API for JavaScript开发包。)
而,AMD modules 和 ES 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/
<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>
<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_ESmoduletitle>
<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>
本地部署可以GIS知乎上的这篇教程(很详细):http://zhihu.geoscene.cn/article/3514
这里是简单记录一下:
<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/
首先,打开一个已构建的项目,在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.27title>
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 dev
或npm run serve
npm run build
npm run preview
ArcGIS Maps SDK for JavaScript与流行的框架和构建工具集成的其他示例可在 https://github.com/Esri/jsapi-resources GitHub 存储库中找到。
才疏学浅,作此拙文,仅以之为学习记录分享。@WIT