ArcGIS API for JavaScript 之 FeatureTable导出excel (一)

183 阅读1分钟

最近项目上需要实现用FeatureTable导出excel,实现之余记录一下。ArcGIS API for JavaScript 用的版本是4.19。
废话不多说,先查询api接口文档,developers.arcgis.com/javascript/… ,发现通过featureTable并不能获取到数据集(踩坑,查了好久发现并不可以)。

image.png 那么得通过query调用arcgis 的服务获取到数据,将数据整理后导出即可。 excel导入导出都是依赖于js-xlsx来实现的。
panjiachen.github.io/vue-element…

exportExcel () {
      import('@/vendor/Export3Excel').then(excel => {
        var self = this
        let params = {
          where: '1=1',
          returnGeometry: false,
          outFields: '*',
          f: 'pjson'
        }
        // this.featureLayer.config.server_url 是arcgis服务地址
        axios.get(this.featureLayer.config.server_url + '/query?', {
          params: params
        }).then(res => {
          let list = []
          // 获取数据记录
          res.data.features.forEach(element => {
            if (element.attributes) {
              list.push(element.attributes)
            }
          })

          let tHeaders = []
          let filterVals = []
          let fieldAliases = res.data.fieldAliases
          // 设置标题跟映射字段
          for (var key in fieldAliases) {
            tHeaders.push(fieldAliases[key])
            filterVals.push(key)
          }
          // 判断是是否是日期格式
          let fields = res.data.fields
          let dateArray = []
          fields.forEach(element => {
            if (element.type === 'esriFieldTypeDate') {
              dateArray.push(element.name)
            }
          })
          // console.log(dateArray)
          const data = self.formatJson(filterVals, list, dateArray)
          // console.log(data)
          excel.export_json_to_excel({
            header: tHeaders,
            data,
            filename: self.filename,
            autoWidth: self.autoWidth,
            bookType: self.bookType
          })
        })
      })
    },
    formatJson (filterVal, jsonData, timeArray) {
      return jsonData.map(v => filterVal.map(j => {
        if (timeArray && timeArray.includes(j)) {
          // console.log('formatJson', j, v[j])
          return parseTime(v[j])
        } else {
          return v[j]
        }
      }))
    },

这个方法导出是导出全部的数据