目錄
- ArcGIS Maps SDK for JavaScript簡介
- ArcGIS Maps SDK for JavaScript 4.x 的主要特點和功能
- AMD modules 和 ES modules兩種方式比較
- Vue3中使用ArcGIS Maps SDK for JavaScript的步驟
- 創建 Vue 3 項目
- 安裝 ArcGIS Maps SDK for JavaScript
- 創建地圖組件
ArcGIS Maps SDK for JavaScript簡介
ArcGIS Maps SDK for JavaScript 是由 Esri 公司開發的一款用于構建交互式地圖應用程序的 JavaScript 庫。它提供了豐富的地圖顯示、分析和可視化功能,適用于各種場景。
目前,ArcGIS Maps SDK for JavaScript 提供兩個主要版本:3.x 和 4.x。
- ArcGIS Maps SDK for JavaScript 3.x 版本:
- 3.x 版本是 ArcGIS Maps SDK for JavaScript 的舊版本,一些老的項目中仍在廣泛使用。
- 它是基于 Dojo 框架構建的,提供了強大的二維地圖顯示功能,支持多種地圖服務、圖層、渲染器、符號等。
- 提供了豐富的地圖分析工具和可視化組件,包括緩沖區分析、路徑分析、空間查詢、熱力圖等。
- 3.x 版本已經逐漸被4.x版本取代,官網也逐漸停止了對3.x的維護。
- 在模塊化開發的今天,3.x已經不能適應現在的開發模式,如果沒有老的項目進行維護,我們也不需要去使用3.x了,因此,我們這里重點介紹4.x版本
- ArcGIS Maps SDK for JavaScript 4.x 版本:
- 4.x 版本是 ArcGIS Maps SDK for JavaScript 的最新版本,也是未來的主要發展方向。
- 4.x 版本重新設計了架構,使用現代的 Web 技術,如 ES6、TypeScript,并采用了模塊化的開發方式。
- 它提供了更加靈活和高性能的地圖顯示功能,支持 2D 和 3D 地圖。
ArcGIS Maps SDK for JavaScript 4.x 的主要特點和功能
-
地圖展示功能:
- 支持加載各種底圖,并具有對地圖縮放、平移和旋轉的交互操作。
- 提供豐富的圖層類型,包括矢量圖層、柵格圖層、動態圖層等。
- 支持地圖符號化、標注和注記。
-
地理空間分析功能:
- 提供強大的地理處理和分析功能,如緩沖區分析、空間查詢、路徑分析等。
- 支持地理要素的可視化和渲染,如熱力圖、聚類等。
-
三維地圖功能:
- 提供創建和展示三維地圖的能力,支持傾斜、旋轉和縮放三維場景。
- 支持在三維場景中添加三維模型、地下管網、點云等。
-
用戶交互和導航功能:
- 提供默認的地圖導航控制器,包括縮放控制、導航按鈕和比例尺等。
- 支持自定義用戶交互功能,如地圖點擊事件、拖放等。
-
地圖樣式與配置:
- 支持自定義地圖樣式、符號庫和顏色主題。
- 可以通過配置文件設置地圖的默認視圖、初始范圍和坐標系等。
-
地圖數據和服務集成:
- 支持加載各種數據源,包括地理數據格式(如 GeoJSON、KML、Shapefile 等)和服務(如 ArcGIS Server 服務、WMS 服務等)。
- 支持與 ArcGIS Online 和 ArcGIS Enterprise 進行集成,訪問其豐富的地圖和數據資源。
AMD modules 和 ES modules兩種方式比較
ArcGIS Maps SDK for JavaScript 4.x 提供了兩種方式來加載模塊:AMD modules 和 ES modules(4.17以后的版本支持),兩種加載方式的優缺點如下:
-
AMD modules(異步模塊定義):
- 優點:AMD 是一種用于加載 JavaScript 模塊的異步模塊加載機制。它非常適合于在舊版瀏覽器和遺留系統中使用,可以兼容各種瀏覽器,并具有強大的跨平臺兼容性。
- 缺點:AMD 的語法相對較復雜,使用起來可能更加繁瑣,還需要額外的 AMD 加載器庫來加載模塊。
-
ES modules(ECMAScript 模塊):
- 優點:ES 模塊是 JavaScript 的官方模塊化系統,以簡潔、易于使用和靜態分析等特點而聞名。它使用標準的
import
和export
語法,使代碼更清晰、可維護性更高,同時支持async/await
等現代 JavaScript 功能。 - 缺點:ES 模塊在舊版瀏覽器中可能不被全面支持,需要進行適當的轉換來提供兼容性。
- 優點:ES 模塊是 JavaScript 的官方模塊化系統,以簡潔、易于使用和靜態分析等特點而聞名。它使用標準的
在Vue3中,由于 Vue 3 使用的是現代瀏覽器和 ES6+ 特性,因此,我們推薦使用 ES modules。ES modules 具有更簡潔、易讀的語法,并且與 Vue 3 中的 Composition API 更加相容。
Vue3中使用ArcGIS Maps SDK for JavaScript的步驟
創建 Vue 3 項目
1、新建ArcGISAPIProject文件夾,并用vscode打開
2、打開終端,在終端中輸入npm create vite@latest
創建vite項目,輸入項目名稱vite-vue3-arcgis
,選擇vue框架,并選中JavaScript語音創建項目
3、創建成功后,進入vite-vue3-arcgis
文件夾,并使用npm i
安裝依賴
4、安裝成功后,輸入npm run dev
,運行項目查看基礎框架是否正常
安裝 ArcGIS Maps SDK for JavaScript
在終端中輸入npm install @arcgis/core
安裝ArcGIS Maps SDK for JavaScript
創建地圖組件
在創建地圖組件之前,我們先將框架默認提供的App.vue中的內容刪除,并刪除components文件夾中的HelloWorld.vue組件
1、在src文件夾下的components文件夾中新建ArcGisMap.vue組件,
2、在ArcGisMap.vue組件中的template中新建一個div,設置id屬性為viewDiv,作為地圖的容器,
3、導入需要的地圖模塊;要想在容器中展示地圖,需要導入ArcGis為我們提供的Map和MapView兩個模塊
import Map from '@arcgis/core/Map.js';
import MapView from '@arcgis/core/views/MapView.js';
4、在代碼中創建Map和MapView對象,并配置相關的參數
因為地圖是在div中展示的,所以,我們的代碼需要在onMounted中實現,代碼如下
onMounted(()=>{initArcGisMap()
})const initArcGisMap = () => {const map = new Map({basemap: "topo-vector"});const view = new MapView({center: [-118.80500, 34.02700],zoom: 13,container: "viewDiv",map: map});
}
在這段代碼中,我們首先創建了一個名為 map
的地圖對象:
- 通過
new Map()
創建了一個地圖實例。 basemap: "topo-vector"
表示該地圖使用了ArcGIS為我們提供的topo-vector
底圖,即矢量拓撲地圖。
然后,創建了一個名為view
的地圖視圖對象:- 通過
new MapView()
創建了一個地圖視圖實例。 center: [-118.80500, 34.02700]
表示地圖視圖的初始中心點位置,這里設置的是經度和緯度坐標。zoom: 13
表示地圖視圖的初始縮放級別,數值越大表示越近的縮放級別。container: "viewDiv"
表示地圖視圖將被渲染到具有viewDiv
id 的 HTML 元素中。map: map
表示該地圖視圖將使用上面創建的map
對象作為其地圖實例。
5、在App.vue中加載地圖組件
<template><ArcGisMap></ArcGisMap>
</template><script setup>
import ArcGisMap from './components/ArcGisMap.vue'
</script>
<style scoped>
</style>
此時運行程序,我們發現瀏覽器顯示一片空白,并沒有將地圖加載進來,這是因為我們沒有給div添加寬度和高度,所以顯示為空
6、設置viewDiv的寬度可高度
<style scoped>
#viewDiv {width: 100%;height: 100vh;
}
</style>
運行瀏覽器,可以看到,我們已經將地圖加載進來了
7、清除ArcGIS自帶的ui組件
雖然我們的地圖已經加載出來了,但是我們發現在右側有一個滾動條,將滾動條下拉到底部,我們發現下面有放大、縮小及ArcGIS的相關信息
這是ArcGIS默認自帶的信息,我們可以通過設置view.ui.components = [];
來清除這些信息
在view實例化后面添加這句代碼view.ui.components = [];
即可清除
const initArcGisMap = () => {const map = new Map({basemap: "topo-vector"});const view = new MapView({center: [-118.80500, 34.02700],zoom: 13,container: "viewDiv",map: map});view.ui.components = [];
}
view.ui.components = []
用于移除地圖視圖中的默認 UI 組件
view.ui
表示地圖視圖的用戶界面對象。components
數組中存放了用于顯示默認的 UI 組件,通過將其設置為空數組[]
,實現了移除默認的 UI 組件。
刷新瀏覽器,可以發現,此時我們的瀏覽器就只有一個布滿全屏的地圖了
至此,我們已經在vue3中加載了ArcGIS地圖,好了,這節就先到這里,下面一節我們來詳細的了解下我們這節代碼中的使用的Map和MapView的屬性和方法。