文章目录
- 方式一:使用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 完全加载后执行,以获得准确的结果。