Arcgis for js3.x到Arcgis for js4.x基本用法

509 阅读2分钟

背景

初次接触到arcgis还是3.x版本,接手的项目是公司大佬们已经弄得差不多的项目,在项目上看看arcgis3.x是怎么用的,里面的api是怎么配的,在差不多可以自己运用一些简单的arcgis的时候,公司正好说要重构其中的某个项目,原本想着只是简单的简化之前项目的代码复杂度,在已有的逻辑上再简化,优化Dom,没想到UI构建的原图上,地图需要的arcgis4.x才能实现。

查看官方给的api

developers.arcgis.com/javascript/…

这里面给的是arcgis3.x API在arcgis4.x中的样子,

使用Arcgis4.x的常规操作之一

注意: arcgis4.x与3.x其中的不同点之一就是当你使用其中某个api市需要单独引用,而不是3.x中的全部引用

methods: {
    // 地图
    initMap() {
      const options = 
        url:'引入arcgis4.x服务,可以是在本地上的也可以是线上服务'
         //'arcgis_js_v413_sdk/arcgis_js_api/library/4.13/init.js'
 
      }
      // 将田地图转换成arcgis中的地图
      loadModules(
        [
          // 此处的组件按自己的需求加载
          'esri/Map',
          'esri/views/MapView',
          'esri/layers/TileLayer',
          'esri/layers/MapImageLayer',
          'esri/Graphic',
          'esri/layers/GraphicsLayer',
          'esri/symbols/SimpleFillSymbol',
          'esri/tasks/GeometryService',
          'esri/tasks/support/AreasAndLengthsParameters',
          'esri/geometry/geometryEngine',
          'esri/tasks/support/IdentifyParameters',
          'esri/tasks/IdentifyTask',
          'esri/symbols/PictureMarkerSymbol',
          'esri/geometry/Point',
          'esri/geometry/SpatialReference',
          'esri/symbols/TextSymbol',
          'esri/symbols/Font',
          'esri/widgets/Print',
          'esri/geometry/support/webMercatorUtils'
        ],
        options
      )
        .then(
          ([
            Map,
            MapView,
            TileLayer,
            MapImageLayer,
            Graphic,
            GraphicsLayer,
            SimpleFillSymbol,
            GeometryService,
            AreasAndLengthsParameters,
            geometryEngine,
            IdentifyParameters,
            IdentifyTask,
            PictureMarkerSymbol,
            Point,
            SpatialReference,
            TextSymbol,
            Font,
            Print,
            webMercatorUtils
          ]) => {
            var mapTileLayer = new TileLayer({
              url:	//添加底图
            'https://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer'
            })

            var layer = new MapImageLayer({
              url:'根据自己的需求添加底图服务'
          
            })
			//这个是在初始底图上添加,也可以在不同模块引入该组件后进行添加底图服务
            let map = new Map({
              layers: [mapTileLayer, layer]
            })
            const sr1 = new SpatialReference({ wkid: 4326 })
            var view = new MapView({
              container: 'mapview',
              map: map,
              // spatialReference: sr,
              center: ['地图初始坐标'],
              zoom:  // 显示地图的级别
            })
             //this指向问题需要重新赋值
            let _this = this
             //在4.x版本中需要创建when()实例,此方法采用两个输入参数:callback函数和errback函数。在callback执行时加载类的实例。该errback如果类的实例无法加载执行。
            view.when(function() {
                //解析成功就会使用该函数
              _this.$emit('getMap', {
                  //在该模块中传出所有父组件需要使用的实例
                  //父组件在接收时根据所需单独引用
                view: view,
                maps: map,
                graphic: Graphic,
                layer: graphicsLayer,
                simple: simpleFillSymbol,
                geome: GeometryService,
                areas: AreasAndLengthsParameters,
                geometry: geometryEngine,
                Identify: IdentifyParameters,
                IdentifyTask: IdentifyTask,
                MapImageLayer: MapImageLayer,
                PictureMarkerSymbol: PictureMarkerSymbol,
                Point: Point,
                SpatialReference: SpatialReference,
                TextSymbol: TextSymbol,
                Font: Font,
                print: Print,
                webMercatorUtils: webMercatorUtils
              })
            })
            //构建几何图形
            let graphicsLayer = new GraphicsLayer()
            let simpleFillSymbol = new SimpleFillSymbol()
            map.add(graphicsLayer)
          }
        )
        .catch(err => {})
    }
  }