当前位置: 首页 > news >正文

ArcGIS Maps SDK for JS:使用queryFeatures方法查询 FeatureLayer 中符合条件的要素

文章目录

    • 方式一:使用featureLayer.createQuery()方法
    • 方式二:使用 Query 构造函数
    • 方式三:简化写法

要想查询FeatureLayer 图层中满足某些条件的要素,可以使用ArcGIS API for JavaScript 提供的queryFeatures() 方法和 Query 对象进行查询。

首先,我们需要创建一个 Query 对象,用于指定查询的条件和选项。然后,使用 FeatureLayer 的 queryFeatures() 方法来执行查询。

方式一:使用featureLayer.createQuery()方法

// 创建一个 Query 对象
const query = featureLayer.createQuery();
query.where = "1=1"; // 查询所有要素(默认),也可以指定特定的查询条件
query.outFields = ["*"]; // 返回所有字段的值(默认)
//query.outFields = ["NAME", "POPULATION"]; //返回指定的字段// 执行查询
featureLayer.queryFeatures(query).then(function(response) {// 处理查询结果const features = response.features;features.forEach(function(feature) {// 访问要素的属性const attributes = feature.attributes;console.log(attributes); // 输出要素的属性信息});
}).catch(function(error) {console.error("查询失败:", error);
});

方式二:使用 Query 构造函数

// 创建一个 Query 对象
const query = new Query({where: "1=1 AND POPULATION > 100000",outFields: ["NAME", "POPULATION"],returnGeometry: true  //返回几何信息,默认false
});// 执行查询
featureLayer.queryFeatures(query).then(function(results) {// 处理查询结果
});

扩展:

在 ArcGIS API for JavaScript 中,returnGeometry: true 是在查询时指定是否返回几何信息的一个选项。当设置为 true 时,查询结果将包括与每个要素相关联的几何信息,例如点、线或多边形等几何形状。这对于需要获取要素的位置信息或在地图上显示查询结果非常有用;当设置为 false 时,查询结果将不包括几何信息,只返回属性信息。

如果在查询中不指定 returnGeometry 参数,API 将默认为 returnGeometry: false,即不返回几何信息。这意味着查询结果将只包括所请求字段的属性信息,而不包括与要素相关联的几何信息。

如果您不写 returnGeometry: true 或 returnGeometry: false,而只是创建一个 Query 对象,并没有明确指定 returnGeometry 参数,API 将使用默认值 returnGeometry: false,查询结果将不包括几何信息。

因此,根据您的需求,您可以根据是否需要要素的几何信息来决定是否设置 returnGeometry: true。如果您只需要属性信息而不需要几何信息,则可以省略 returnGeometry 参数或明确设置为 false。

方式三:简化写法

当然,也可以在queryFeatures()方法中直接指定Query 对象,下面是一个简化写法

// 执行查询
featureLayer.queryFeatures(where = "1=1", // 查询所有要素(默认),也可以指定特定的查询条件outFields = ["NAME", "POPULATION"] //返回指定的字段//outFields = ["*"]; // 返回所有字段的值(默认)
).then(function(response) {// 处理查询结果const features = response.features;features.forEach(function(feature) {// 访问要素的属性const attributes = feature.attributes;console.log(attributes); // 输出要素的属性信息});
}).catch(function(error) {console.error("查询失败:", error);
});

在 ArcGIS Maps SDK for JavaScript 中,如果在执行查询时将 outFields 设置为 [“*”],这将返回所有字段的值,类似于 SQL 中的 SELECT *。这意味着查询结果将包含 FeatureLayer 中所有字段的属性信息。
如果不指定 outFields,默认情况下查询结果会返回所有可见字段的值。因此,如果希望获取 FeatureLayer 中所有字段的属性信息,可以将 outFields 设置为 [“*”],以便确保返回所有字段的值。

下面是一个完整的示例代码

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>Query FeatureLayer Example</title><link rel="stylesheet" href="https://js.arcgis.com/4.24/esri/themes/light/main.css"><script src="https://js.arcgis.com/4.24/"></script>
</head>
<body><div id="viewDiv" style="height: 400px;"></div><script>require(["esri/Map","esri/views/MapView","esri/layers/FeatureLayer"], function(Map, MapView, FeatureLayer) {const map = new Map({basemap: "streets-navigation-vector"});const view = new MapView({container: "viewDiv",map: map,center: [-118, 34],zoom: 8});const featureLayer = new FeatureLayer({url: "URL_TO_YOUR_FEATURE_LAYER"});map.add(featureLayer);view.whenLayerView(featureLayer).then(function() {const query = featureLayer.createQuery();//query.where = "1=1"; //query.outFields = ["*"]; // 返回所有字段的值featureLayer.queryFeatures(query).then(function(response) {const features = response.features;features.forEach(function(feature) {console.log(feature.attributes);});}).catch(function(error) {console.error("查询失败: ", error);});});});</script>
</body>
</html>

在 ArcGIS Maps SDK for JavaScript 中,view.whenLayerView(featureLayer).then(function() { … }) 这段代码的作用是确保在 FeatureLayer 在地图视图中完全加载并准备好进行交互之后再执行后续的操作。

具体来说,view.whenLayerView(featureLayer) 返回一个 Promise,在 FeatureLayer 的视图(LayerView)准备好之后解析该 Promise。这样做的目的是确保在执行查询或其他与 FeatureLayer 相关的操作之前,FeatureLayer 已经在地图视图中准备就绪,以避免出现不完整或错误的操作。

在上面提供的示例代码中,我们使用 view.whenLayerView(featureLayer) 来等待 FeatureLayer 准备就绪后,然后执行查询操作以获取 FeatureLayer 中所有字段的属性信息。这样可以确保查询操作在 FeatureLayer 完全加载后执行,以获得准确的结果。

相关文章:

  • 深入浅出:探索堆内存与分配器的奥秘
  • Vue.js Promise 与 async/await 的比较
  • MyBatisPlus使用流程
  • AI--向量的存储和检索
  • Java开发大厂面试第20讲:什么是分布式锁?Redi 怎样实现的分布式锁?
  • 如何为ChatGPT编写有效的提示词:软件开发者的指南
  • Servlet的response对象
  • 爬虫实训案例:中国大学排名
  • [保姆式教程]使用目标检测模型YOLO V8 OBB进行旋转目标的检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)
  • 大模型日报|今日必读的 13 篇大模型论文
  • 【html5】03-新表单元素及属性
  • VUE面试题(3)--vue常见面试题
  • 使用API有效率地管理Dynadot域名,进行域名邮箱的默认邮件转发设置
  • 如何解决vcruntime140.dll丢失问题,详细介绍5种靠谱的解决方法
  • 2001-2022年全国31省份互联网发展47个指标合集各省电信业务信息化软件信息技术服务业
  • 分享的文章《人生如棋》
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2019.2.20 c++ 知识梳理
  • Apache的80端口被占用以及访问时报错403
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Cumulo 的 ClojureScript 模块已经成型
  • Java反射-动态类加载和重新加载
  • Java深入 - 深入理解Java集合
  • Java知识点总结(JavaIO-打印流)
  • js
  • Linux下的乱码问题
  • log4j2输出到kafka
  • 大主子表关联的性能优化方法
  • 工程优化暨babel升级小记
  • 前端性能优化--懒加载和预加载
  • 入门级的git使用指北
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 我从编程教室毕业
  • 原生js练习题---第五课
  • 主流的CSS水平和垂直居中技术大全
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​TypeScript都不会用,也敢说会前端?
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (done) 两个矩阵 “相似” 是什么意思?
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)计算机毕业设计高校学生选课系统
  • (译) 函数式 JS #1:简介
  • (转载)利用webkit抓取动态网页和链接
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net中ListT 泛型转成DataTable、DataSet
  • @Autowired 与@Resource的区别
  • @Pointcut 使用