liao1992

不知道为什么  只要是地图就一定会有工具箱  工具箱就一定要有测距 侧面积 撒的。。。

还好arcgis原本就支持很多形式的工具

 

目前就一一实现一下吧

 

1. 测距 侧面

  测量距离和测量面积都差不多, 大概思路就是创建一个几何然后交给arcgis 本身的api来处理,绘制方面就使用draw类来实现,很简单的过程 开始....

       首先第一步  先创建一个可以绘制几何的draw实力对象用来完成第一步

       

      const sketchViewModel = new this.esri.SketchViewModel({
        layer: this.getLayer("系统绘制",view),
        view: view,
        polygonSymbol: {
          type: "polygon-3d", // autocasts as new PolygonSymbol3D()
          symbolLayers: [
            {
              type: "fill", // autocasts as new FillSymbol3DLayer()
              material: {
                color: [255, 255, 255, 0.8]
              },
              outline: {
                size: "3px",
                color: [82, 82, 122, 1]
              }
            }
          ]
        },
        updateOnGraphicClick: false
      })
      
      sketchViewModel.on("create",(e)=>{
        if( e.state === \'complete\' )
          sketchViewModel.update(e.graphic,{
            util: "reshape"
          })
      })

      sketchViewModel.create(type)

  这里就实现绘制和编辑的功能

 

2. 然后就是处理geometry的测量问题了

   需要用到的就是我们的老朋友了,geometryEnglish

  

geodesic ( geometry , unit ){
    if( geometry.type === \'polyline\' ){
      return esri.geometryEngine.geodesicLength(geometry, unit || 9001 ); 
}else if( geometry.type === \'polygon\' ){
   return esri.geometryEngine.geodesicArea(geometry, unit || 109404);
   }
}

    后面的单位编码 具体的官方api有详细的列表

 

OK 功能结束

 

2020 - 10 - 09 打脸来的如此之快

关于测量 实际上官方例子中已经有成熟的demo可以直接拿来使用了

https://developers.arcgis.com/javascript/latest/api-reference/esri-widgets-Measurement.html

总之已经不需要自己去辛辛苦苦处理各种单位呀  变化呀  symbol这些东西,照搬demo就行了  过于简单

 

 measure: function(div,view = window.view){
    if( !div ){
      div = document.createElement("div");
    }

    return new Promise(function(a,b){
      // 给容器内部创建 
      esriRequire([
        "esri/widgets/DirectLineMeasurement3D",
        "esri/widgets/AreaMeasurement3D"
      ]).then((argu)=>{
        var DirectLineMeasurement3D = argu[0],
            AreaMeasurement3D = argu[1];
        var activeWidget = null;
        var ret = { 
          remove: function(){
            if( activeWidget ){
              view.ui.remove(activeWidget);
              activeWidget.destroy();
              activeWidget = null;
            }
          },
          activeLine: function(){
            ret.remove();
            var activeLine = new DirectLineMeasurement3D({
              view: view
            });
            activeWidget = activeLine;
            activeLine.viewModel.newMeasurement();
            view.ui.add(activeWidget, "top-right");
          },
          activeArea: function(){
            ret.remove();
            var activeArea = new AreaMeasurement3D({
              view: view
            });
            activeWidget = activeArea;
            activeArea.viewModel.newMeasurement();
            view.ui.add(activeWidget, "top-right");
          }
        }
        a(ret)

      });
    })
  }

  以上  完结!!!

分类:

技术点:

相关文章:

  • 2021-08-09
  • 2022-12-23
  • 2022-12-23
  • 2021-05-18
  • 2021-06-15
  • 2023-01-15
  • 2021-12-23
  • 2021-07-19
猜你喜欢
  • 2021-12-10
  • 2021-12-19
  • 2021-12-20
  • 2021-08-20
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案