簡體   English   中英

在新數據到來時創建特征后,我替換了圖層源,但在地圖上仍然刪除了可見的特征(ArcGIS-js-api 4)

[英]After creating feature when new data comes i replace layer source but on map still deleted features visible(ArcGIS-js-api 4)

我創建了一個要素圖層,每隔 5 秒,外部服務就會以 JSON 格式獲取新數據。 當新數據到來時,我用新數據覆蓋要素圖層源並調用 layer.refresh 方法。 我觀察到的仍然是舊數據沒有從地圖中刪除,如果彈出窗口被打開,則內容不會更新。 我不想使用 apply edits.by creati

問題:當我替換/覆蓋圖層源時,地圖上仍然存在一些已刪除的舊要素,並且在彈出窗口中未反映更新的數據

問題:覆蓋要素圖層源后如何更新地圖和彈出內容

下一個代碼顯示source屬性是一個用於初始化本地FeatureLayer的選項。 為了操作您需要使用的功能applyEdits

在添加和刪除特征時查看source長度。 【劇透,永遠不變】

我認為你正在試驗的問題與我提到的有關。

 <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(mag) { const query = quakesLayer.createQuery(); query.where = `mag = ${mag}`; return quakesLayer.queryFeatures(query); } function displayResults(results) { const addFeatures = results.features; resultsLayer.applyEdits({ addFeatures, deleteFeatures: updates % 2 === 0 ? lastAddFeatureResults : [] }).then(results => { // console.log(results.addFeatureResults); // console.log(results.deleteFeatureResults); lastAddFeatureResults = updates % 2 === 0 ? results.addFeatureResults : lastAddFeatureResults.concat(results.addFeatureResults); console.log(`[after update ${updates}] features:${lastAddFeatureResults.length} source.length:${resultsLayer.source.length} added:${results.addFeatureResults.length} deleted:${results.deleteFeatureResults.length}`) }); } function updateLayer() { updates++; console.log(`[before update ${updates}] features:${lastAddFeatureResults.length} source.length:${resultsLayer.source.length}`) console.timeLog('update layer'); queryEarthquakes(updates % 2 ? 3 : 4).then(displayResults); } console.time('update layer'); let updates = 0; 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