arcgis js开发系列源码请移步我的github上获取(https://github.com/lpgray/arcgis-js-showcase

本次开发实现的功能:

  1. 在地图上绘制多边形
  2. 调用GeometryService及利用Measurement Widget进行面积及长度量算

本次开发涉及到的要点:

Toolbars Draw, Measurement, GeometryTask

绘制多边形

在地图上绘制多边形相当简单,三行代码就可以实现,主要是利用 esri.toolbars.Draw 这个类,通过传递 map 对象进行实例化,具体代码如下,成功运行这三行代码就可以绘制图形了,这里是绘制的规则多边形,此外还有其他种类的图形,在此不一一贴出,请至官网查阅。

function initGeometryTool(){
  var tb = new esri.toolbars.Draw(map);
  dojo.connect( tb, 'onDrawEnd', drawEnd );
  tb.activate(esri.toolbars.Draw.POLYGON);
}

面积及长度的量算

在完成上一步的多边形绘制,通常的 GIS 应用中就会使用绘制的图形进行测量,目前 2D 的应用基本上就是长度与面积的测量。在此次学习中,我根据官方教程实现了两种测两方式,一种是调用 ArcGIS Server 发布的 GeometryService 进行量算,一种是使用 Measurement 组件进行量算,我不是特别明白这两种的区别在哪,是否 GeometryService 更精确些?

上面是我用GeometryService实现的效果,实际上Measurement更友好,因为是跟着鼠标的运动实时量算的。Measurement实现起来相当简单,你实例化一个Measurement对象就可以直接用了,甚至不用去构造多边形的Draw Toolbar,今天我主要记录一下我的GeometryService的实现过程。

  1. 构造地图、构造Draw实例
  2. 构造AreasAndLengthsParameters参数,构造GeometryServiceTask.
  3. 通过draw实例绘制图形,添加onDrawEnd事件处理
  4. 在onDrawEnd事件处理中获取绘制的几何图形,然后添加到map实例上,同时调用GeometryServiceTask实例的simplify方法对绘制的几何图形进行参数转化以便ArcGIS Service进行分析量算。
  5. 转化完参数以后调用GeometryServiceTask的areasAndLengths方法进行量算,回调处理结果

大致的步骤就是这些,有些细节需要注意一下。其实大体上js的事件编程机制很好理解,再加上ArcGIS封装了各种事件处理方法,很方便开发人员调用,这里主要强调一下onDrawEnd的处理。

function drawEnd( geometry ){ // drawEnd会直接生成一个几何对象传递进来
  map.graphics.clear();
  var graphic = map.graphics.add(new esri.Graphic(geometry, new esri.symbol.SimpleFillSymbol()));
o
  geoService.simplify([geometry], function(simplifiedGeometries) {
    geoServiceParams.polygons = simplifiedGeometries;
    geoService.areasAndLengths(geoServiceParams);
  });
}