文章目錄
- 方式一:使用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 完全加載后執行,以獲得準確的結果。