arcgis server开发地图问题—对象的多态性?
2012-11-05 21:45
302 查看
drawtb=newesri.toolbars.Draw(map);
measuretb=newesri.toolbars.Draw(map); <!--绘制图形--> dojo.connect(drawtb,"onDrawEnd",addToMap); dojo.connect(measuretb,"onDrawEnd",measure); <!--将用户绘制的几何对象加入到地图中--> functionaddToMap(geometry){ //map.graphics.clear();保留前面绘制 varsymbol; switch(geometry.type){ case"point": symbol=markerSymbol; break; case"polyline": symbol=lineSymbol; break; case"polygon": symbol=fillSymbol; break; } vargraphic=newesri.Graphic(geometry,symbol); map.graphics.add(graphic); } <!--将用户绘制的线和面进行量测加入到地图中-->
functionmeasure(geometry){ map.graphics.clear(); if(geometry.type=="polyline"){ varlengthParams=newesri.tasks.LengthsParameters(); map.graphics.clear(); //将图形添加到地图中 lengthParams.polylines=[geometry]; lengthParams.lengthUnit=esri.tasks.GeometryService.UNIT_METER; lengthParams.geodesic=true; geometryService.lengths(lengthParams);//调用几何服务的函数处理 vargraphic=map.graphics.add(newesri.Graphic(geometry,newesri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,newdojo.Color([255,0,0]),2)));} else{vargraphic=map.graphics.add(newesri.Graphic(geometry,newesri.symbol.SimpleFillSymbol())); map.graphics.clear(); varareasAndLengthParams=newesri.tasks.AreasAndLengthsParameters(); areasAndLengthParams.lengthUnit=esri.tasks.GeometryService.UNIT_FOOT; areasAndLengthParams.areaUnit=esri.tasks.GeometryService.UNIT_ACRES; geometryService.simplify([geometry],function(simplifiedGeometries){ areasAndLengthParams.polygons=simplifiedGeometries; geometryService.areasAndLengths(areasAndLengthParams); });} }
...
<divid="draw"dojoType="dijit.form.DropDownButton"data-dojo-props="iconClass:'drawIcon'">
<!--<span>图形绘制</span>-->
<divdojoType="dijit.Menu">
<divdojoType="dijit.MenuItem"label="点">
<scripttype="dojo/method"event="onClick"args="evt">
drawtb.activate(esri.toolbars.Draw.POINT);
</script>
</div>
<divdojoType="dijit.MenuItem"label="线">
<scripttype="dojo/method"event="onClick"args="evt">
drawtb.activate(esri.toolbars.Draw.POLYLINE);
</script>
</div>
<divdojoType="dijit.MenuItem"label="面">
<scripttype="dojo/method"event="onClick"args="evt">
drawtb.activate(esri.toolbars.Draw.POLYGON);
</script>
</div>
<divdojoType="dijit.MenuItem"label="返回漫游状态">
<scripttype="dojo/method"event="onClick"args="evt">
//返回标准
drawtb.deactivate();
navToolbar.activate(esri.toolbars.Navigation.PAN);
</script>
</div>
<divdojoType="dijit.MenuItem"label="清除">
<scripttype="dojo/method"event="onClick"args="evt">
map.graphics.clear();
//返回标准
drawtb.deactivate();
</script>
</div>
</div>
</div>
<divdojoType="dijit.Tooltip"connectId="draw"showDelay="0"label="图形绘制"position="below"></div>
<divid="measure"dojoType="dijit.form.DropDownButton"data-dojo-props="iconClass:'measureIcon'">
<!--<span>量测</span>-->
<divdojoType="dijit.Menu">
<divdojoType="dijit.MenuItem"label="距离">
<scripttype="dojo/method"event="onClick"args="evt">
measuretb.activate(esri.toolbars.Draw.FREEHAND_POLYLINE);
dojo.connect(geometryService,"onLengthsComplete",function(result){
dojo.byId("distance").innerHTML=dojo.number.format(result.lengths[0]/1000)+"千米";
dijit.byId("distancedialog").show();
});
</script>
</div>
<divdojoType="dijit.MenuItem"label="面积">
<scripttype="dojo/method"event="onClick"args="evt">
measuretb.activate(esri.toolbars.Draw.FREEHAND_POLYGON);
dojo.connect(geometryService,"onAreasAndLengthsComplete",function(result){
dojo.byId("area").innerHTML=result.areas[0].toFixed(3)+"acres";
dojo.byId("length").innerHTML=result.lengths[0].toFixed(3)+"feet";
dijit.byId("areadialog").show();
});
</script>
</div>
<divdojoType="dijit.MenuItem"label="返回漫游状态">
<scripttype="dojo/method"event="onClick"args="evt">
//返回标准
measuretb.deactivate();
navToolbar.activate(esri.toolbars.Navigation.PAN);
</script>
</div>
<divdojoType="dijit.MenuItem"label="清除">
<scripttype="dojo/method"event="onClick"args="evt">
map.graphics.clear();
//返回标准
measuretb.deactivate();
</script>
</div>
</div>
</div>
<divdojoType="dijit.Tooltip"connectId="measure"showDelay="0"label="量测(请耐心等待结果)"position="below"></div>
一直想把用户绘制图形功能和用户绘制线和面的量测功能分开,开始的时候发现定义一个drawtb总是不行,两个功能之间相互出现逻辑错误,然后定义又定义了measuretb,这两个都是newesri.toolbars.Draw(map)对象,我认为是对象的多态性,根据不同的选择对象在dojo.connect(drawtb,"onDrawEnd",addToMap);和dojo.connect(measuretb,"onDrawEnd",measure)选择了不同的调用方法。希望有人能详细解释一下!
相关文章推荐
- MapGuide open source开发系列教程五: 屏幕坐标与地图坐标(问题)已修改
- 在开发环境中常遇到更改存储过程、函数、视图等对象,解决SQL Server2005里sp_helptext输出格式错行问题
- 在实际开发中碰到的小问题,保存数据时提示:对象必须实现 IConvertible
- ArcGIS Server ADF开发:地图配置:美丽的新疆地图
- Android 百度地图开发之地图不刷新问题解决
- ArcGIS Server发布移动地图服务(mobile data access)时的问题
- [WEB前端开发]-关于Velocity中Map与List操作-解决velocity无法识别Map对象key的问题
- flex地图开发的跨域问题
- Hibernate开发实践笔记--对象在set属性时更新了数据库问题
- [地图SkyLine二次开发]关于IE内存限制问题(1G)......(续)
- 在开发环境中常遇到更改存储过程、函数、视图等对象,解决SQL Server2005里sp_helptext输出格式错行问题
- PHP面向对象开发,关于调用父类构造器的问题
- 百度地图开发------基础地图篇------缩放空间和比例尺控件移动位置无效问题
- Flex开发ArcGIS问题集锦三:如何发布地图(一)
- [转]前端开发问题之字符串日期转日期对象在safari浏览器中出现Invalid Date
- Android 百度地图开发问题----解决地图有时候加载不出来问题
- 今天终于解决了一个头痛了两天的地图开发问题
- Android 百度地图开发问题----解决地图有时候加载不出来问题
- 移动开发学习第一发:基于百度地图开发地图显示时遇到的问题总结
- 安卓-开发常见问题之串行化对象进入Service