如何解决创建要素后,当有新数据出现时,我将替换图层源,但在地图上仍可删除要素ArcGIS-js-api 4
我创建了一个要素图层,每隔5秒,外部服务将以JSON格式获取新数据。当新数据到来时,我用新数据覆盖要素图层源并调用layer.refresh方法。我观察到的仍然没有从地图中删除的旧数据,如果打开了弹出窗口,则内容不会更新。 我不想使用creati的apply edits。
问题: 当我替换/覆盖图层源时,在地图上仍然有一些旧的已删除功能,并且在弹出窗口中未反映更新的数据
问题: 覆盖要素图层源后,如何更新地图和弹出内容
解决方法
下面的代码显示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,.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',{
name: 'place',alias: 'Place',{
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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。