您的位置:首页 > 其它

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)选择了不同的调用方法。希望有人能详细解释一下!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐