赞
踩
要想查询FeatureLayer 图层中满足某些条件的要素,可以使用ArcGIS API for JavaScript 提供的queryFeatures() 方法和 Query 对象进行查询。
首先,我们需要创建一个 Query 对象,用于指定查询的条件和选项。然后,使用 FeatureLayer 的 queryFeatures() 方法来执行查询。
// 创建一个 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 对象
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 完全加载后执行,以获得准确的结果。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。