[ArcGIS API for JavaScript 4.8] Sample Code-Get Started-popups简介

【官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-popup/index.html



一、Intro to popups

popups(弹出框)是一种用户与地图之间的交互方式,用户点击相关要素,会弹出对应的popup以查看所选要素的相关信息。每一个view(视图)都有一个popup,其要展示的内容可以来自layers、graphics或者仅仅是鼠标的点击信息。

popup用于展示layer或者graphic的相关字段信息,也可以用来表现query(查询)或者其他一些和layer、graphic无关的动作。比如,可以展现鼠标点击处的经纬信息。

这个例子实现弹出popup以展现鼠标点击处的经纬度信息和地址信息。需要实例化Locator类,并使用World Geocoding Service(世界地理编码服务)提供的reverse geocode(反解地理位置工具)计算出鼠标点击处的经纬度和地址信息。

1.代码骨架

 1 <!doctype html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
 6         <title>Intro to popups</title>
 7
 8         <!-- 在线JS API的引入 -->
 9         <link rel="stylesheet" href="https://js.arcgis.com/4.8/esri/css/main.css">
10         <script src="https://js.arcgis.com/4.8/"></script>
11
12         <!-- 设置样式,正确显示地图 -->
13         <style>
14             html,body,#viewDiv{
15                 padding:0;
16                 margin:0;
17                 height:100%;
18                 width:100%;
19             }
20         </style>
21
22         <script>
23
24         </script>
25     </head>
26
27     <body>
28         <div id="viewDiv"></div>
29     </body>
30 </html>

其中包括JS API的引入、style样式的设置等等。

2.加载模块并实例化

 1 <script>
 2   require([
 3      "esri/Map",
 4        "esri/views/MapView",
 5        "esri/tasks/Locator",
 6        "dojo/domReady!"
 7        ],function(Map,MapView,Locator){
 8             //使用world geocoding service,创建位置解析器
 9             var locatorTask=new Locator({
10                 url:"https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"
11             });
12
13             //创建Map
14             var map=new Map({
15                 basemap:"streets-navigation-vector"
16             });
17
18             //创建MapView
19             var view=new MapView({
20                  container:"viewDiv",
21                  map:map,
22                  center:[118.79647,32.05838],
23                  zoom:10
24             });
25     });
26 </script>

Map是创建地图的类,MapView是创建视图的类。具体请查看:https://www.cnblogs.com/wangmengdx/p/9385033.html

Locator类通过使用世界地理编码服务(World Geocoding Service)创建了一个位置解析器。在Locator类的构造函数中需传入url:"https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"。世界地理编码服务提供了解决方法将地址与坐标互相转换,更多信息请查看:https://geocode.arcgis.com/arcgis/index.html

3.监听view的click事件并在点击处弹出popup

当鼠标点击view时将触发view的click事件,弹出popup,将点击处的经纬信息展示出来。

 1 //监听view的click事件
 2 view.on("click",function(event){
 3     //停止派发事件,阻止它被分配到其他document节点
 4     event.stopPropagation();
 5
 6     //获取点击处的经纬度
 7     //保留3位小数
 8     var lon=Math.round(event.mapPoint.longitude*1000)/1000;
 9     var lat=Math.round(event.mapPoint.latitude*1000)/1000;
10
11     //配置popup弹出框
12     view.popup.open({
13         title:"Reverse geocode:["+lon+","+lat+"]",  //经纬度信息在popup的标题处显示
14         location:event.mapPoint  //在鼠标点击处弹出popup
15     });
16 });

当view的click事件被触发时先调用event.stopPropagation(),是为了停止派发事件,阻止这个事件被分配到其他document节点,具体信息请查看:http://www.w3school.com.cn/jsref/event_stoppropagation.asp

event.mapPoint是一个对象,表示鼠标点击的那个地方。event.mapPoint.longitude是鼠标点击处所对应的实地经度值,默认小数点后14位左右。现在想输出小数点后3位,先将原经度值乘以1000,Math.round()方法四舍五入后,再除以1000,就可以起到输出小数点后3位的效果。注意下图中的点不是准确的同一个点,所以数值会有不同。

      

view.popup.open()方法配置popup弹出框,在title处配置经纬度信息。设置popup弹出在鼠标点击处。

4.在popup弹出框中添加位置信息(address)

当鼠标点击view时,触发locatorTask.locationToAddress()方法,传入鼠标点击处信息对象,以获得这一点所对应的实地地址。如果成功找到了鼠标点击处所对应的地址,就把这个地址信息在popup中显示;如果没有找到,就显示错误信息。

注意这个方法locatorTask.locationToAddress()还是写在前面view的click事件的监听函数中。

 1 //查找鼠标点击处所对应的实地地址
 2 locatorTask.locationToAddress(event.mapPoint).then(function(response){
 3//将鼠标点击处的信息对象event.mapPoint传入函数locationToAddress()
 4     //传入完成后,调用匿名函数,传入参数是locationToAddress()返回的地址信息对象
 5     //如果成功找到地址,将其在popup中显示出来
 6     view.popup.content=response.address;
 7 }).catch(function(error){
 8//如果没找到,则在popup中显示错误信息
 9     view.popup.content="找不到地址"
10 });

locatorTask是前面创建的位置解析器(Locator类的实例),将鼠标点击处的信息对象event.mapPoint传入locatorTask的locationToAddress()函数。参数传入完成后,调用匿名函数,这时要传入的参数是之前locationToAddress()返回的地址信息对象response。

如果查找地址成功,将地址信息在popup中展示出来;之后的catch()函数的意思是,如果前面的代码发生错误即地址信息没有找到,就执行catch()里的匿名函数,在popup里输出错误信息。JavaScript的promise.then().catch()语法请查看相关资料。

5.最终代码及运行效果

 1 <!doctype html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
 6         <title>Intro to popups</title>
 7
 8         <!-- 在线JS API的引入 -->
 9         <link rel="stylesheet" href="https://js.arcgis.com/4.8/esri/css/main.css">
10         <script src="https://js.arcgis.com/4.8/"></script>
11
12         <!-- 设置样式,正确显示地图 -->
13         <style>
14             html,body,#viewDiv{
15                 padding:0;
16                 margin:0;
17                 height:100%;
18                 width:100%;
19             }
20         </style>
21
22         <script>
23             require([
24                 "esri/Map",
25                 "esri/views/MapView",
26                 "esri/tasks/Locator",
27                 "dojo/domReady!"
28                 ],function(Map,MapView,Locator){
29                     //使用world geocoding service
30                     var locatorTask=new Locator({
31                         url:"https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"
32                     });
33
34                     //创建Map
35                     var map=new Map({
36                         basemap:"streets-navigation-vector"
37                     });
38
39                     //创建MapView
40                     var view=new MapView({
41                         container:"viewDiv",
42                         map:map,
43                         center:[118.79647,32.05838],
44                         zoom:10
45                     });
46
47                     //监听view的click事件
48                     view.on("click",function(event){
49                         //停止派发事件,阻止它被分配到其他document节点
50                         event.stopPropagation();
51
52                         //获取点击处的经纬度
53                         //保留3位小数
54                         var lon=Math.round(event.mapPoint.longitude*1000)/1000;
55                         var lat=Math.round(event.mapPoint.latitude*1000)/1000;
56
57                         //配置popup弹出框
58                         view.popup.open({
59                             title:"Reverse geocode:["+lon+","+lat+"]",  //经纬度信息在popup的标题处显示
60                             location:event.mapPoint  //在鼠标点击处弹出popup
61                         });
62
63                         //查找鼠标点击处所对应的实地地址
64                         locatorTask.locationToAddress(event.mapPoint).then(function(response){
65                             //将鼠标点击处的信息对象event.mapPoint传入函数locationToAddress()
66                             //传入完成后,调用匿名函数,传入参数是locationToAddress()返回的地址信息对象
67                             //如果成功找到地址,将其在popup中显示出来
68                             view.popup.content=response.address;
69                         }).catch(function(error){
70                             //如果没找到,则在popup中显示错误信息
71                             view.popup.content="找不到地址"
72                         });
73                     });
74             });
75         </script>
76     </head>
77
78     <body>
79         <div id="viewDiv"></div>
80     </body>
81 </html>

  

原文地址:https://www.cnblogs.com/wangmengdx/p/9417007.html

时间: 2024-10-17 21:38:49

[ArcGIS API for JavaScript 4.8] Sample Code-Get Started-popups简介的相关文章

[ArcGIS API for JavaScript 4.8] Sample Code-Popups-1-popupTemplate的概念和popup中属性字段值的多种表现形式

[官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-popuptemplate/index.html] 一.Intro to PopupTemplate(关于popup模板) popups(弹出框)提供了一种简便的方式去查看layers(图层)或者graphics(图形)的属性信息.它也可以展示鼠标在view(视图)中的点击位置的坐标等其他相关信息.在ArcMap中,查看要素图层(shapefile)的属

[ArcGIS API for JavaScript 4.8] Sample Code-Get Started-layers简介

[官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-layers/index.html] 一.Intro to layers 地图是由许多图层构成的,图层(layer)是地图的重要组件,通过展示空间数据来表现实际生活现象.图层可以表示矢量要素(vector),也可以表示栅格要素(raster).JS API中可以使用很多种类的图层(layer),具体类别请查看文档:https://developers.a

ArcGIS API for JavaScript 4.2学习笔记[1] 显示地图

ArcGIS API for JavaScript 4.2直接从官网的Sample中学习,API Reference也是从官网翻译理解过来,鉴于网上截稿前还没有人发布过4.2的学习笔记,我就试试吧. 什么是ArcGIS API for JS?这里就不多介绍了,最关键的一点是4.x版本与3.x版本的变化,按官方的意思是重新写了底层. 笔记中规定: ArcGIS API for JavaScript简称AJS 使用CDN(即不配置本地环境)进行测试开发 其余根据需要进行修改.增删. 要将地图显示在h

ArcGIS API For Javascript新版本3.11中的新特性

ArcGIS API For Javascript新版本3.11中的新特性: 更简短的引用URL:如果你正在将用以前的版本的程序更新到新版本的话,这是很重要的. To update your code for version 3.11 references, replace the following URLs accordingly: /3.10/js/dojo/ should now read /3.11/ (note the dropped "/js/dojo") 将你的源码更新

ArcGIS API for JavaScript开发初探——HelloWord

1.前言 ArcGIS API for JavaScript 3.10版本使用Dojo1.9.1.dgrid升级到0.3.14版本.put-selector version版本升级到0.3.5和xstyle版本升级到0.1.3. 2.建立第一个应用程序HelloWord 2.1 .创建一个简单的HTML文档 首先我们先创建一个简单的Html文档,具体事例如下图: <!DOCTYPE html> <html> <head> <meta charset="u

ArcGIS API for JavaScript Bookmarks(书签)

说明:本篇博文介绍的是ArcGIS API for JavaScript中的 Bookmarks(书签) ,书签的作用是,把地图放大到一个地方 添加书签,书签名称可以和地图名称一直,单击标签 地图会定位到刚才选中的地方.大致就是这个意思! 有关ArcGIS API for JavaScriptde的引用文件的部署 请参考我的前面的博客 原文地址:https://blog.csdn.net/xiaokui_wingfly/article/details/8500026 1.运行效果 2.html代

初学ArcGIS API for JavaScript

初学ArcGIS API for JavaScript 对于初学者来说,关于esri提供的一些样式和dojo自带的一些样式还是需要有一定的了解,这块在<WebGIS开发从基础到实践>讲解的特别详细,在这里以笔记的形式来帮助自己加以理解和记忆. esri.css样式主要用于ESRI提供的小部件与组件,比如地图.信息框等.此外,还可以引用Dojo提供的样式表,Dojo提供了4组样式,分别是claro\tundra\soria以及nihilo,每种是一组定义用户界面的字体.颜色与大小等设置.在Arc

arcgis api for javascript 3.16开发(一)

原来一直都在用Flex开发arcgis的地图接口,用的时间很长,用的习惯也顺手,可Flex这个开发工具已经基本要淘汰了,并且地图借助flash的方式加载在浏览器里已经不能适应webgis的快速开发需求,并且在多种客户端下支持度不是很好,所以转向了html5加arcgis api for javascript的开发,用了一段时间下来,感觉还挺好的,所以分享下经验.开发javasript的唯一不好的地方就是所有对象声明的时候都要看下开发文档,不像flex,AE开发都会有提示.我的开发环境是VS201

我的ArcGIS API for Javascript

为大家贴贴最基本的地图加载: 一. API 根据Dom树上节点的 ID 确定 Map 的显示位置; 二. setBasemap 方法可得到一些ArcGIS制作好的底图,例如: "streets" , "satellite" , "hybrid", "topo", "gray", "oceans", "national-geographic", "osm&qu