Arcgis api for javascript學習筆記(4.5版本) - 獲取FeatureLayer中的graphics集合

在Arcgis api for javascript 3.x 版本中,我們可以直接通過某個FeatureLayer對象中的graphics屬性獲取要素集合。  graphics屬性

但是在4.x版本中,FeatureLayer對象並未提供graphics屬性。所以我們要獲取必須通過某些query的函數來實現。

方法一: 通過FeatureLayer中的queryFeatures()函數。 queryFeatures()函數

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
    <title>FeatureLayer - 4.7</title>
    <style>
        html, body, #viewDiv {
            padding: 0;
            margin: 0;
            height: 100%;
            width: 100%;
        }
    </style>
    <link rel="stylesheet" href="https://js.arcgis.com/4.7/esri/css/main.css">
    <script src="https://js.arcgis.com/4.7/"></script>
</head>
<body>
<div id="viewDiv"></div>
<script type="text/javascript">
    require([
            "esri/Map",
            "esri/views/MapView",
            "esri/layers/FeatureLayer",
            "dojo/domReady!"
        ],
        function (Map, MapView, FeatureLayer) {
            let map = new Map({
                basemap: "hybrid"
            });

            let view = new MapView({
                container: "viewDiv",
                map: map,
                extent: { // autocasts as new Extent()
                    xmin: -9177811,
                    ymin: 4247000,
                    xmax: -9176791,
                    ymax: 4247784,
                    spatialReference: 102100
                }
            });

            let featureLayer = new FeatureLayer({
                url: "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Landscape_Trees/FeatureServer/0"
            });
            map.add(featureLayer);

            view.when(function () {
                featureLayer.queryFeatures().then(function (results) {
                    console.log(results.features);
                });
            });
        });
</script>
</body>
</html>

這種方式有一個缺點就是,需要再一次向服務器發送一條查詢的請求,其實照理說完全可以在已有的FeatureLayer對象中獲取它的要素集合。

 

方法二:通過FeatureLayerView中的queryFeatures()函數來實現,它不會再一次向服務器發送請求。 FeatureLayerView中的queryFeatures()函數

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
    <title>FeatureLayer - 4.7</title>
    <style>
        html, body, #viewDiv {
            padding: 0;
            margin: 0;
            height: 100%;
            width: 100%;
        }
    </style>
    <link rel="stylesheet" href="https://js.arcgis.com/4.7/esri/css/main.css">
    <script src="https://js.arcgis.com/4.7/"></script>
</head>
<body>
<div id="viewDiv"></div>
<script type="text/javascript">
    require([
            "esri/Map",
            "esri/views/MapView",
            "esri/layers/FeatureLayer",
            "dojo/domReady!"
        ],
        function (Map, MapView, FeatureLayer) {
            let map = new Map({
                basemap: "hybrid"
            });

            let view = new MapView({
                container: "viewDiv",
                map: map,
                extent: { // autocasts as new Extent()
                    xmin: -9177811,
                    ymin: 4247000,
                    xmax: -9176791,
                    ymax: 4247784,
                    spatialReference: 102100
                }
            });

            let featureLayer1 = new FeatureLayer({
                url: "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Landscape_Trees/FeatureServer/0"
            });
            map.add(featureLayer1);

            view.when(function () {
                //地圖剛初始化時獲取graphics集合,需要監控featureLayer的updating狀態完成後才能獲取到
                view.whenLayerView(featureLayer1).then(function (lyrView) {
                    lyrView.watch("updating", function(){
                        lyrView.queryFeatures().then(function (results) {
                            console.log(results);
                        });
                    });
                });

                //地圖加載完成後,可以隨時獲取featureLayer中的graphics集合
                view.on("double-click",function () {
                    view.whenLayerView(featureLayer1).then(function (lyrView) {
                        lyrView.queryFeatures().then(function (results) {
                            console.log(results);
                        });
                    });
                });
            });
        }
    );
</script>
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章