admin管理员组文章数量:1650771
文章目录
- 方式一:使用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/4.24/esri/themes/light/main.css">
<script src="https://js.arcgis/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 完全加载后执行,以获得准确的结果。
版权声明:本文标题:ArcGIS Maps SDK for JS:使用queryFeatures方法查询 FeatureLayer 中符合条件的要素 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729531141a1204821.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论