Cbc9eb7fe1d1241363cfdd6ea12ccb09
arcgis api 3.x for js 共享干货系列之一自写算法实现地图量算工具(附源码下载)

0.内容概览

  1. Geometry 地图服务方式实现地图距离以及面积的量算,简单描述
  2. arcgis api 提供的接口类 geometryEngine 实现地图距离以及面积的量算,简单描述
  3. 自定义距离以及面积算法方式实现地图距离以及面积的量算,重点介绍
  4. 源码下载

1. Geometry 地图服务方式

直接调用本机 ArcGIS Server 发布的 Geometry 服务:
http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer
利用该地图服务提供的函数Areas and Lengths,其中 Areas 用于量算面积,Lengths 用于量算距离,如图:

2. geometryEngine 接口类方式

利用arcgis api提供的geometryEngine 接口函数,具体参照官网的api文档介绍:geometryEngine

  • 算面积函数 geodesicArea(geometry, unit):
  • 量算距离函数 geodesicLength(geometry, unit):

3.自定义距离以及面积算法方式

自己写算法来实现距离以及面积的量算,这样的好处是不依赖ArcGIS Server 几何服务 Geometry 以及arcgis api 接口类 geometryEngine,灵活应用在WebGIS 项目中,最终的实现效果图如下:

具体实现思路

创建一个独立的js文件,里面有量算工具类 DCIMeature,DCIMeature 类构造函数传入地图对象 map

construct: function (map) {  
    this._dciMap = map;  
    this._onClickHandler = dojo.hitch(this, this._onClickHandler);  
    this._onMouseMoveHandler = dojo.hitch(this, this._onMouseMoveHandler);  
    this._onDrawEndHandler = dojo.hitch(this, this._onDrawEndHandler);  
    this._onExtentChangeHandler = dojo.hitch(this, this._onExtentChangeHandler);  
    this._onGraphicClearHandler = dojo.hitch(this, this._onGraphicClearHandler);  
    this._graphicsLayer = new esri.layers.GraphicsLayer({ id: "DciMeatureGLyr" });  
}
  • 核心测距离算法:
    ```
    DUtil.getDistanceInEarth = function (point1, point2) {
    var d = new Number(0);
    //1度等于0.0174532925199432957692222222222弧度
    //var radPerDegree=0.0174532925199432957692222222222;
    var radPerDegree = Math.PI / 180.0;
    if (DCI.Measure.map.spatialReference.wkid == "4326") {
    var latLength1 = Math.abs(this.translateLonLatToDistance({ x: point1.x, y: point2.y }).x - this.translateLonLatToDistance({ x: point2.x, y: point2.y }).x);
    var latLength2 = Math.abs(this.translateLonLatToDistance({ x: point1.x, y: point1.y }).x - this.translateLonLatToDistance({ x: point2.x, y: point1.y }).x);
top Created with Sketch.