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 完全加载后执行,以获得准确的结果。

本文标签: 符合条件要素方法SDKMaps