ArcgisForJs快速入门

文章目录

  • 0.引言
  • 1.前端代码编辑工具
  • 2.使用ArcgisForJs创建一个简单应用
  • 3.切片地图服务图层
  • 4.动态地图服务图层
  • 5.地图事件

0.引言

ArcGIS API for JavaScript是一款由Esri公司开发的用于创建WebGIS应用的JavaScript库。它允许开发者通过调用ArcGIS Server的REST API,将地图资源和其它资源(如ArcGIS Online)嵌入到Web应用中。ArcGIS API for JavaScript提供了丰富的功能,包括页面布局、地图图层、空间坐标转换、要素符号、专题图、属性查询、空间分析、三维场景、小部件、渲染器等。本文介绍如何快速入门ArcgisForJs。

1.前端代码编辑工具

(1)ArcgisForJs沙盒
ArcgisForJs的代码编写和测试在沙盒中进行。
ArcgisForJs沙盒可以访问: https://developers.arcgis.com/javascript/3/sandbox/sandbox.html?sample=map_create
  在这里插入图片描述
(2)代码笔
CodePen(代码笔)一款前端所见即所得的工具,我们可以在线编辑制作前端页面,所见即所得。同时网站提供所有常见的 js、css 库,并且支持流行技术(如 SASS),免去了我们自建平台的麻烦。编辑器网址: https://codepen.io/pen/
  在这里插入图片描述

2.使用ArcgisForJs创建一个简单应用

创建任何GIS地图应用程序,都需要遵循一些步骤。假如想让地图成为应用程序的一部分,那么就需要按照这些步骤来执行。需要遵循以下步骤:①创建页面HTML代码;②引用ArcGIS API for JavaScript和样式表;③加载模块;④确保DOM可用;⑤创建地图;⑥定义页面内容;⑦页面样式。
(1)主要代码

<!DOCTYPE html>
<html>  
<head>  
  <title>Create a Map</title>  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">  
  <link rel="stylesheet" href="https://js.arcgis.com/3.45/dijit/themes/claro/claro.css">  
  <link rel="stylesheet" href="https://js.arcgis.com/3.45/esri/css/esri.css">  
  <style>  
    html, body, #mapDiv {  
      padding: 0;  
      margin: 0;  
      height: 100%;  
    }  
  </style>  
  
  <script src="https://js.arcgis.com/3.45/"></script>  
  <script>  
    dojo.require("esri.map");  
  
    function init(){  
      var map = new esri.Map("mapDiv", {  
        basemap: "topo-vector",  
        center: [-122.45, 37.75],  
        zoom: 13  
      });  
    }  
    dojo.ready(init);  
  </script>  
  
</head>  
<body class="claro">  
  <div id="mapDiv"></div>  
</body>  
</html>

(2)结果显示
  在这里插入图片描述

3.切片地图服务图层

ArcGISTiledMapServiceLayer类使用在当引用ArcGIS Server暴露的切片(缓存)地图服务时。这种类型的对象使用已经缓存过的切片地图集合,所以性能得以改善。
(1)主要代码

<!DOCTYPE html>
<html>  
  <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">  
    <title>Tiled map service</title>  
    <link rel="stylesheet" href="https://js.arcgis.com/3.45/esri/css/esri.css">  
    <style>  
      html, body, #map {  
        height: 100%; width: 100%; margin: 0; padding: 0;  
      }  
    </style>  
  
    <script src="https://js.arcgis.com/3.45/"></script>  
    <script>  
      var map;  
  
      require(["esri/map",  
        "esri/layers/ArcGISTiledMapServiceLayer",  
        "esri/geometry/Point",  
        "esri/SpatialReference",  
        "dojo/domReady!"],  
        function(Map, ArcGISTiledMapServiceLayer, Point, SpatialReference) {  
          map = new Map("map", {  
            center: new Point(1714791.187457787, 2194882.166227445, new SpatialReference({ wkid: 5936 }))  
          });  
  
          var tiled = new ArcGISTiledMapServiceLayer("https://services.arcgisonline.com/arcgis/rest/services/Polar/Arctic_Imagery/MapServer");  
          map.addLayer(tiled);  
        }  
      );  
    </script>  
  </head>  
  <body>  
    <div id="map"></div>  
  </body>  
</html>

(2)结果显示
  在这里插入图片描述

4.动态地图服务图层

ArcGISDynamicMapService类用来动态创建ArcGIS Server地图服务。
(1)主要代码

<!DOCTYPE html>
<html>  
  <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">  
    <title>Create Map and add a dynamic layer</title>  
    <link rel="stylesheet" href="https://js.arcgis.com/3.45/esri/css/esri.css"/>  
    <style>  
      html, body, #mapDiv{  
        padding: 0;  
        margin: 0;  
        height: 100%;  
      }  
    </style>  
    <script src="https://js.arcgis.com/3.45/"></script>  
    <script>  
      var map;  
  
      require([  
        "esri/map",  
        "esri/layers/ArcGISDynamicMapServiceLayer",  
        "esri/layers/ImageParameters"  
      ], function (  
        Map, ArcGISDynamicMapServiceLayer, ImageParameters) {  
  
        map = new Map("mapDiv", {  
          sliderOrientation : "horizontal"  
        });  
  
        var imageParameters = new ImageParameters();  
        imageParameters.format = "jpeg"; // default is PNG8.  
  
        //Takes a URL to a non cached map service.  
        var dynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer("https://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer", {  
          "imageParameters" : imageParameters  
        });  
  
        map.addLayer(dynamicMapServiceLayer);  
      });  
    </script>  
  </head>  
  <body>  
    <div id="mapDiv"></div>  
  </body>  
</html>

(2)结果显示
  在这里插入图片描述

5.地图事件

在编程世界里,事件是发生在应用程序中的动作。通常,这些事件通过终端用户触发,包括鼠标单击、鼠标拖拽和键盘动作,但是它还包括数据的发送和接收、组件修改和其他操作。
(1)主要代码

<!DOCTYPE html>
<html>  
  <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">  
    <title>Select with feature layer</title>  
    <link rel="stylesheet" href="https://js.arcgis.com/3.45/dijit/themes/tundra/tundra.css">  
    <link rel="stylesheet" href="https://js.arcgis.com/3.45/esri/css/esri.css">  
    <style>  
      html, body, #mapDiv {  
        padding: 0;  
        margin: 0;  
        height: 100%;  
      }  
      #messages{  
        background-color: #fff;  
        box-shadow: 0 0 5px #888;  
        font-size: 1.1em;  
        max-width: 15em;  
        padding: 0.5em;  
        position: absolute;  
        right: 20px;  
        top: 20px;  
        z-index: 40;  
      }  
    </style>  
    <script src="https://js.arcgis.com/3.45/"></script>  
    <script>  
      var map;  
      require([  
        "esri/map", "esri/layers/FeatureLayer",  
        "esri/tasks/query", "esri/geometry/Circle",  
        "esri/graphic", "esri/symbols/SimpleMarkerSymbol",  
        "esri/symbols/SimpleLineSymbol", "esri/symbols/SimpleFillSymbol", "esri/renderers/SimpleRenderer",  
        "esri/config", "esri/Color", "dojo/dom", "dojo/domReady!"  
      ], function(  
        Map, FeatureLayer,  
        Query, Circle,  
        Graphic, SimpleMarkerSymbol,  
        SimpleLineSymbol, SimpleFillSymbol, SimpleRenderer,  
        esriConfig, Color, dom  
      ) {  
  
        map = new Map("mapDiv", {  
          basemap: "streets-vector",  
          center: [-95.249, 38.954],  
          zoom: 14,  
          slider: false  
        });  
  
        // Add the census block points in on demand mode. An outfield is specified since it is used when calculating   the total population falling within the one mile radius.  
        var featureLayer = new FeatureLayer("https://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/0",{  
          outFields: ["POP2000"]  
        });  
  
        // Selection symbol used to draw the selected census block points within the buffer polygon  
        var symbol = new SimpleMarkerSymbol(  
          SimpleMarkerSymbol.STYLE_CIRCLE,  
          12,  
          new SimpleLineSymbol(  
            SimpleLineSymbol.STYLE_NULL,  
            new Color([247, 34, 101, 0.9]),  
            1  
          ),  
          new Color([207, 34, 171, 0.5])  
        );  
        featureLayer.setSelectionSymbol(symbol);  
  
        // Make unselected features invisible  
        var nullSymbol = new SimpleMarkerSymbol().setSize(0);  
        featureLayer.setRenderer(new SimpleRenderer(nullSymbol));  
  
        map.addLayer(featureLayer);  
  
        var circleSymb = new SimpleFillSymbol(  
          SimpleFillSymbol.STYLE_NULL,  
          new SimpleLineSymbol(  
            SimpleLineSymbol.STYLE_SHORTDASHDOTDOT,  
            new Color([105, 105, 105]),  
            2  
          ), new Color([255, 255, 0, 0.25])  
        );  
        var circle;  
  
        // When the map is clicked create a buffer around the click point of the specified distance  
        map.on("click", function(evt){  
          circle = new Circle({  
            center: evt.mapPoint,  
            geodesic: true,  
            radius: 1,  
            radiusUnit: "esriMiles"  
          });  
          map.graphics.clear();  
          var graphic = new Graphic(circle, circleSymb);  
          map.graphics.add(graphic);  
  
          var query = new Query();  
          query.geometry = circle.getExtent();  
          // Use a fast bounding box query. It will only go to the server if bounding box is outside of the visible map.  
          featureLayer.queryFeatures(query, selectInBuffer);  
        });  
  
        function selectInBuffer(response){  
          var feature;  
          var features = response.features;  
          var inBuffer = [];  
          // Filter out features that are not actually in buffer, since we got all points in the buffer's bounding box  
          for (var i = 0; i < features.length; i++) {  
            feature = features[i];  
            if(circle.contains(feature.geometry)){  
              inBuffer.push(feature.attributes[featureLayer.objectIdField]);  
            }  
          }  
          var query = new Query();  
          query.objectIds = inBuffer;  
          // Use an objectIds selection query (should not need to go to the server)  
          featureLayer.selectFeatures(query, FeatureLayer.SELECTION_NEW, function(results){  
            var totalPopulation = sumPopulation(results);  
            var r = "";  
            r = "<b>The total Census Block population within the buffer is <i>" + totalPopulation + "</i>.</b>";  
            dom.byId("messages").innerHTML = r;  
          });  
        }  
  
        function sumPopulation(features) {  
          var popTotal = 0;  
          for (var x = 0; x < features.length; x++) {  
            popTotal = popTotal + features[x].attributes["POP2000"];  
          }  
          return popTotal;  
        }  
      });  
    </script>  
  </head>  
  
  <body>  
    <span id="messages">Click on the map to select census block points within 1 mile.</span>  
    <div id="mapDiv"></div>  
  </body>  
</html>

(2)结果显示
  在这里插入图片描述

参考资料:
[1] 派普勒[著]张大伟[译]. 《JavaScript构建Web和ArcGIS Server应用实战》; 2015-12-01 [accessed 2024-01-28].
[2] hangge. CodePen - 一个在线的前端代码编辑工具(可用于制作测试页面、代码调试); 2019-12-02 [accessed 2024-01-28].
[3] . ArcGIS Maps SDK for JavaScript; [accessed 2024-01-28].
[4] . ArcGIS API for JavaScript (legacy) 3.45; [accessed 2024-01-28].
[5] 祥哥哥咩~. arcgis for js图层graphic的鼠标悬浮事件; 2019-04-26 [accessed 2024-01-28].

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/355942.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现

C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现 —— 杭州 2024-01-28 code review! 文章目录 C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现1.RTTI、RAII、MVC、MVVM、SOLID简述2.RAII (Resource Acquisition Is Initialization)3.RTTI (Run-Time Type Informat…

ABeam Insight | 大语言模型系列 (1) : 大语言模型概览

大语言模型系列 引入篇 ABeam Insight 自从图灵测试在20世纪50年代提出以来&#xff0c;人类一直不断探索机器如何掌握语言智能。语言本质上是一个由语法规则支配的错综复杂的人类表达系统。 近年来&#xff0c;具备与人对话互动、回答问题、协助创作等能力的ChatGPT等大语…

江科大stm32学习笔记6——GPIO输入准备

一、按键消抖 由于按键内部使用的是机械式弹簧片&#xff0c;所以在按下和松开时会产生5~10ms的抖动&#xff0c;需要通过代码来进行消抖。 二、滤波电容 在电路中&#xff0c;如果见到一端接在电路中&#xff0c;一端接地的电容&#xff0c;则可以考虑它的作用为滤波电容&am…

python爬虫实战——获取酷我音乐数据

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: 版 本&#xff1a; python 3.8 编辑器&#xff1a;pycharm 2022.3.2 模块使用: requests >>> pip install requests 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install…

职业身份来认同自己对吗?

人们常常以自己的职业身份来认同自己。这是一个巨大的错误。 你的职业身份只是一个外壳&#xff1b;它不能定义你是一个人。你可以期待你的职业媒介会随着时间而改变&#xff0c;但是你传达的信息会应该更加稳定。你的信息就是回答你是谁&#xff0c;你应该通过三十几年的工作…

linux中常用的命令

一&#xff1a;tree命令 &#xff08;码字不易&#xff0c;关注一下吧&#xff0c;w~~w) 以树状形式查看指定目录内容。 tree --树状显示当前目录下的文件信息。 tree 目录 --树状显示指定目录下的文件信息。 注意&#xff1a; tree只能查看目录内容&#xff0c;不能…

【Axure高保真原型】随机抽取案例

今天和大家分享随机抽取点餐案例的原型模板&#xff0c;包括2种效果&#xff0c;第一种是手动暂停效果&#xff0c;点击开始后随机抽取食物&#xff0c;手动点击暂停按钮后停止&#xff1b;第二种是自动暂停效果&#xff0c;点击开始按钮后随机抽取食物&#xff0c;并且开始倒计…

webassembly003 whisper.cpp的python绑定实现+Cython+Setuptools的GUI程序

CODE python端的绑定和本文一样&#xff0c;还需要将cdef char* LANGUAGE b’en’改为中文zh&#xff08;也可以在函数中配置一个参数修改这个值&#xff09;。ps:本来想尝试cdef whisper_context* whisper_init_from_file_with_params_no_state(char*, whisper_full_params)…

Gitlab7.14 中文版安装教程

Gitlab7.14 中文版安装教程 注&#xff1a; 本教程由羞涩梦整理同步发布&#xff0c;本人技术分享站点&#xff1a;blog.hukanfa.com转发本文请备注原文链接&#xff0c;本文内容整理日期&#xff1a;2024-01-28csdn 博客名称&#xff1a;五维空间-影子&#xff0c;欢迎关注 …

部署LNMP、Nginx+FastCGI、Nginx地址重写语法,地址重写应用案例

1 案例1&#xff1a;部署LNMP环境 1.1 问题 安装部署LNMP环境实现动态网站解析 静态网站 在不同环境下访问&#xff0c;网站内容不会变化 动态网站 在不同环境下访问&#xff0c;网站内容有可能发生变化 安装部署Nginx、MariaDB、PHP、PHP-FPM&#xff1b;启动Nginx、Mari…

STM32标准库——(6)TIM定时中断

1.TIM简介 TIM&#xff08;Timer&#xff09;定时器定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时不仅具备基本的定时中断功能&#xff0…

LVGL部件

一.标签部件 1.如何创建标签部件以及设置文本 ![2024-01-28T09:54:08.png][3] void my_lvgl(void) {lv_obj_t *lablelv_label_create(lv_scr_act()); //创建一个标签lv_label_set_text(lable,"hello"); //普通更改文字lv_label_set_text_fmt(lab…

Zerosync:构建基于STARK的Bitcoin证明系统

1. 引言 前序博客&#xff1a; BitcoinSTARK: ZeroSync & Khepri Robin Linus、Tino Steffens、Lukas George 等人成立了一个名为 ZeroSync 协会&#xff08;ZeroSync Association&#xff09;的瑞士非营利组织&#xff0c;该组织将牵头开发比特币证明系统。ZeroSync 于…

shell

目录 一.运行方式 二.编程习惯 三.变量 3.1变量的命名 3.3普通变量(局部变量) 3.4特殊变量 3.5变量子串 3.6变量赋值 四.运算方式 4.1$(( )) 4.2let 4.3expr 4.4bc(小数运算) 4.5$[ ] 4.6awk 4.7总结运算方式 五.条件测试语句 5.1文件 5.2条件测试表达式…

js实现动漫拼图1.0版

文章目录 1 实现效果视频2 功能实现思路3代码实现 1 实现效果视频 拼图1.0 2 功能实现思路 布局忽略&#xff08;小白学前端&#xff0c;不献丑了&#xff09; 左侧拼图格 左侧4*4的拼图小格子 利用表格实现&#xff0c;规划好td的大小&#xff0c;给每个格子加上背景图片&…

计算方法实验2:利用二分法及不动点迭代求解非线性方程

一、问题描述 利用二分法及不动点迭代求解非线性方程。 二、实验目的 掌握二分法及不动点迭代的算法原理&#xff1b;能分析两种方法的收敛性&#xff1b;能熟练编写代码实现利用二分法及不动点迭代来求解非线性方程。 三、实验内容及要求 二分法 (1) 编写代码计算下列数字…

类和对象 第五部分第四小节:赋值运算符重载

C编译器至少给一个类添加4个函数 1.默认构造函数无参&#xff0c;函数体为空 2.默认析构函数无参&#xff0c;函数体为空 3.默认拷贝沟早函数&#xff0c;对属性进行值拷贝 4.赋值运算符“operator”&#xff0c;对属性进行值拷贝 如果类中有属性指向堆区&#xff0c;做赋值操作…

上推加载更多组件

本组件使用的是TaroReact 实现的 &#xff0c;具体代码如下 一共分为tsx和less文件 //index.tsx /** RefreshLoading* description 上推加载更多组件* param loading boolean* param style* returns*/import { View } from "tarojs/components"; import React, { FC…

[ESP32 IDF] wifi 的应用

目录 背景知识 wifi的基本连接使用 WiFi篇—— WiFi两种模式文章中二、WiFi 的启动&#xff08;STA 及 AP 模式&#xff09; 输出现象 通过websocket控制LED 实践验证 实验现象 背景知识 WIFI是ESP32非常重要的一个功能&#xff0c;想要使用一下IDF的API实现将ESP32连…

深度学习核心技术与实践之深度学习研究篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分。 Batch Normalization 向前传播 &#xff08;1&#xff09;三个主要任务&#xff1a;计算出每批训练数据的统计量。 对数据进行标准化 对标…