arcgis server开发地图问题—对象的多态性?

   drawtb = new esri.toolbars.Draw(map);
   measuretb=new esri.toolbars.Draw(map);
		   
		   <!-- 绘制图形 -->
		  dojo.connect(drawtb,"onDrawEnd",addToMap);
		  dojo.connect(measuretb,"onDrawEnd",measure);
         
		  
	  
      
	   <!-- 将用户绘制的几何对象加入到地图中 -->
	    function addToMap(geometry) {
     //map.graphics.clear(); 保留前面绘制
          var symbol;         
          switch (geometry.type) {
              case "point":
                  symbol = markerSymbol;
                  break;        
              case "polyline":
                  symbol = lineSymbol;
                  break;
              case "polygon":
                  symbol = fillSymbol;
                  break;
          }

          var graphic = new esri.Graphic(geometry, symbol);
          map.graphics.add(graphic);
      }
      <!-- 将用户绘制的线和面进行量测加入到地图中 -->
	 function measure(geometry) {
			map.graphics.clear();				 
							
		if(geometry.type=="polyline"){			
	var lengthParams = new esri.tasks.LengthsParameters();
                              
	map.graphics.clear();
                            //将图形添加到地图中

       lengthParams.polylines = [geometry];
    lengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_METER;
     lengthParams.geodesic = true;

        geometryService.lengths(lengthParams);//调用几何服务的函数处理
       var graphic = map.graphics.add(new esri.Graphic(geometry, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 2)));}
	   else{  var graphic = map.graphics.add(new esri.Graphic(geometry, new esri.symbol.SimpleFillSymbol())); 
                             map.graphics.clear();
                         
                               var areasAndLengthParams = new esri.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); 
                            });}
   }
...
 
<div id="draw" dojoType="dijit.form.DropDownButton" data-dojo-props="iconClass:'drawIcon'" >
            	        <!-- <span>图形绘制</span> -->
            	        <div dojoType="dijit.Menu">
                	        <div dojoType="dijit.MenuItem" label="点" >
							<script type="dojo/method" event="onClick" args="evt">
					        drawtb.activate(esri.toolbars.Draw.POINT);
						
					        </script>
							</div>
                	        <div dojoType="dijit.MenuItem" label="线" >
							<script type="dojo/method" event="onClick" args="evt">
					        drawtb.activate(esri.toolbars.Draw.POLYLINE);
						
					        </script>
							</div>
                    	    <div dojoType="dijit.MenuItem" label="面" >
							<script type="dojo/method" event="onClick" args="evt">
					        drawtb.activate(esri.toolbars.Draw.POLYGON);
							
					        </script>
							</div>
							<div dojoType="dijit.MenuItem" label="返回漫游状态">
							<script type="dojo/method" event="onClick" args="evt">					  
                          //返回标准						
							drawtb.deactivate();
							 navToolbar.activate(esri.toolbars.Navigation.PAN);
					        </script>
							</div>
			    		    <div dojoType="dijit.MenuItem" label="清除">
							<script type="dojo/method" event="onClick" args="evt">
					        map.graphics.clear();
                          //返回标准						
							drawtb.deactivate();
					        </script>
							</div>
							
            	        </div>
        	        </div>
			        <div dojoType="dijit.Tooltip" connectId="draw" showDelay="0" label="图形绘制" position="below"></div>
		        
		             
					<div id="measure" dojoType="dijit.form.DropDownButton" data-dojo-props="iconClass:'measureIcon'" >
            	        <!-- <span>量测</span> -->
            	        <div dojoType="dijit.Menu">
                	        <div dojoType="dijit.MenuItem" label="距离">
							<script type="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>
	
                	        <div dojoType="dijit.MenuItem" label="面积" >
							<script type="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>
							
							<div dojoType="dijit.MenuItem" label="返回漫游状态">
							<script type="dojo/method" event="onClick" args="evt">	
                          					
                          //返回标准						
							measuretb.deactivate();
							 navToolbar.activate(esri.toolbars.Navigation.PAN);
					        </script>
							</div>
			    		    <div dojoType="dijit.MenuItem" label="清除">
							<script type="dojo/method" event="onClick" args="evt">
					        map.graphics.clear();
                          //返回标准					  
							measuretb.deactivate();
					        </script>
							</div>
							
							
            	        </div>
        	        </div>
			        <div dojoType="dijit.Tooltip" connectId="measure" showDelay="0" label="量测(请耐心等待结果)" position="below"></div>

一直想把用户绘制图形功能和用户绘制线和面的量测功能分开,开始的时候发现定义一个drawtb总是不行,两个功能之间相互出现逻辑错误,然后定义又定义了measuretb,这两个都是new esri.toolbars.Draw(map)对象,我认为是对象的多态性,根据不同的选择对象在dojo.connect(drawtb,"onDrawEnd",addToMap);和dojo.connect(measuretb,"onDrawEnd",measure)选择了不同的调用方法。希望有人能详细解释一下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值