arcgis api for js中使用d3.js标注点的属性值代替textsymbol方式
来源:互联网 发布:农村淘宝快递加盟 编辑:程序博客网 时间:2024/04/29 01:59
<img src="http://img.blog.csdn.net/20150511121805752?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhnYW9fcmF5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
</pre><pre name="code" class="javascript"><pre name="code" class="html"><body> <div id="mapDiv"> </div></body><script src="http://localhost:3000/content/public/webgit/jslib/esri/api/init.js"></script><script type="text/javascript">require([ 'esri/map', 'esri/layers/GraphicsLayer', 'esri/geometry/Point', 'esri/symbols/TextSymbol', 'esri/graphic', 'esri/symbols/SimpleFillSymbol', 'esri/Color', 'esri/symbols/SimpleMarkerSymbol', 'dojo/on', 'esri/SpatialReference', 'keepsoft/gis/extlayers/D3AnnoLayer', 'dojo/domReady!'], function(Map, GraphicsLayer, Point, TextSymbol, Graphic, SimpleFillSymbol, Color, SimpleMarkerSymbol, on, SpatialReference, AnnoLayer){ var map = new Map('mapDiv', { basemap: "topo", center: [120,30], zoom: 4, sliderStyle: "small" }); var lyr = new GraphicsLayer({ id:'textGraphicsLayer' }); map.addLayer(lyr); on(map, 'load', function(){ var point = new Point(120, 30, new SpatialReference(4326)); var symbol = new SimpleMarkerSymbol('circle'); var g = new Graphic(point, symbol, { stcd:'aaa', stnm:'bbb' }); lyr.add(g); var d3AnnoLayer = new AnnoLayer(map, lyr, { rectWidth:160, labelDx:10 }); d3AnnoLayer.init(); }) })</script>
</pre><pre name="code" class="javascript">define('keepsoft/gis/extlayers/D3AnnoLayer',['dojo/_base/declare','dojo/_base/lang','d3/d3','dojo/on','esri/Evented','esri/geometry/screenUtils'],function(declare, lang, d3js, on, Evented, screenUtils){var d = declare([Evented], {declaredClass:'keepsoft.gis.extlayers.D3AnnoLayer',_eventMap:{},option:{labelFields:['stcd','stnm'],labelPrifixes:['编码:','名称:'],labelSuffixes:['',''],rectRadius:5,rectWidth:120,rectOffsetX:0,rectOffsetY:16,rectFillColor:'rgba(20,20,20,0.4)',rectStrokeColor:'rgba(255,255,255,1)',rectStrokeWidth:2,labelHeigth:23,labelVerticalAlign:4,labelsPaddingTop:2,labelsPaddingBottom:2,labelsPaddingLeft:2,labelsPaddingRight:2,fontSize:24,fontColor:'rgba(220,20,20,1)',labelDx:20},constructor:function(map, graphicsLayer, opt){//1.全局参数this.map = map;this.graphicsLayer = graphicsLayer;//2.合并参数lang.mixin(this.option, opt);//3.创建svg groupthis.domId = this.graphicsLayer.id+'-d3anno';d3js.select('#'+this.map.id+'_gc').append('g').attr({'id':this.domId});},init:function(){var map = this.map;on(map, 'pan', lang.hitch(this, this._pan));on(map, 'zoom-start', lang.hitch(this, this._zoomStart));on(map, 'zoom-end', lang.hitch(this, this._zoomEnd));this._initialize();},_initialize:function(){this._removeAllChildren();this._draw();},_removeAllChildren:function(){dojo.empty(this.domId);},_draw:function(){if (!this.option.labelFields){return;}for (var i =0; i < this.graphicsLayer.graphics.length; i++){var g = this.graphicsLayer.graphics[i];this._drawBgShape(g);this._drawText(g);}},_drawBgShape:function(graphic){var geometry = graphic.geometry;var o = this.option;var labelNum = o.labelFields.length;var shapeHeight = o.labelsPaddingTop + (o.fontSize+o.labelVerticalAlign)*labelNum + o.labelsPaddingBottom;var shapeWidth = o.rectWidth;var x = 0, y=0;var map = this.map;var mapExtent = map.extent;var mapWidth = map.width;var mapHeight = map.height;var xy = screenUtils.toScreenPoint(mapExtent, mapWidth, mapHeight, geometry);var _mvr = map.__visibleRect;x = xy.x - _mvr.x - shapeWidth/2 + o.rectOffsetX;y = xy.y - _mvr.y + o.rectOffsetY;/*console.log(xy);console.log(_mvr);console.log(shapeHeight);*/d3js.select('#'+this.domId).append('rect').attr({'x':x,'y':y,'width':shapeWidth,'height':shapeHeight,'fill':o.rectFillColor,'stroke':o.rectStrokeColor,'stroke-width':o.rectStrokeWidth,'rx':o.rectRadius,'ry':o.rectRadius})},_drawText:function(graphic){var geometry = graphic.geometry;var o = this.option;var labelNum = o.labelFields.length;var shapeHeight = o.labelsPaddingTop + (o.fontSize+o.labelVerticalAlign)*labelNum - o.labelAlign + o.labelsPaddingBottom;var shapeWidth = o.rectWidth;var x = 0, y=0;var map = this.map;var mapExtent = map.extent;var mapWidth = map.width;var mapHeight = map.height;var xy = screenUtils.toScreenPoint(mapExtent, mapWidth, mapHeight, geometry);var _mvr = map.__visibleRect;x = xy.x - _mvr.x -shapeWidth/2 + o.rectOffsetX;y = xy.y - _mvr.y + o.rectOffsetY;var node = d3js.select('#'+this.domId);var labelNum = o.labelFields.length;for (var i=0; i < labelNum; i++){var labelX = x + o.labelsPaddingLeft || 0;var labelY = y + o.labelsPaddingTop+o.fontSize+(o.fontSize+o.labelVerticalAlign)*i || 0;var fstring = graphic.attributes[o.labelFields[i]] || '';var prefix = o.labelPrifixes[i] || '';var suffix = o.labelSuffixes[i] || '';var text = prefix + fstring + suffix;node.append('text').attr({'x':labelX,'y':labelY,'fill':o.fontColor,'font-size':o.fontSize,'dx':o.labelDx}).text(text);}},_pan:function(e){//console.log(e);var dx = e.delta.x;var dy = e.delta.y;var _dx = this.map.__visibleRect.x+dx;var _dy = this.map.__visibleRect.y+dy;d3.select('#'+this.domId).attr({'transform':'matrix(1,0,0,1,'+_dx+','+_dy+')'})},_zoomStart:function(){this._removeAllChildren();},_zoomEnd:function(){d3.select('#'+this.domId).attr({'transform':'matrix(1,0,0,1,0,0)'})this._draw();}});return d;})
使用d3.js创建svg,通过侦听map的事件,重绘svg,实现对graphic要素在地图上的标注。
希望对大家有用。
0 0
- arcgis api for js中使用d3.js标注点的属性值代替textsymbol方式
- arcgis api for flex 设置 TextSymbol 竖排字 道路标注
- ArcGIS API For JS 文本标注换行
- Arcgis for Android解决标注TextSymbol中文字体乱码的问题
- ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用
- ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用
- arcgis js api改进textSymbol不能显示多行的不足
- ArcGIS API for JS 中,三种查询方式
- 扩展ArcGIS API for Silverlight/WPF 中的TextSymbol支持角度标注
- ArcGIS API for Silverlight 动态添加点的同时,添加文字说明(利用TextSymbol添加多文字信息 )
- ArcGIS API for Silverlight 动态添加点的同时,添加文字说明(利用TextSymbol添加多文字信息 )
- arcgis for js文本标注背景设置
- arcgis for js FeatureLayer文字标注
- ArcGIS API For Js 的PopTemplete擴展
- 第二篇 arcgis api for js 根据坐标生成点
- 第二篇 arcgis api for js 根据坐标生成点 .
- 《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码
- JS API TextSymbol IE 乱码问题
- myeclipse导出jar文件
- cadence 16.5 激活
- 第四次作业
- 轻松搞定面试中的二叉树题目
- 河南省第八届程序设计大赛有感
- arcgis api for js中使用d3.js标注点的属性值代替textsymbol方式
- 从终端读取一行数据,fgets,gets,c++ string类定义的getline
- c++枚举类型
- (10-1)redis 安装、配置
- 设计模式(9)——Decorator(装饰)模式
- asp .net mvc ajax 传值到后台,并放回JSon值解析
- 一个例子说明C语言和Java的区别
- Jmeter启用英文界面
- 4.linux复习---exec函数族