实用指南:ArcGIS JSAPI 高级教程 - 高亮效果优化之开启使用多高亮样式

news/2025/10/4 8:07:29/文章来源:https://www.cnblogs.com/ljbguanli/p/19125260

实用指南:ArcGIS JSAPI 高级教程 - 高亮效果优化之开启使用多高亮样式

ArcGIS JSAPI 高级教程 - 高亮效果优化之开启使用多高亮样式

    • 完整代码
    • 在线示例

本文主要介绍一下高亮效果的更新优化,包括帮助在场景中添加最多六个高亮配置对象以及在线示例。

完成三种高亮效果:标绘框选图形高亮、选中的几何体高亮、鼠标悬浮高亮。

在这里插入图片描述

本文包括 完整代码以及在线示例


完整代码

<html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no"/><title>框选显示高亮对象 | Sample | ArcGIS Maps SDK for JavaScript 4.33</title><script type="module" src="https://openlayers.vip/arcgis_api/calcite-components/2.8.1/calcite.esm.js"></script><link rel="stylesheet" type="text/css"href="https://openlayers.vip/arcgis_api/calcite-components/2.8.1/calcite.css"/><!-- 引入ArcGIS JS API样式和脚本 --><link rel="stylesheet" href="https://openlayers.vip/arcgis_api/4.33/esri/themes/light/main.css"/><script src="https://openlayers.vip/arcgis_api/4.33/init.js"></script><script>var _hmt = _hmt || [];(function () {var hm = document.createElement("script");hm.src = "https://hm.baidu.com/hm.js?f80a36f14f8a73bb0f82e0fdbcee3058";var s = document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();</script><script>require(["esri/Map","esri/views/SceneView","esri/rest/support/Query","esri/widgets/Legend","esri/core/reactiveUtils","esri/layers/GraphicsLayer","esri/layers/FeatureLayer","esri/widgets/Sketch/SketchViewModel","esri/smartMapping/renderers/color",],(Map,SceneView,Query,Legend,reactiveUtils,GraphicsLayer,FeatureLayer,SketchViewModel,colorRendererCreator,) => {// 添加要素图层const stateBoundaryFeatureLayer = new FeatureLayer({url: 'https://gs3d.geosceneonline.cn/server/rest/services/Hosted/ShangHaiBuilding/FeatureServer/0',popupTemplate: {title: '图层弹窗Title',content: function (feature) {// 获取字段var attributes = feature.graphic.attributeslet html = '<div class="popup-template-content">'for (const key in attributes) {// 排除不要的属性if (['FID', 'OID_'].includes(key)) {continue}html += `<p class="field-row"><span class="dt">${key}:  </span><span class="db">${attributes[key]}</span></p>`}html += '</div>'return html},},});// 创建场景const map = new Map({layers: [stateBoundaryFeatureLayer],});// 创建场景const view = new SceneView({container: "viewDiv",map: map,popup: {dockOptions: {buttonEnabled: false}},qualityProfile: "high",environment: {lighting: {directShadowsEnabled: true}},});// 定义可视化样式let colorParams = {layer: stateBoundaryFeatureLayer,view: view,field: "SHAPE__Area",classificationMethod: "natural-breaks",valueExpression: "$feature.SHAPE__Area",theme: "high-to-low",numClasses: 10,symbolType: '3d-volumetric',};// when the promise resolves, apply the renderer to the layercolorRendererCreator.createClassBreaksRenderer(colorParams)// colorRendererCreator.createContinuousRenderer(colorParams).then(function (response) {stateBoundaryFeatureLayer.renderer = response.renderer;});// 高亮对象集合view.highlights = [{// 多选时高亮属性name: "multiselect",color: "#ff00ff",fillOpacity: 0.2,haloColor: "#ff00ff",haloOpacity: 0.6,},{// 选择框高亮属性name: "select-rectangle",color: "#00ffff",fillOpacity: 0.2,haloColor: "#ff0000",haloOpacity: 0.6,},{// 默认高亮属性name: "default",color: "gold",fillOpacity: 0.2,haloColor: "gold",haloOpacity: 0.8},];// 存储高亮要素对象this.highlights = [];// 创建标绘图层const polygonGraphicsLayer = new GraphicsLayer({elevationInfo: {// 贴地mode: 'on-the-ground'}});view.map.add(polygonGraphicsLayer);// 框选控件view.ui.add("select-by-rectangle", "top-left");const selectButton = document.getElementById("select-by-rectangle");// 创建标绘工具const sketchViewModel = new SketchViewModel({view: view,layer: polygonGraphicsLayer});// 用于高亮let polygonLayerView;view.whenLayerView(polygonGraphicsLayer).then((polygonLayerView_) => {polygonLayerView = polygonLayerView_})// 监听矩形标绘事件selectButton.addEventListener("click", () => {// 标绘矩形sketchViewModel.create("rectangle");// 移除上一次操作polygonGraphicsLayer.removeAll();// 移除上一次高亮对象if (this.highlights) {this.highlights.forEach((highlight) => {highlight.remove();});this.highlights = [];}});// 监听标绘完成事件sketchViewModel.on("create", async (event) => {// 绘制完成if (event.state === "complete") {const queryGeometry = event.graphic.geometry;polygonLayerView.highlight([event.graphic], {name: "select-rectangle"});if (this.campusLayerView) {// 获取矩形内几何对象const results = await this.campusLayerView.queryFeatures({geometry: queryGeometry,});// 框选对象设置多选高亮results.features.forEach((feature) => {const highlight = this.campusLayerView.highlight([feature.attributes.fid],// 设置多选高亮对象{name: "multiselect"});this.highlights.push(highlight);})}}});view.when(() => {// Define the attributes which are used in the querystateBoundaryFeatureLayer.outFields = ["*"];// Highlight is set on the layerView, so we need to detect when the layerView is readyview.whenLayerView(stateBoundaryFeatureLayer).then((campusLayerView) => {this.campusLayerView = campusLayerView;let highlightHover;let objectIdHover;// 用于悬浮高亮const debouncedUpdate = async function (event) {// 鼠标悬浮事件const hitTest = await view.hitTest(event, {include: stateBoundaryFeatureLayer});const results = hitTest.results.filter((result) => {return result.graphic.layer.popupTemplate;});const result = results[0];const newObjectId = result?.graphic.getObjectId();if (!newObjectId) {highlightHover?.remove();} else if (objectIdHover !== newObjectId) {highlightHover?.remove();objectIdHover = newObjectId;highlightHover = campusLayerView.highlight(result.graphic);}};// Listen for the pointer-move event on the Viewview.on("pointer-move", (event) => {debouncedUpdate(event).catch((err) => {throw err;});});});});});</script><style>html,body,#viewDiv {height: 100%;width: 100%;margin: 0;padding: 0;}h2 {text-align: center;}</style></head><body><div id="viewDiv"></div><divid="select-by-rectangle"class="esri-widget esri-widget--button esri-widget esri-interactive"title="Select features by rectangle"><span class="esri-icon-checkbox-unchecked"></span></div></body>
</html>

在这里插入图片描述


在线示例

ArcGIS Maps SDK for JavaScript 在线示例:高亮效果优化之开启使用多高亮样式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站入口自己找网站开发项目

远程手机遥控开关的工作原理主要是通过互联网传递无线信号&#xff0c;控制用电器的一种智能家居产品。 远程手机遥控开关的基本套件包括&#xff1a;手机APP、网线、家用WIFI中转无服务器或者是工厂提供的自带网线端口的中转服务器、连接用电器的接收器。使用时&#xff0c;手…

网站后台代码添加图片wordpress怎么弄

如果项目着眼于尽快无BUG上线&#xff0c;那么此时可以抓大放小&#xff0c;代码的细节可以不精打细磨&#xff1b;但是如果有足够的时间开发、维护代码&#xff0c;这时候就必须考虑每个可以优化的细节了&#xff0c;一个一个细小的优化点累积起来&#xff0c;对于代码的运行效…

手机网站菜单栏怎么做东莞网站建设推广技巧

博主是搞是个FPGA的&#xff0c;一直没有真正的研究过以太网相关的技术&#xff0c;现在终于能静下心学习一下&#xff0c;希望自己能更深入的掌握这项最基本的通信接口技术。下面就开始搞了。 一、OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。…

电商网站界面规范新型建筑模板

SA8000认证流程 SA8000认证流程的第一步是申请组织参加管理体系在线自我评估。Social Fingerprint自我评估可以帮助该组织了解 SA8000管理体系要求并判断是否已做好认证申请准备。当该组织认为其管理实践足够成熟&#xff0c;具备认证条件时&#xff0c;可以从20 多家独立的SAA…

用wang域名做购物网站怎么样网站建设预算策划

http://blog.csdn.net/lu_embedded/article/details/60469851 由于 Linux 所具备的开源、稳定、高效、易裁剪、硬件支持广泛等优点&#xff0c;使得它在嵌入式系统领域最近十几年内迅速崛起。目前嵌入式 Linux 系统开发已经开辟了很大的市场&#xff0c;同时也开发出很多成型的…

const在for用不了

js中关于const在for in或者for of中的使用_for in const-CSDN博客

新闻静态网站模板自建视频网站

&#x1f31f;博主主页&#xff1a;我是一只海绵派大星 &#x1f4da;专栏分类&#xff1a;软件测试笔记 &#x1f4da;参考教程&#xff1a;黑马教程❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 1、操作系统 2、Linux发展历程 3、命令行程序 4、cd 切换文件夹…

苏州做网站优化社交电商系统开发

引言 原文链接 近日&#xff0c;一场由微软视窗系统软件更新引发的全球性"微软蓝屏"事件震惊了整个科技界。这次事件源于美国电脑安全技术公司"众击"提供的一个带有"缺陷"的软件更新&#xff0c;如同一颗隐形炸弹在全球范围内引爆&#xff0c;…

网站开发毕业设计摘要范文剪辑师培训班有用吗

IIS-HTTPS(TSL)强制开启的方法和解决过时的安全问题 系统为:Windows server 2008R2 工具为:IIS6 数据库为: Windows Sql server 2014 证书为:腾讯云颁发的AC证书 首先你需要这几个工具 IISCrypto | 检测和为你配置最安全的 策略环境 手写reg注册表 | 来关闭本地的事件 Windo…

有做外贸的平台网站吗永城网站建设

鸿蒙是面向5G物联网、面向全场景的分布式操作系统&#xff0c;其不是安卓系统的分支或修改而来的&#xff0c;与安卓、iOS是不一样的操作系统。鸿蒙将打通手机、电脑、平板、电视、电器设备、工业自动化控制、无人驾驶、车机设备 、智能穿戴统一成一个操作系统&#xff0c;并且…

需要锦州网站建设自己电脑wordpress

数据对齐 数据对齐是一种计算机内存管理技术&#xff0c;确保数据存储在内存中的特定地址上&#xff0c;以提高访问效率和性能。 不同的数据类型&#xff08;如整数、浮点数、指针等&#xff09;在内存中的存储位置通常需要满足特定的边界要求&#xff0c;即数据的起始地址是其…

10月北京中学集训随笔

10.4~10.8计划 长达5天的模拟赛 根据刚哥的压力提前释放理论 所以这五天的模拟赛一定要给予最高级别的重视

公司网站域名com好还是cn好视频拍摄剪辑培训班

【说明&#xff1a;转载于http://blog.csdn.net/jojo52013145/article/details/5783677】 1. 我们不禁要问&#xff0c;什么是"服务集群"&#xff1f;什么是"企业级开发"&#xff1f; 既然说了EJB 是为了"服务集群"和"企业级开发"&…

icp备案网站用不了淄博网站建设 招聘

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

专业做俄语网站建设网站建设公司哪好

在此实现了一个基本的IL汇编程序&#xff1b; 了解MSIL汇编和IL汇编评估堆栈_bcbobo21cn的博客-CSDN博客 它用了下面两句来在屏幕输出字符串&#xff0c; ldstr "I am from the IL Assembly Language..." call void [mscorlib]System.Console::WriteLine (string) …

为什么做的网站在浏览器搜不到做暧暧视频免费视频中国网站

在攻击中&#xff0c;命令注入是比较常见的方式&#xff0c;今天我们细说在软件开发中如何避免命令执行漏洞 我们通过DVWA中不同的安全等级来细说命令执行漏洞 1、先调整DVWA的安全等级为Lower,调整等级在DVWA Security页面调整 2、在Command Injection页面输入127.0.0.1&…

使用100%缩放比例重新启动Visual Studio 界面模糊的解决方案

问题描述 建议:如果是刚开始写WinForm项目 ,建议刚开始就去进行一个替换 ,要不然后面会很麻烦的 ,不仅要计算size 还要去 计算 location 的值 昨天碰到了这个问题 ,当时设置完之后界面就非常的模糊 ,虽然说界面变…

做flash网站遇到函数新手学习做网站

文章目录 22.1 引用其他程序集22.2 命名空间22.2.1 命名空间名称22.2.2 命名空间的补充22.2.3 命名空间跨文件伸展22.2.4 嵌套命名空间 22.3 using 指令22.3.1 using 命名空间指令22.3.2 using 别名指令22.3.3 using static 指令 22.4 程序集的结构22.5 程序集标识符22.6 强命名…

西宁北京网站建设杨浦集团网站建设

blockquote元素的使用已经非常多样化&#xff0c;但语义上它只适用于一件事–标记了一段你的网页被引用从另一来源。这意味着&#xff0c;如果你想让那些花俏的引文&#xff0c;<blockquote>是不是你应该使用元素。让我们看一看如何你应该使用此元素&#xff1a; <art…

什么网站做的产品海报比较多网站怎么开启gzip

好多小伙伴使用win7系统的电脑版微信的时候会收到很多文件资料&#xff0c;平时可以进入微信直接获取文件&#xff0c;那么当我们碰到断网的情况下如何准确找到这些文件呢?并且如果想对文件默认保存位置做出修改又该如何解决呢?小伙伴不要急&#xff0c;现证小编就教大家怎样…