簡體   English   中英

有沒有辦法使用 arcgis javascript api 4 加載/更新數據而無需刪除要素層且沒有閃爍效果

[英]Is there a way to load/update the data without removing feature layer and without flicker effect using arcgis javascript api 4

我通過從外部查詢服務獲取數據並將一些數據添加到 map 來從特征集合創建一個特征層。

根據我的項目需要,我必須每 5 秒刷新一次 map 上的數據。 為了實現這一點,我使用外部查詢請求數據,在獲得響應數據后,我將刪除前一個要素層並添加一個新要素層。

問題:在 map 上添加新層時,需要一點時間(約 1 秒)來反映 map 上的功能,看起來像閃爍效果。

問題:有沒有辦法加載/更新數據而不移除特征層並且沒有閃爍效果(只有添加/移除的特征應該反映在 map 上)

如果我理解正確,您將刪除具有舊功能的圖層並添加具有新功能的新圖層。 你不需要這樣做。

使用FeatureLayer function applyEdits ,在“一”操作中刪除所有特征並添加新特征。

ArcGIS JS Docs - FeatureLayer applyEdits

更新:

看看我為你做的例子。

 <html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no"> <title>ArcGIS API for JavaScript Hello World App</title> <style> html, body, #viewDiv { padding: 0; margin: 0; height: 100%; width: 100%; } </style> <link rel="stylesheet" href="https://js.arcgis.com/4.15/esri/css/main.css"> <script src="https://js.arcgis.com/4.15/"></script> <script> require([ 'esri/Map', 'esri/views/MapView', 'esri/layers/FeatureLayer', 'esri/Graphic' ], function (Map, MapView, FeatureLayer, Graphic) { const quakesUrl = 'https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/ks_earthquakes_since_2000/FeatureServer/0'; const quakesLayer = new FeatureLayer({ url: quakesUrl, visible: false }); let lastAddFeatureResults = []; const resultsLayer = new FeatureLayer({ source: [], geometryType: 'point', renderer: { type: 'simple', symbol: { type: 'simple-marker', style: 'circle', size: `8px`, color: [255, 0, 0, .6], outline: { color: 'black', width: '0.5px' } } }, fields: [ { name: 'OBJECTID', alias: 'ObjectID', type: 'oid' }, { name: 'time', alias: 'Time', type: 'string' }, { name: 'mag', alias: 'Magnitude', type: 'double' }, { name: 'magType', alias: 'Magnitude Type', type: 'string' }, { name: 'place', alias: 'Place', type: 'string' }, { name: 'type', alias: 'Type', type: 'string' } ], popupEnable: true, popupTemplate: { title: '{place}' } }); const map = new Map({ basemap: "gray", layers: [quakesLayer, resultsLayer] }); const view = new MapView({ container: "viewDiv", map: map, center: [-97.75188, 37.23308], zoom: 9 }); function queryEarthquakes() { const query = quakesLayer.createQuery(); query.where = "mag >= 3"; return quakesLayer.queryFeatures(query); } function displayResults(results) { const addFeatures = results.features; resultsLayer.applyEdits({ addFeatures, deleteFeatures: lastAddFeatureResults }).then(results => { console.log(results.addFeatureResults); console.log(results.deleteFeatureResults); lastAddFeatureResults = results.addFeatureResults; }); } function updateLayer() { console.timeLog('update layer'); queryEarthquakes().then(displayResults); } console.time('update layer'); updateLayer(); setInterval(updateLayer, 5000); }); </script> </head> <body> <div id="viewDiv"></div> </body> </html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM