ArcGIS Web客户端开发(四)处理事件和消息
来源:互联网 发布:护手霜 知乎 编辑:程序博客网 时间:2024/06/06 00:23
四、处理事件和消息
(1)地图有关的事件
和Map有关的事件,常用的主要有”load \unload \layer-add \layer-remove \click\dbl-click、mouse-down \mouse-move \mouse-up \ key-down \key-up”等,前面已经接触到不少次”load”事件的应用了。下面是鼠标在地图上单击事件的例子,功能很简单,就是单击后弹出对话框显示处单击的屏幕位置坐标和地理位置坐标:
...
map.on( "click", myClickHandler);
...
function myClickHandler(evt) {
alert("User clicked at " +
evt.screenPoint.x + ", " + evt.screenPoint.y +
" on the screen. The map coordinate at this point is " +
evt.mapPoint.x + ", " + evt.mapPoint.y
);
}
...
(2)特定Layer有关的事件
特别是GraphicLayer等用户放置业务数据的图层,常用的主要有\click\dbl-click\mouse-over \ graphic-add \graphic-remove\graphic-draw等,前三个一般用来查询图上目标,后两个通常用于数据变化后是否保存图形等处理,graphic-draw则用来控制显示的刷新,这里的刷新除非是图上数据变化导致应用据数需要重新导入,导致显示可能需要自行变化,才需要处理,否则,一般arcgis都给你做好了,不需费心。
...
//open图层
var incidentLayer = new FeatureLayer(
"https://sampleserver3.arcgisonline.com/ArcGIS/rest/services/SanFrancisco/311Incidents/FeatureServer/0", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields: ["*"],
id: "incidentLayer"
});
incidentLayer.setSelectionSymbol(
new SimpleMarkerSymbol().setColor(new Color("red"))
);
map.addLayers([incidentLayer]);
...
//设置图层目标单击事件处理程序
//这里是事件关联与处理程序定义在一起的做法。
incidentLayer.on("click", function(evt) {
graphicAttributes = evt.graphic.attributes;
title = graphicAttributes.req_type;
content = "<b>Date Reported: </b>" + graphicAttributes.req_date
+ "<br><b>Address: </b>" + graphicAttributes.address
+ "<br><b>District: </b>" + graphicAttributes.district;
relatedQuery.objectIds = [graphicAttributes.objectid];
incidentLayer.queryRelatedFeatures(relatedQuery, function(relatedRecords) {
var fset = relatedRecords[graphicAttributes.objectid];
var count = (fset) ? fset.features.length : 0;
content = content + "<br><hr><br><i><span id='numPeople'>" + count +
"</span> people think this is important.</i>";
content = content + "<br><br><img style='cursor:pointer' src='images/thumbsup.jpeg' onclick='voteOnIncident(" + graphicAttributes.objectid + ");'>";
map.infoWindow.setTitle(title);
map.infoWindow.setContent(content);
map.infoWindow.show(evt.screenPoint, map.getInfoWindowAnchor(evt.screenPoint));
});
});
}
....
(3)图形绘制事件
图形最重要的事件消息处理,是在图形的绘制编辑中。在交互输入中,esri/toolbars/draw提供有关绘制动作处理函数,esri/toolbars/Edit 提供目标图形编辑处理函数,这两个包提供的事件和编辑能力是极为重要的,要重点掌握。
处理绘制动作事件的过程主要是:
...
//引入Draw模块
require([ "esri/Darw", ... ], function(Draw, ... ){
var tb;
...
tb = new Draw(map);
//关联draw-end事件处理对象
tb.on("draw-end", addGraphic);
//选中激活绘图工具
tb.activate(“point”); //画点
...
//定义绘制结束事件处理函数
//将数据存入GraphicaLayer中。
function addGraphic(evt) {
//deactivate the toolbar and clear existing graphics
tb.deactivate();
map.enableMapNavigation();
// figure out which symbol to use
var symbol;
if (evt.geometry.type === "point" || evt.geometry.type === "multipoint") {
symbol = markerSymbol;
} else if (evt.geometry.type === "line" || evt.geometry.type === "polyline") {
symbol = lineSymbol;
}
else {
symbol = fillSymbol;
}
//创建图形对象加到地图缺省的GraphicLayer中
//实际上,应在自己的服务器上创建一个
//可保存的GraphicLayer
map.graphics.add(new Graphic(evt.geometry, symbol));
}
...
});
绘制工具最常用的绘制动作包括这些类型,point、multipoint、line、polyline、freehandpolyline、triangle、rectangle、circle、ellipse、polygon、freehandpolygon、arrow等。
(4)图形编辑事件
处理编辑动作的主要过程是:
....
require([ "esri/toolbars/edit", "dojo/_base/event", "dojo/parser",...],
function ( Edit, event, parser,... ) {
...
//创建编辑工具
var editTb = new Edit(map);
...
//单击选中目标时激活编辑工具
map.graphics.on("click", function (evt) {
//检查没有处于绘图状态
if (!drawediting) {
event.stop(evt);
//设置编辑工具可以具备的编辑动作类型
var tool = 0;
tool = tool | Edit.MOVE | Edit.EDIT_VERTICES | Edit.SCALE | Edit.EDIT_TEXT;
editTb.activate(tool, evt.graphic);
}
});
//当单击非目标上时,取消编辑工具
map.on("click", function (evt) {
if (!drawediting)
editTb.deactivate();
});
....
上述过程,已经基本能够完成绝大多数图形编辑的工作,如果在编辑完成后还需要进一步做工作,则需要通过监视Layer的事件进行相关的进一步处置,如保存数据等。
- ArcGIS Web客户端开发(四)处理事件和消息
- ArcGIS Web客户端开发(一)开发环境准备
- ArcGIS Web客户端开发(二)打开地图
- ArcGIS Web客户端开发(附录)关于Dojo的基本知识
- Bootstrap navbar 背景颜色、背景图和字体颜色修改 ArcGIS Web 开发学习(四)
- windows的开发流程--事件通知和消息处理
- 事件处理和消息响应
- ArcGIS客户端开发学习笔记(四)——Dojo基础
- 使用CXF开发web service 的客户端 (四)
- ArcGIS Web客户端开发(三)在地图上绘制图形
- ArcGIS API for JavaScript获取和配置-ArcGIS Web 开发学习(一)
- arcgis客户端开发---查询
- Android游戏开发框架(四)按键事件处理
- MySql错误处理(四)- 错误代码和消息
- MySql错误处理(四)- 错误代码和消息
- 微信公众号的开发之 回复用户消息和事件响应(四)
- Web客户端和服务器端事件交互问题
- 微信开发<四> 事件处理
- 0511
- Spring第三天主要 讲解spring整合JDBC操作
- 面试6
- MyBatis框架的学习(一)——MyBatis介绍
- NDK探究之旅《五》——指针和数组之间的关系
- ArcGIS Web客户端开发(四)处理事件和消息
- 服务器环境搭建【三】
- 并查集入门 hud1213 poj2236
- inet_addr函数、inet_aton函数、inet_network函数
- 动物识别专家系统
- File的运用
- [TensorFlow 学习笔记-01]Windows下TensorFlow(Only CPU)安装
- Linux下C语言的执行过程
- 深度学习中相关概念详解