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)选择了不同的调用方法。希望有人能详细解释一下!