ArcGIS JS 基础教程(3):地图缩放、平移、旋转(基础交互)

简介: ArcGIS JS 基础教程(3):地图缩放、平移、旋转(基础交互)

零、写在前面

📌 本系列教程完整目录:ArcGIS JS 系列基础教程(100个项目常用热门功能)

💡 在线示例:完整可运行的 HTML 示例,无需任何环境配置,可直接在浏览器中打开体验
🗂️ 专栏导航:收藏 + 关注,专栏文章第一时间送达
❤️ 一键三连:点赞(给教程充电)+ 评论(提问必回)+ 收藏(下次再看)


一、功能介绍

实现地图的核心交互操作,包括鼠标滚轮缩放、拖拽平移、鼠标右键旋转(2D视图),同时支持通过代码控制缩放级别、平移至指定位置、设置旋转角度,适配用户手动交互和自动定位场景。

二、功能实现

SceneView默认支持鼠标滚轮缩放、拖拽平移,通过heading属性控制旋转;代码控制通过view.zoom(设置缩放级别)、view.goTo(平移至指定中心点/范围)、view.heading(设置旋转角度)实现。

三、功能应用

所有包含地图的项目,如导航类项目的手动缩放查看细节、后台系统的地图定位平移、可视化项目的视角调整。


四、核心代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>第3课:地图缩放、平移、旋转(基础交互)</title>
    <link rel="stylesheet" href="https://js.arcgis.com/5.0/esri/themes/light/main.css">
    <script type="module" src="https://js.arcgis.com/5.0/"></script>
    <style>
        body {
     margin: 0; padding: 0; font-family: "Microsoft YaHei", sans-serif; }
        #mapContainer {
     width: 100vw; height: 100vh; }
        .page-title {
    
            position: absolute;
            top: 20px;
            left: 50%;
            transform: translateX(-50%);
            background: rgba(255,255,255,0.95);
            padding: 10px 24px;
            border-radius: 6px;
            font-size: 18px;
            font-weight: bold;
            z-index: 100;
            box-shadow: 0 2px 8px rgba(0,0,0,0.15);
        }
        .control-panel {
    
            position: absolute;
            top: 80px;
            right: 20px;
            background: rgba(255,255,255,0.95);
            padding: 16px;
            border-radius: 8px;
            box-shadow: 0 2px 12px rgba(0,0,0,0.15);
            z-index: 100;
            min-width: 180px;
        }
        .btn-group {
     display: flex; flex-direction: column; gap: 8px; }
        .btn-group button {
    
            padding: 10px 16px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-size: 13px;
            font-weight: 500;
        }
        .btn-zoom {
     background: #1890ff; color: white; }
        .btn-pan {
     background: #52c41a; color: white; }
        .btn-rotate {
     background: #722ed1; color: white; }
        .btn-reset {
     background: #ff4d4f; color: white; }
        .btn-group button:hover {
     opacity: 0.85; }
    </style>
</head>
<body>
<h1 class="page-title">第3课:地图缩放、平移、旋转</h1>
<div class="control-panel">
    <div class="btn-group">
        <button class="btn-zoom" id="zoomIn">放大一级</button>
        <button class="btn-zoom" id="zoomOut">缩小一级</button>
        <button class="btn-pan" id="panToBeijing">定位北京</button>
        <button class="btn-rotate" id="rotateLeft">左旋45度</button>
        <button class="btn-rotate" id="rotateRight">右旋45度</button>
        <button class="btn-reset" id="resetView">重置视图</button>
    </div>
</div>
<div id="mapContainer"></div>

<script type="module">
    const Map = await $arcgis.import("@arcgis/core/Map.js");
    const SceneView = await $arcgis.import("@arcgis/core/views/SceneView.js");
    const getTianditu = await $arcgis.import("https://openlayers.vip/examples/resources/tianditu.js");

    const vecLayers = getTianditu.default({
     type: "vec_w" });
    const map = new Map({
    
        basemap: {
     baseLayers: [vecLayers.base, vecLayers.anno] },
        ground: {
    
            surface: {
    
                elevationLayers: [{
    
                    url: "https://www.geosceneonline.cn/image/rest/services/OpenData/ChinaTerrain3D/ImageServer/"
                }]
            }
        }
    });

    window.view = new SceneView({
    
        container: "mapContainer",
        map: map,
        center: [118.805, 34.027],
        zoom: 13,
        tilt: 45
    });

    window.zoomIn = () => view.goTo({
     zoom: view.zoom + 1 });
    window.zoomOut = () => view.goTo({
     zoom: view.zoom - 1 });
    window.panToBeijing = () => view.goTo({
     center: [116.39, 39.9], zoom: 12 });
    window.rotateLeft = () => view.goTo({
     heading: view.heading - 45 });
    window.rotateRight = () => view.goTo({
     heading: view.heading + 45 });
    window.resetView = () => view.goTo({
     center: [118.805, 34.027], zoom: 13, heading: 0, tilt: 45 });

    document.getElementById("zoomIn").onclick = zoomIn;
    document.getElementById("zoomOut").onclick = zoomOut;
    document.getElementById("panToBeijing").onclick = panToBeijing;
    document.getElementById("rotateLeft").onclick = rotateLeft;
    document.getElementById("rotateRight").onclick = rotateRight;
    document.getElementById("resetView").onclick = resetView;

    view.when(() => console.log("地图缩放、平移、旋转示例加载完成!"));
</script>
</body>
</html>

五、在线示例

🔗 在线体验地址(GitHub资源,等待时间较长,或者架梯子):https://southjor.github.io/arcgis-examples/lessons/lesson3.html

在这里插入图片描述

六、关键API说明

API 说明
view.zoom 获取/设置当前缩放级别
view.center 获取/设置地图中心点
view.heading 获取/设置旋转角度(0-360度)
view.goTo(target, options) 动画跳转到指定视图状态
view.tilt 三维视角倾斜角度(仅SceneView)

七、系列导航

⬅️ 上一篇:ArcGIS JS 基础教程(2):地图切换底图(天地图)

⬅️ 下一篇:ArcGIS JS 基础教程(4):地图中心点定位(指定经纬度/地址)


💬 有问题欢迎在评论区留言,我会第一时间回复!

📢 关注我的专栏,后续持续更新 ArcGIS JS 100 个常用功能教程

相关文章
|
4天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1238 4
|
27天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9740 32
|
14天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
8天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
12天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
894 1
|
5天前
|
Web App开发 人工智能 JavaScript
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
REA(Reverse Engineer Anything)是近期爆火的开源AI逆向工具,4月发布,1个月内斩获15万+ Star。它让AI Agent无需源码即可分析二进制、APK、JS/Electron、HAR包等17类目标,自动反编译、生成可运行代码,并强制返回带证据与局限的结论。全本地执行,MIT协议,支持Hopper/Ghidra/IDA等引擎,一行命令即可上手。
592 1
太猛了,一个月干到15W+,给大家推荐一个最近爆火的开源逆向工具:REA
|
9天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型全解析:核心原理拆解,性能实战测评与落地部署教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为System One Model(系统一模型),对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
580 0
|
10天前
|
存储 人工智能 自然语言处理
千问办公官网入口链接在哪?2026年最新QwenWork测评、千问办公怎么样?一文看懂
千问办公(QwenWork)是阿里云推出的AI智能办公平台,提供网页端和阿里云官网双入口。支持PPT/Word/Excel生成、多模态处理、网页全栈搭建、钉钉深度集成等6大核心能力。个人版免费可用,高级版198元/月;企业版198元/人/月。新用户注册即赠2000积分。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
1160 0