ArcGIS中如何设置未被过滤器选中点的模糊效果及修改模糊值?
ArcGIS 点图层模糊效果实现答疑
问题1:如何模糊未被过滤器选中的点?
在ArcGIS JS API中,通过FeatureEffect可以直接实现该需求:
- 创建
FeatureEffect实例,用filter参数定义需要保持清晰的点(即符合过滤条件的要素) - 用
excludedEffect参数为未被过滤器选中的点设置模糊效果(比如blur(3px)) - 将该
FeatureEffect赋值给要素图层的featureEffect属性即可生效
核心逻辑示例:
// 假设已创建要素图层nzgdFeatureLayer和视图view view.whenLayerView(nzgdFeatureLayer).then((layerView) => { nzgdFeatureLayer.featureEffect = new FeatureEffect({ filter: new FeatureFilter({ where: "你的过滤条件" // 例如"category='重点区域'",选中需要清晰显示的点 }), excludedEffect: "blur(3px)" // 未选中的点应用3px模糊 }); });
问题2:现有代码能否实现模糊所有点?如何修改?
你当前的代码无法实现模糊所有点的需求——因为filter的where条件设为"1=1",会匹配所有点,导致没有要素被排除,excludedEffect完全不会生效。
要实现模糊所有点,只需调整filter让其匹配不到任何要素,这样所有点都会被纳入排除范围,自动应用excludedEffect的模糊效果:
修改后的完整代码:
const nzgdFeatureLayer = new FeatureLayer({ url: "url...", definitionExpression: "" }); nzgdFeatureLayer .when(() => { view.whenLayerView(nzgdFeatureLayer).then((layerView) => { nzgdFeatureLayer.featureEffect = new FeatureEffect({ filter: new FeatureFilter({ where: "1=0" // 无匹配要素,所有点都被排除 }), excludedEffect: "blur(3px)" // 所有点应用3px模糊 }); }); }) .catch((error) => console.log(error)); webmap.layers.push(nzgdFeatureLayer);
如果需要给每个点设置不同的模糊值,无需依赖FeatureEffect,可以通过渲染器的visualVariables结合要素属性实现:
nzgdFeatureLayer.renderer = { type: "simple", symbol: { type: "simple-marker", size: 8, color: "#0079c1" }, visualVariables: [{ type: "effect", field: "BLUR_VALUE", // 存储每个点模糊值的属性字段 valueUnit: "px", effect: { blur: { property: "blur", value: { field: "BLUR_VALUE" } } } }] };
内容的提问来源于stack exchange,提问作者Le Hoang
相关产品推荐
相关产品推荐

