Skip to content

find 查询

TIP

find 只可以进行属性查询,但是可以查多图层

开始

准备地图

创建地图

叠加静态图层

叠加动态图层

vue
<templete>
  <div class="container">
    <-- 地图容器 -->
    <div class="map" id="map" ref="map"></div>
    <-- 搜索框 -->
    <div class="toolbar">
      <el-input size="small" type="text" v-model="value">
        <el-button slot="append" size="small" type="primary" @click="useFind">查询</el-button>
      </el-input>
    </div>
  </div>
</templete>
<script>
// 导入arcgis依赖
import * as esriLoader from "esri-loader";
// 导入所需资源css、js、url
import { esriCss, esriJs, url, xingzhengUrl } from "@/config/map";
// 加载资源
esriLoader.loadScript({ url: esriJs });
esriLoader.loadCss(esriCss);
// 导入创建地图方法
import createMapApi from "@/api/createMapApi";
// 导入创建静态图层方法
import createTileLayerApi from "@/api/createTileLayerApi";
// 导入创建动态图层方法
import createDynamicLayerApi from "@/api/createDynamicLayerApi";
export default {
  data() {
    return {
      map: "", // 地图对象
      value: "", //查询条件
    };
  },
  methods: {
    async createMap() {
      const _this = this;
      if (_this.map === "") {
        // 创建地图
        _this.map = await createMapApi(_this.$refs.map);
        // 创建静态图层
        let layer1 = await createTileLayerApi(czdzUrl);
        _this.map.addLayer(layer1);
        // 创建动态图层
        let layer2 = await createDynamicLayerApi(xingzhengUrl);
        _this.map.addLayer(layer2);
      }
    },
  },
  mounted() {
    this.createMap();
  },
};
</script>
<style></style>
js
// 导入arcgis依赖
import * as esriLoader from "esri-loader";
// 使用find查询,根据特定属性,可以使用模糊查询或者完全匹配
// 需要参数:地图对象,地图服务对象的url,查询条件
const useFindApi = async (map,url,searchText) => {
  const _this = this;
  const [FindTask,FindParameters] = await esriLoader.loadModules([
    "esri/tasks/FindTask",
    "esri/tasks/FindParameters"
  ]);//加载所需的arcgis组件
  let findTask = new FindTask(url);//传入服务的url
  let findParams = new FindParameters();//创建FindParameters
  let allLayerIds = [0]//需要查询的图层Id
  findParams.returnGeometry = true;//是否返回几何对象
  findParams.layerIds = allLayerIds;//设置查询的图层
  findParams.searchFields = ["XZQMC"];//限定查询的条件 *指所有
  findParams.searchText = searchText;//限定查询关键字
  // 启用查询
  let res = await findTask.execute(findParams,result => {
    console.log(result)
  })
  // 将结果返回
  return res
}

export {
  useFindApi
}
vue
<script>
// 导入find查询方法
import {useFindApi} from "@/api/useFindApi";
export default {
  methods:{
    async useFind(){
      const _this = this;
      let res = await useFindApi(_this.map,xingzhengUrl,this.val)
      if(res.length !== 0){
        let str = "";
        res.forEach((item,index) => {
          str += index + item.feature.attributes
        })
        console.log(str);
      }else{
        console.log("没有查到结果")
      }
    }
  }
}
</script>

组件和方法

组件

FindTask组件

esri/tasks/FindTask

作用:激活地图服务,便于查询

用法:

js
// 用法:new FindTask(url) - 动态服务地图url
let findTask = new FindTask(url)

FindParameters组件

esri/tasks/FindParameters

作用:创建FindParameters,进行查询配置

用法:

js
// 用法:new FindParameters()
let findParams = new FindParameters()

方法

FindTask.execute()方法

作用:查询 - 返回查询结果

用法:

js
let res = await findTask.execute(findParams,result => {
  // 查询结果result
})