ArcGIS Maps SDK for JavaScript系列之二:認識Map和MapView

目錄

  • Map
    • 創建一個 Map 對象的示例代碼:
    • Map的常用屬性
    • Map的常用方法
  • MapView
    • MapView的常用屬性
    • MapView的常用方法

在 ArcGIS Maps SDK for JavaScript 中,Map 和 MapView 是兩個重要的概念,用于創建和展示地圖應用程序。

Map

Map 表示一個地圖對象,它是地圖應用程序的基礎。Map 可以包含一個或多個圖層(Layer),可以是基礎底圖圖層、矢量圖層、柵格圖層或者任何其他類型的圖層。Map 也可以包含地圖符號化(Symbology)、標注、注記等信息。

創建一個 Map 對象的示例代碼:

const map = new Map({basemap: 'streets-vector'
});

這里的代碼創建了一個包含 ‘streets-vector’ 底圖的地圖對象。

Map的常用屬性

  1. allLayers(圖層)
    • 類型:Collection
    • 描述:地圖中所有圖層的展開集合(包含底圖)
  2. basemap(底圖)
    • 類型:String 或 Basemap 對象
    • 描述:指定地圖的底圖樣式。可以是預定義的字符串(如 “streets”、“satellite”、“topo” 等),也可以是自定義的 Basemap 對象。
  3. ground(地面)
    • 類型:Ground 對象
    • 描述:用于指定地球表面的可視化。Ground 對象可以設置地面的類型,如 “world-elevation”、“world-topobathymetry” 等。
  4. layers(圖層)
    • 類型:Layer 集合
    • 描述:包含當前地圖上的所有圖層。可以通過添加或移除 Layer 對象來調整地圖上的圖層顯示,不包含底圖。
// 創建一個具有默認底圖的地圖對象
const map = new Map({basemap: "streets"
});// 添加一個圖層到地圖上
const layer = new TileLayer({url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"
});
map.layers.add(layer);// 創建一個地圖視圖
const mapView = new MapView({container: "viewDiv ",map: map,zoom: 10,center: [-122.4194, 37.7749]
});

上面的代碼創建了一個具有 “streets” 底圖的地圖對象,然后添加了一個切片圖層,并最后使用 MapView 在一個指定的 HTML 元素中展示地圖。

Map的常用方法

  1. add(layer)(添加圖層)

    • 參數:layer: Layer 對象
    • 描述:將指定的圖層添加到地圖上。可以通過此方法動態添加圖層,并顯示在地圖上。
  2. remove(layer)(移除圖層)

    • 參數:layer: Layer 對象
    • 描述:從地圖上移除指定的圖層。使用此方法可以在運行時移除地圖上的圖層。
  3. findLayerById(id)(根據 ID 查找圖層)

    • 參數:id: String
    • 返回值:Layer 對象
    • 描述:根據指定的 ID 查找并返回地圖上的圖層對象。
  4. findLayersByName(name)(根據名稱查找圖層)

    • 參數:name: String
    • 返回值:Layer[](圖層數組)
    • 描述:根據指定的名稱查找并返回與名稱匹配的圖層對象數組。
  5. removeAll()(移除所有圖層)

    • 描述:從地圖上移除所有的圖層。
  6. destroy()(銷毀地圖)

    • 描述:銷毀地圖對象及其相關資源。使用此方法可以清理地圖對象,釋放內存,特別是在不再需要地圖時。

MapView

MapView 是用于顯示 Map 對象的視圖組件,它負責將地圖渲染到 HTML 頁面上。MapView 提供了用戶與地圖交互的功能,如平移、縮放、旋轉等操作。MapView 還支持添加圖形和彈出窗口,并提供了鼠標事件和交互控制等功能。

創建一個 MapView 對象的示例代碼:

const mapView = new MapView({container: 'viewDiv',map: map,zoom: 10,center: [longitude, latitude]
});

這里的代碼創建了一個 MapView 對象,將其渲染到 id 為 ‘viewDiv’ 的 HTML 元素中,并將前面創建的 Map 對象傳入。還可以設置初始的縮放級別和中心坐標。

MapView的常用屬性

  1. container(容器)

    • 類型:String 或 HTML 元素
    • 默認值:無
    • 描述:指定用于顯示地圖的 HTML 容器元素的 ID 或實際的 HTML 元素。地圖將在該容器中進行渲染。
  2. map(地圖)

    • 類型:Map 對象
    • 默認值:無
    • 描述:指定地圖對象,代表 MapView 的地圖內容。
  3. zoom(縮放級別)

    • 類型:Number
    • 默認值:無
    • 描述:指定地圖的初始縮放級別。可以設置一個介于最小縮放級別和最大縮放級別之間的數字。
  4. center(中心坐標)

    • 類型:Number[]
    • 默認值:無
    • 描述:指定地圖的初始中心點坐標。以經度和緯度的形式表示,如 [longitude, latitude]。
  5. rotation(旋轉角度)

    • 類型:Number
    • 默認值:0
    • 描述:指定地圖的初始旋轉角度,以度數為單位。可以設置一個介于-360到360之間的數字。
  6. constraints(約束條件)

    • 類型:ViewpointConstraints 對象
    • 默認值:無
    • 描述:用于設置地圖的約束條件,如最大縮放級別、最小縮放級別、可見范圍等。

創建 MapView 對象,并配置屬性的示例如下:

// 創建 Map 對象
const map = new Map({basemap: "streets"
});// 創建 MapView 對象,并配置屬性
const view = new MapView({container: "viewDiv", // 將地圖渲染到指定的 HTML 元素中map: map, // 指定要顯示的地圖對象zoom: 10, // 設置初始縮放級別為 10center: [0, 0] // 設置初始中心點坐標為 [0, 0]
});// 添加圖層到地圖
const layer = new TileLayer({url: "https://example.com/path/to/layer" // 設置圖層的 URL
});
map.add(layer);

在上面的代碼中,首先創建了一個 Map 對象,并指定了要使用的底圖(basemap)。然后,創建了一個 MapView 對象,并在配置中設置了以下屬性:

  • container:指定地圖要渲染到的 HTML 容器元素的 ID 或實際的 HTML 元素(這里使用 mapContainer ID 的元素)。
  • map:指定要顯示的地圖對象,即之前創建的 Map 對象。
  • zoom:設置初始縮放級別為 10。
  • center:設置初始中心點坐標為 [0, 0]。

然后,創建了一個圖層對象,并將其添加到地圖上。

MapView的常用方法

1、goTo()(跳轉)
將視圖跳轉到指定的視點。可以指定要跳轉到的視點對象,包括縮放級別、中心點和旋轉角度等。可以使用 options 參數來指定動畫和持續時間等跳轉的選項。
MapView的goto方法是一個非常實用的方法,它可以讓我們將視圖切換到指定的位置并縮放級別。
goto方法的基本語法:
goTo(target, options){[Promise]}
該方法接受兩個參數:

  • target:要查看的目標位置。它可以是Geometry(如點、線或面)、Graphic(地圖上的一個圖形)或任何具有位置信息的對象。
  • options:可選參數,用于指定視圖切換的選項,如動畫過渡、縮放級別等。

goto方法返回一個Promise對象,該對象在視圖切換完成后解析。可以通過.then()方法來處理視圖切換完成后的操作。

使用goto方法將地圖視圖轉到指定位置并進行縮放:

const target = {target: [-118.80500, 34.02700], // 目標位置的經緯度坐標zoom: 13 // 縮放級別
};view.goTo(target).then(() => {// 視圖切換完成后的操作console.log('視圖已切換完成');}).catch((error) => {console.error('切換視圖時發生錯誤', error);});

在上面的代碼中,我們首先創建了一個包含目標位置和縮放級別信息的對象。然后,我們調用view.goTo()方法,并傳遞該對象作為參數。在視圖切換完成后,.then()方法中的回調函數將被調用,可以在其中執行視圖切換完成后的操作。如果切換視圖時發生錯誤,.catch()方法中的回調函數將被調用,可以在其中處理錯誤情況。

這里需要注意,goto方法也可以接受其他選項,如動畫過渡時間、旋轉角度等。可以在options參數中進行配置。詳細的方法和參數說明可以參考ArcGIS API for JavaScript的官方文檔。
2、on()(事件監聽)

  • 參數:Object對象
  • 描述:注冊監聽地圖事件。
    MapView的on方法是一個事件監聽器,可以用于監聽和處理地圖事件。MapView的on方法返回一個Promise對象,可以通過調用該對象的then方法來處理事件。

MapView的on()方法常用的注冊事件如下:

  • “click”:當用戶在地圖上單擊時觸發。
  • “double-click”:當用戶在地圖上雙擊時觸發。
  • “drag”:當用戶在地圖上拖拽時觸發。
  • “mouse-wheel”:當用戶在地圖上使用鼠標滾輪時觸發。
  • “pointer-down”:當用戶在地圖上按下任意指針設備按鈕(鼠標按鈕、觸摸屏等)時觸發。
  • “pointer-move”:當用戶在地圖上移動任意指針設備時觸發。
  • “pointer-up”:當用戶釋放任意指針設備按鈕(鼠標按鈕、觸摸屏等)時觸發。

on方法使用示例代碼如下:

<template><div id="viewDiv"> </div> 
</template><script setup> 
import { onMounted } from 'vue'
import Map from '@arcgis/core/Map.js';
import MapView from '@arcgis/core/views/MapView.js';onMounted(()=>{initArcGisMap()
})const initArcGisMap = () => {const map = new Map({basemap: "topo-vector"});const view = new MapView({ zoom: 4,container: "viewDiv",map: map});view.ui.components = []; const target = {target:[-118.80500, 34.02700],zoom:13}view.goTo(target).then(()=>{// 視圖切換完成后的操作console.log('視圖已切換完成');}).catch((error)=>{console.error('切換視圖時發生錯誤', error);})view.on('click', (event) => {// 處理點擊事件console.log('click事件觸發')})view.on('double-click', (event) => {// 處理雙擊事件console.log('double-click事件觸發')});view.on('drag', (event) => {// 處理拖拽事件console.log('drag事件觸發')});view.on('mouse-wheel', (event) => {// 處理鼠標滾輪事件console.log('mouse-wheel 事件觸發')});view.on('pointer-down', (event) => {// 在地圖上按下任意指針設備按鈕(鼠標按鈕、觸摸屏等)時觸發事件console.log('pointer-down 事件觸發')});view.on('pointer-move', (event) => {// 在地圖上移動任意指針設備時觸發事件console.log('pointer-move 事件觸發')});view.on('pointer-up', (event) => {// 釋放任意指針設備按鈕(鼠標按鈕、觸摸屏等)時觸發事件console.log('pointer-up 事件觸發')});view.on('extent-change', (event) => {// 地圖視圖的范圍發生變化時觸發事件console.log('extent-change 事件觸發')});
}
</script>
<style scoped>  
#viewDiv {width: 100%;height: 100vh; 
}
</style>

3、toMap()方法
MapViewtoMap()方法是用來將頁面上的像素坐標轉換為地圖上的經緯度坐標的方法。它接受一個包含頁面上的像素坐標的對象作為參數,并返回對應的地圖上的經緯度坐標。
使用toMap()方法的示例:

<template><div id="viewDiv"></div>
</template><script setup>
import { onMounted } from 'vue'
import Map from '@arcgis/core/Map.js';
import MapView from '@arcgis/core/views/MapView.js';  
let view
onMounted(() => {initArcGisMap()
})const initArcGisMap = () => {const map = new Map({basemap: "topo-vector"});view = new MapView({center: [-118.80500, 34.02700],zoom: 4,container: "viewDiv",map: map});view.ui.components = [];view.on('click', handleMapClick)
}const handleMapClick = (event) => { const screenPoint = {x: event.x,y: event.y}; const mapPoint = view.toMap(screenPoint);console.log(`點擊點的經緯度坐標為 經度:${mapPoint.latitude},緯度:${mapPoint.longitude}`)}
</script>
<style scoped>  #viewDiv {width: 100%;height: 100vh;}
</style> 

在上述代碼中,當我們點擊地圖時,handleMapClick方法會被調用。在該方法中,我們通過event對象獲取到用戶點擊的頁面像素坐標。然后,使用view.toMap(screenPoint)方法將頁面像素坐標轉換為地圖上的經緯度坐標。最后,將獲取到的經緯度值打印到控制臺。
運行代碼,可以看到控制臺輸出的經緯度坐標
在這里插入圖片描述

4、toScreen()方法
MapViewtoScreen()方法是用來將地圖上的經緯度坐標轉換為頁面上的像素坐標的方法。它接受一個包含地圖上經緯度坐標的對象作為參數,并返回對應的頁面上的像素坐標。
使用toScreen()方法的示例

<template><div id="viewDiv"></div>
</template><script setup>
import { onMounted } from 'vue'
import Map from '@arcgis/core/Map.js';
import MapView from '@arcgis/core/views/MapView.js'; 
import Point from "@arcgis/core/geometry/Point.js";let view
onMounted(() => {initArcGisMap()
})const initArcGisMap = () => {const map = new Map({basemap: "topo-vector"});view = new MapView({center: [-118.80500, 34.02700],zoom: 4,container: "viewDiv",map: map});view.ui.components = [];view.on('click', handleMapClick) 
}const handleMapClick = (event) => { const mapPoint = new Point({x: event.mapPoint.longitude,y: event.mapPoint.latitude,spatialReference: view.spatialReference});const screenPoint = view.toScreen(mapPoint);console.log(`點擊點的屏幕坐標為 x:${screenPoint.x},y:${screenPoint.y}`)} 
</script>
<style scoped>  #viewDiv {width: 100%;height: 100vh;}
</style>

上述代碼中,當用我們擊地圖時,handleMapClick方法會被調用。在該方法中,我們通過event.mapPoint獲取到用戶點擊位置的地圖上的經緯度坐標。然后,創建一個Point對象表示地圖上的坐標點,并指定相應的空間參考。接下來,使用view.toScreen(mapPoint)將地圖坐標點轉換為頁面上的像素坐標。最后,將獲取到的像素坐標在控制臺打印出來。
運行程序,點擊地圖上任意位置,可以在控制臺看到該點的屏幕坐標
在這里插入圖片描述
好了,關于Map和MapView的相關內容就介紹到這里,關于ArcGIS Maps SDK for JavaScript的更多內容,咱們下次接著聊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42314.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42314.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42314.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Rust】Rust學習 第十三章Rust 中的函數式語言功能:迭代器與閉包

Rust 的設計靈感來源于很多現存的語言和技術。其中一個顯著的影響就是 函數式編程&#xff08;functional programming&#xff09;。函數式編程風格通常包含將函數作為參數值或其他函數的返回值、將函數賦值給變量以供之后執行等等。 更具體的&#xff0c;我們將要涉及&#…

bert,transformer架構圖及面試題

Transformer詳解 - mathor atten之后經過一個全連接層殘差層歸一化 class BertSelfOutput(nn.Module):def __init__(self, config):super().__init__()self.dense nn.Linear(config.hidden_size, config.hidden_size)self.LayerNorm nn.LayerNorm(config.hidden_size, epscon…

redis 發布和訂閱

目錄 一、簡介 二、常用命令 三、示例 一、簡介 Redis 發布訂閱 (pub/sub) 是一種消息通信模式&#xff1a;發送者 (pub) 發送消息&#xff0c;訂閱者 (sub) 接收消息。Redis 客戶端可以訂閱任意數量的頻道。下圖展示了頻道 channel1 &#xff0c;以及訂閱這個頻道的三個客戶…

前端對文件轉換處理的一些常用方法

文章目錄 0&#xff0c;前言1&#xff0c;將圖片的url網絡鏈接(http://) 轉為base64格式2&#xff0c;將base64的圖片數據轉換為file文件3&#xff0c;將以base64的圖片數據轉換為Blob4&#xff0c;將file文件轉化為base645&#xff0c;將file文件轉換為Blob6&#xff0c;獲取文…

CentOS系統環境搭建(八)——CentOS7開機自動執行腳本(以MySQL為例)

CentOS7開機自動執行腳本 文章目錄 CentOS7開機自動執行腳本第一步&#xff1a;新建一個腳本run.sh第二步&#xff1a;腳本添加可執行權限第三步&#xff1a;執行如下命令將/etc/rc.d/rc.local文標記為可執行文件第四步&#xff1a;打開/etc/rc.d/rc.local文件&#xff0c;在最…

利用Opencv實現人像遷移

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天來學習一下如何使用Opencv實現人像遷移&#xff0c;歡迎大家一起參與探討交流~ 本文目錄&#xff1a; 一、實驗要求二、實驗環境三、實驗原理及操作1.照片準備2.圖像增強3.實現美顏功能4.背景虛化5.圖像二值化處理6.人…

item_password-獲得淘口令真實url

一、接口參數說明&#xff1a; item_password-獲得淘口令真實url &#xff0c;點擊更多API調試&#xff0c;請移步注冊API賬號點擊獲取測試key和secret 公共參數 請求地址: https://api-gw.onebound.cn/taobao/item_password 名稱類型必須描述keyString是調用key&#xff08…

tomcat源碼修改與編譯

1、獲取源碼 從github下載其源碼&#xff1a;https://github.com/apache/tomcat 2、選擇版本 切換到對應版本&#xff08;直接用相對應的Git tag即可&#xff09;&#xff1a; git checkout 9.0.793、修改源代碼&#xff0c;并且生成補丁 這里我們以修改去掉新版本的ws的檢…

129.【Spring 注解 IOC】

Spring 注解 (一)、組件注冊1. Configuration 與 Bean 容器注冊組件(1).無注解注入方式(2).注解注入方式 2. ComponentScan 自動掃描組件和自動掃描規則(1).無注解掃描方式(2).注解掃描注入方式(3).指定掃描或不掃描的包 (過濾) 3. 自定義TypeFilter指定過濾規則 Filter(1).自定…

openCV項目開發實戰--詳細介紹如何改善夜間圖像的照明(附python和C++源碼)

文末附完整的代碼實現下載鏈接 介紹 對于非攝影師來說,在光線不佳的條件下拍出好照片似乎很神奇。完成低光攝影需要技巧、經驗和正確的設備的結合。在弱光下拍攝的圖像缺乏色彩和獨特的邊緣。它們還遭受能見度差和深度未知的困擾。這些缺點使得此類圖像不適合個人使用或圖像處…

QT多屏顯示程序

多屏顯示的原理其實很好理解&#xff0c;就拿橫向擴展來說&#xff1a; 計算機把桌面的 寬度擴展成了 w1&#xff08;屏幕1的寬度&#xff09; w2(屏幕2的寬度) 。 當一個窗口的起始橫坐標 > w1&#xff0c;則 他就被顯示在第二個屏幕上了。 drm設備可以多用戶同時打開&am…

Spring MVC 簡介

目錄 1. 什么是MVC2. 什么是SpringMVC 1. 什么是MVC MVC是一種常用的軟件架構模式。可以看作是一種設計模式&#xff0c;也可以看作是一種軟件框架。經典MVC模式中&#xff0c;M是指模型&#xff0c;V是視圖&#xff0c;C則是控制器&#xff0c;使用MVC的目的是將M和V的實現代…

golang中使用chan控制協程并發簡單事例

func main() {processNum : 5ch : make(chan struct{}, processNum)for true {ch <- struct{}{}go func() {defer func() {<-ch}()fmt.Println("我是協程", time.Now().UnixNano())time.Sleep(time.Second * 5)}()} } 可以看到&#xff0c;這里每5s會執行一次帶…

Linux15 消息隊列 線程

目錄 1、進程間通信IPC&#xff1a; 2、多線程 3、向消息隊列中寫入數據 4、從消息隊列中讀取數據 5、多線程&#xff1a; 6、將多線程的數據返回給主…

數據庫索引優化策略與性能提升實踐

文章目錄 什么是數據庫索引&#xff1f;為什么需要數據庫索引優化&#xff1f;數據庫索引優化策略實踐案例&#xff1a;索引優化帶來的性能提升索引優化規則1. 前導模糊查詢不適用索引2. 使用IN優于UNION和OR3. 負向條件查詢不適用索引4. 聯合索引最左前綴原則5. 范圍條件查詢右…

c#實現策略模式

下面是一個使用C#實現策略模式的示例代碼&#xff1a; using System;// 策略接口 public interface IStrategy {void Execute(); }// 具體策略類A public class ConcreteStrategyA : IStrategy {public void Execute(){Console.WriteLine("具體策略A的執行邏輯");} …

【Mysql】MVCC版本機制的多并發

&#x1f307;個人主頁&#xff1a;平凡的小蘇 &#x1f4da;學習格言&#xff1a;命運給你一個低的起點&#xff0c;是想看你精彩的翻盤&#xff0c;而不是讓你自甘墮落&#xff0c;腳下的路雖然難走&#xff0c;但我還能走&#xff0c;比起向陽而生&#xff0c;我更想嘗試逆風…

PostgreSQL空值的判斷

PostgreSQL空值的判斷 空值判斷非空判斷總結 空值判斷 -- 查詢為空的 is null,sql簡寫isnull select * from employees where manager_id isnull;select * from employees where manager_id is null;非空判斷 -- 查詢不為空的 is not null;sql簡寫notnull select * from empl…

Java【數據結構】二分查找

&#x1f31e; 題目&#xff1a; &#x1f30f;在有序數組A中&#xff0c;查找目標值target &#x1f30f;如果找到返回索引 &#x1f30f;如果找不到返回-1 算法描述解釋前提給定一個內含n個元素的有序數組A&#xff0c;滿足A0<A1<A2<<An-1,一個待查值target1設…

mysql 8.0安裝

操作系統&#xff1a;22.04.1-Ubuntu apt 安裝命令 sudo apt install mysql-client-core-8.0 sudo apt install mysql-server-8.0終端輸入 mysql 可以直接免密登錄 如果此時提示需要密碼&#xff0c;則可以進入配置文件&#xff0c;設置免密登錄 sudo vim /etc/mysql/mysq…