Arcgis for Js之Graphiclayer扩展具体解释
在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种不同的聚类都是通过扩展esri/layers/GraphicsLayer方法来实现的。在本节,就具体的讲讲esri/layers/GraphicsLayer方法的扩展。
首先。在解说扩展之前,先看看API中esri/layers/GraphicsLayer的一些參数和方法等。
1、创建一个GraphicLayer
在ESRI官方的API中,创建GraphicLayer有两种方式:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvR0lTU2hpWGlTaGVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
比如:
或者:
在另外一种方式的options的參数包含:
2、GraphicLayer的属性
GraphicLayer的属性包含:
当中,有几个比較常见和重要的属性为:
a、graphics:数组,返回的參数是一个数组,为GraphicLayer中包括的Graphic对象。
b、visiable:布尔型,Graphiclayer是否可见。
c、visiableAtMapScale:布尔型。在特定比例尺下的可见性。
3、Graphiclayer的方法
图中,红框标出的是Graphiclayer最经常使用的方法,具体的介绍非常清楚。在此不再做赘述了。
接下来,扩展Graphiclayer。
GraphicLayer藏得非常深,位于library\3.9\3.9\js\esri\layers\GraphicsLayer.js。尽管对參数变量代码做了混淆,可是有些东西还是没做变化。在做GraphicLayer扩展时,有几个是比較经常使用的:
a、_setMap
// 重构esri/layers/GraphicsLayer方法
_setMap: function(map, surface) {
// GraphicsLayer will add its own listener here
var div = this.inherited(arguments);
return div;
}
b、_unsetMap
_unsetMap: function() {
this.inherited(arguments);
}
c、_draw
_draw:function(graphic, redrawFlag, zoomFlag){
if (!this._map) {
return;
}
}
此外。另一些地图控制的,如:_onPanStartHandler。_onZoomStartHandler,_onExtentChangeHandler等。
扩展GraphicLayer的大概框架代码例如以下:
define([
"dojo/_base/declare",
"esri/layers/GraphicsLayer"
], function (
declare,
GraphicsLayer
) {
return declare([GraphicsLayer], {
constructor: function(options) {
//參数设置
this._id = options.id || "";
this._divId = options.chartDiv || "chart";
},
// 重构esri/layers/GraphicsLayer方法
_setMap: function(map, surface) {
// GraphicsLayer will add its own listener here
var div = this.inherited(arguments);
return div;
},
_unsetMap: function() {
this.inherited(arguments);
},
//拖拽
_onPanStartHandler: function() {
//
},
//缩放
_onZoomStartHandler:function(){
//
},
_onExtentChangeHandler: function(delta, extent, levelChange, lod) {
//
},
_draw:function(graphic){
if (!this._map) {
return;
}
//
}
});
});
样例:加入统计图
统计图通过dojo chart实现,代码例如以下:
define([
"dojo/_base/declare",
"esri/layers/GraphicsLayer",
"esri/geometry/Point",
"esri/graphic",
"dojox/charting/Chart2D",
"dojox/charting/themes/PlotKit/blue",
"dojox/charting/action2d/Highlight",
"dojox/charting/action2d/Tooltip"
], function (
declare,
GraphicsLayer,
Point,
Graphic,
Chart2D,
theme,
Highlight,
Tooltip
) {
return declare([GraphicsLayer], {
constructor: function(options) {
this._id = options.id || "";
this._divId = options.chartDiv || "chart";
this._charttype = options.chartType || "Pie";
this._chartSize = options.size || 50;
},
// 重构esri/layers/GraphicsLayer方法
_setMap: function(map, surface) {
// GraphicsLayer will add its own listener here
var div = this.inherited(arguments);
return div;
},
_unsetMap: function() {
this.inherited(arguments);
},
hide: function() {
dojo.style(dojo.byId(this._divId),{
"display": "none"
});
},
show: function() {
dojo.style(dojo.byId(this._divId),{
"display": ""
});
},
//拖拽
_onPanStartHandler: function() {
this.hide();
},
//缩放
_onZoomStartHandler:function(){
this.hide();
},
_onExtentChangeHandler: function() {
this._refresh(true);
},
_refresh: function(redraw) {
var that=this;
var gs = this.graphics,
_draw = this._draw; for (i = 0; i < gs.length; i++) {
_draw(gs[i], redraw);
}
this.show();
},
_draw:function(graphic, redraw){
if (!this._map) {
return;
}
if(graphic instanceof Graphic)//推断graphic是否为MapChartGraphic类型
{
this._drawChart(graphic,redraw);
}
},
_drawChart:function(graphic,redraw){
var showMapPt = graphic.geometry,
attribute = graphic.attributes;
var showPt = map.toScreen(showMapPt);
var id=attribute.code,
series = [attribute.male, attribute.female];
if(redraw){
dojo.byId(this._divId).removeChild(dojo.byId("div"+id));
}
if(attribute){
var _chartDiv = dojo.doc.createElement("div");
_chartDiv.id ="div"+id;
dojo.style(_chartDiv, {
"left": (showPt.x-this._chartSize/4) + "px",
"top": (showPt.y-this._chartSize/2) + "px",
"position": "absolute",
"width": this._chartSize + "px",
"height": this._chartSize + "px"
});
dojo.byId(this._divId).appendChild(_chartDiv); var _chart = new Chart2D(_chartDiv);
var _themes = dojox.charting.themes.PlotKit.blue;
_themes.chart.fill = "transparent";
_themes.chart.stroke = "transparent";
_themes.plotarea.fill = "transparent";
_chart.setTheme(_themes);
switch(this._charttype){
case "Pie":{//饼状图
_chart.addPlot("default", {
type: this._charttype,
labels:false
});
break;
}
case "StackedColumns":{//柱状堆积图
_chart.addPlot("default", {
type: this._charttype,
labels:false,
markers: true,
gap: 2
});
break;
}
case "Lines":{//柱状堆积图
_chart.addPlot("default", {
type: this._charttype,
labels:false,
markers: true,
radius: 1,
tension:"X"
});
break;
}
default:{//柱状图
_chart.addPlot("default", {
type: this._charttype,
labels:false,
gap: 3
});
chart.addAxis("y", { vertical:true, fixLower: "major", fixUpper: "major" });
break;
}
}
_chart.addSeries(id, series,{stroke: {width:1}});
//效果
new Highlight(_chart, "default", {highlight: "lightskyblue"});
new Tooltip(_chart, "default");
_chart.render();
}
}
});
});
实现后的效果例如以下:
源代码下载地址:
链接:http://pan.baidu.com/s/1i3EbnF3 password:cvbf
如有疑问,请联系:
QQ:1004740957
E-Mail:niujp08@qq.com
Arcgis for Js之Graphiclayer扩展具体解释的更多相关文章
- Arcgis for Js之Graphiclayer扩展详解
在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种不同的聚类都是通过扩展esri/layers/GraphicsLayer方法来实现的.在本节,就详细的讲讲esri/la ...
- (转)Arcgis for Js之Graphiclayer扩展详解
http://blog.csdn.net/gisshixisheng/article/details/41208185 在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种 ...
- Arcgis for Js实现graphiclayer的空间查询
本节讲的是Arcgis for Js的针对graphiclayer的空间查询,内容很简单,代码如下: <!DOCTYPE html> <html> <head> & ...
- Arcgis for Js实现graphiclayer的空间查询(续)
上文中,实现了简单的针对graphiclayer的空间查询工作,在本节,将更加详细的介绍针对graphiclayer的空间查询.首先,空间查询的方式:提供多种类型的空间查询,包括点周边.线周边.面内等 ...
- Arcgis for JS之Cluster聚类分析的实现(基于区域范围的)
原文:Arcgis for JS之Cluster聚类分析的实现(基于区域范围的) 咱们书接上文,在上文,实现了基于距离的空间聚类的算法实现,在本文,将继续介绍空间聚类之基于区域范围的实现方式,好了,闲 ...
- Arcgis for JS之Cluster聚类分析的实现
原文:Arcgis for JS之Cluster聚类分析的实现 在做项目的时候,碰见了这样一个问题:给地图上标注点对象,数据是从数据库来 的,包含XY坐标信息的,通过graphic和graphicla ...
- (译+注解)node.js的C++扩展入门
声明:本文主要翻译自node.js addons官方文档.部分解释为作者自己添加. 编程环境: 1. 操作系统 Mac OS X 10.9.51. node.js v4.4.22. npm v3.9. ...
- arcgis for js开发之路径分析
arcgis for js开发之路径分析 //方法封装 function routeplan(x1, x2, y1, y2, barrierPathArray, isDraw, callback) { ...
- Arcgis for js开发之直线、圆、箭头、多边形、集结地等绘制方法
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
随机推荐
- C++编程命名规范
原地址:http://www.cnblogs.com/joinclear/archive/2013/02/21/2921422.html C++编程命名规范 0前言 根据多年工作经验和其它命名规范整理 ...
- PostgreSQL代码分析,查询优化部分,pull_ands()和pull_ors()
PostgreSQL代码分析,查询优化部分. 这里把规范谓词表达式的部分就整理完了,阅读的顺序例如以下: 一.PostgreSQL代码分析,查询优化部分,canonicalize_qual 二.Pos ...
- Notifications(通知)
通知 通知是能在应用的普通用户界面外显示给用户的一种消息. 当你告诉系统公布一条通知时,它首先在通知栏中表现为一枚图标. 用户打开通知抽屉后就能查看通知的细节了. 通知栏和通知抽屉都是由系统控制的区域 ...
- three.js是JavaScript编写的WebGL第 三方库
three.js是JavaScript编写的WebGL第 三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机.光影.材质 ...
- poj 2299 树状数组求逆序数+离散化
http://poj.org/problem?id=2299 最初做离散化的时候没太确定可是写完发现对的---由于后缀数组学的时候,,这样的思维习惯了吧 1.初始化as[i]=i:对as数组依照num ...
- Hadoop-2.4.0安装和wordcount执行验证
Hadoop-2.4.0安装和wordcount执行验证 下面描写叙述了64位centos6.5机器下,安装32位hadoop-2.4.0,并通过执行 系统自带的WordCount样例来验证服务正确性 ...
- HttpApplication处理对象与HttpModule处理模块
HttpApplication处理对象与HttpModule处理模块 (第三篇) 一.HttpApplication对象简述 在HttpRuntime创建了HttpContext对象之后,HttpRu ...
- HDOJ 5276 YJC tricks time multimap
multimap的使用 YJC tricks time Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/262144 K ...
- [ACM] POJ 3259 Wormholes (bellman-ford最短路径,推断是否存在负权回路)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 29971 Accepted: 10844 Descr ...
- 堆栈帧的组织——C/C++内存管理必须掌握
程序栈 说到堆栈帧,你得先说说程序栈. 记忆功能程序堆栈区是支持操作,通常共享堆. 程序栈通常占领内存区域的下部,而堆用的是上部. 程序栈存放栈帧,栈帧有时候也称为活跃记录或活跃帧.栈帧存放函数參数和 ...