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 ...
随机推荐
- Cocos2d-x 3.1.1 lua-tests 开篇
Cocos2d-x 3.1.1 lua-tests开篇 本篇博客打算从研究Cocos2d-x引擎提供的測试样例来写起,笔者针对Cocos2d-x 3.1.1这个版本号来介绍怎样来学习它给我们提供的 ...
- OpenGL--第一个OpenGL程序
环境:VS2012 + OpenGL所需文件(其他IDE也可以,不一定要VS2012,VS2010或其他也可以) 步骤: 1.下载Vs2012 2.下载OpenGL所需文件 3.解压缩OpenGL包并 ...
- POJ2599+POJ2082【最大矩形面积】
题目链接:http://poj.org/problem?id=2559 题目链接:http://poj.org/problem?id=2082 这一类题目的解法,不知自己闲着没事就做了两个. 果然压栈 ...
- mysql 数据库备份ubuntu
安装 1 sudo apt-get update 2. sudo apt-get install mysql-server 3 sudo apt-get install mysql-client 4 ...
- spring Annotation 组分注塑
spring 注意分类 启动spring自己主动扫描功能 <context:component-scan/> 1.@Repository: 它用于将数据訪问层 (DAO 层 ) 的类标识为 ...
- RGB與CIELAB色彩空間轉換
原地址:http://cg2010studio.wordpress.com/2012/10/02/rgb與cielab色彩空間轉換/ 之前有研究CIE L*a*b*色彩空間,現在想更進一步探討RGB色 ...
- hello MemSQL 入门安装演示样例
一,介绍 MemSQL号称世界上最快的分布式关系型数据库,兼容mysql但快30倍,能实现每秒150万次事务.原理是仅用内存并将SQL预编译为C++. 二,部署 官网下载地址:http://www.m ...
- 在 window7 window8下公布webService注意问题
李石磊 学习日记 错误形如: 解决方式: 1.将服务公布,在IIS下创建虚拟文件夹 2.为上面创建的虚拟文件夹创建单独的应用程序,方法是右击虚拟文件夹.点击"加入应用程序...", ...
- hdu 4404 Worms(多边形与圆的交)
求出爆炸点的坐标,就成了多边形与圆相交面积的模板题了... #include<algorithm> #include<iostream> #include<cstring ...
- POJ 1422 Air Raid(二分图匹配最小路径覆盖)
POJ 1422 Air Raid 题目链接 题意:给定一个有向图,在这个图上的某些点上放伞兵,能够使伞兵能够走到图上全部的点.且每一个点仅仅被一个伞兵走一次.问至少放多少伞兵 思路:二分图的最小路径 ...