arcgis for js点击聚合要素查询其包含的所有要素

功能说明

上一篇讲了实现聚合效果, 但是点击聚合效果无法获取到该聚合点包含的所有点信息

这一篇是对如何实现该功能的案例

在这里插入图片描述

实现

各属性说明需要自行去官网查阅

官网案例

聚合API

没空说废话了, 加班到12点,得休息了, 直接运行代码看效果就行, 相关重点和注意事项都在代码注释里

该案例效果非实际项目效果, 提取出来的更通俗易懂

案例效果:

在这里插入图片描述

在这里插入图片描述

<!DOCTYPE html>
<html lang="zn"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>body {margin: 0;}#mapview {position: absolute;width: 100%;height: 100%;}* {margin: 0;padding: 0;}</style><link rel="stylesheet" href="https://js.arcgis.com/4.23/esri/themes/light/main.css" /><script src="https://js.arcgis.com/4.23/"></script></head><body><div id="mapview"></div><script>require(['esri/Map','esri/views/MapView','esri/layers/FeatureLayer','esri/Graphic'], function (Map, MapView, FeatureLayer, Graphic) {// 初始化底图window.map = new Map({basemap: 'dark-gray-vector'})// 创建2维视图let view = new MapView({container: 'mapview',map: map,zoom: 11,center: [104.783916597735, 32.55699155692144] // 设置地图的初始化中心点坐标})// 生成100个随机点var points = generateRandomPointsInPolygon([[[104.64487088240317, 32.66500681729125],[104.91060269392625, 32.6635616904849],[104.88210690535206, 32.54642886312837],[104.68812954939528, 32.54787588095771]]],100)// 创建聚合点const features = points.map((point, index) => ({geometry: {type: 'point',x: point[0],y: point[1]},attributes: {ObjectID: Math.random(),name: `${index + 1}`}}))if (!features.length) {return}console.log(features)const featureLayer = new FeatureLayer({source: features,title: '生态因子点位图层',objectIdField: 'ObjectID',fields: [{ name: 'name', type: 'string' }],outFields: ['*'],popupTemplate: {title: '{name}'},// 渲染成简单圆点renderer: {type: 'simple',symbol: {type: 'simple-marker',color: 'red',size: '10px',outline: {width: 1,color: '#fff'}}},// 渲染额外的文本图形labelingInfo: [{symbol: {type: 'text',color: '#fff',// haloSize: 1,// haloColor: '#fff',backgroundColor: 'rgba(27,140,155,0.7)',// xoffset: -22,yoffset: 15,horizontalAlignment: 'center',font: { family: 'sans-serif', size: 8 }},labelPlacement: 'center-center',labelExpressionInfo: { expression: '$feature.name' }}],// 处理聚合featureReduction: {type: 'cluster',clusterRadius: '40px',clusterMinSize: '20px',clusterMaxSize: '30px',maxScale: 10000,// 聚合的内置弹窗popupTemplate: {title: '包含 {cluster_count} 个点位.',fieldInfos: [{ fieldName: 'cluster_count', format: { places: 0, digitSeparator: true } }]},// popupEnabled: false,// 额外的文本图形labelingInfo: [{deconflictionStrategy: 'none',labelExpressionInfo: {title: '数量',expression: 'Text("聚合点:" + $feature.cluster_count + "个", "#,###")'},symbol: {type: 'text',color: '#ff0000',haloSize: 1,haloColor: '#fff',// backgroundColor: 'rgba(27,140,155,0.7)',// xoffset: -11.5,// yoffset: 8,horizontalAlignment: 'left',font: { family: 'sans-serif', size: 12 }},labelPlacement: 'above-center'}]}})map.add(featureLayer)// 重点view.whenLayerView(featureLayer).then(layerView => {// 添加点击view.on('click', async event => {const { longitude, latitude } = event.mapPoint// console.log('>>> 点击的坐标: ')console.log(`${longitude}, ${latitude}`)// 匹配元素const { results } = await view.hitTest(event)// 没有匹配到元素退出if (!results?.length) {return}// 取第一个元素, 如果要处理多个元素, 自行遍历const { graphic, layer } = results[0]// 判断该元素是否为聚合点if (graphic.isAggregate === true) {const aggregateId = graphic.getObjectId() // 聚合ID// const aggregateId = graphic.attributes.aggregateId // 同上一样// 判断对应图层, 可以根据需要去掉if (graphic?.layer === featureLayer) {// 创建查询对象/*** 重点, 一定要从layerView创建, 而不是featureLayer创建* 我在这里踩了个大坑, 哎*/const query = layerView.createQuery()query.aggregateIds = [aggregateId]// 这里同样, 一定要从layerView查询, 而不是featureLayer查询const { features } = await layerView.queryFeatures(query)console.log('>>>>>>>> 聚合的要素', features)alert('聚合的要素为:' + features.map(item => item.attributes.name).join(','))}}})})// 生成随机点function generateRandomPointsInPolygon(polygonCoords, number) {// 判断是否在图形内function isPointInsidePolygon(point, polygonCoords) {let crossings = 0for (let i = 0, j = polygonCoords[0].length - 1; i < polygonCoords[0].length; j = i++) {const xi = polygonCoords[0][i][0]const yi = polygonCoords[0][i][1]const xj = polygonCoords[0][j][0]const yj = polygonCoords[0][j][1]if (((yi <= point[1] && point[1] < yj) || (yj <= point[1] && point[1] < yi)) &&point[0] < ((xj - xi) * (point[1] - yi)) / (yj - yi) + xi) {crossings++}}return crossings % 2 !== 0}// 存储生成的随机点let randomPoints = []// 获取多边形的最小和最大经纬度范围let minLat = polygonCoords[0][0][1]let maxLat = polygonCoords[0][0][1]let minLng = polygonCoords[0][0][0]let maxLng = polygonCoords[0][0][0]for (let i = 0; i < polygonCoords[0].length; i++) {const lat = polygonCoords[0][i][1]const lng = polygonCoords[0][i][0]if (lat < minLat) {minLat = lat}if (lat > maxLat) {maxLat = lat}if (lng < minLng) {minLng = lng}if (lng > maxLng) {maxLng = lng}}for (let i = 0; i < number; i++) {let isPointInside = falselet randomPoint// 不断尝试生成随机点,直到点在多边形内while (!isPointInside) {// 在多边形的经纬度范围内随机生成一个点const randomLat = minLat + (maxLat - minLat) * Math.random()const randomLng = minLng + (maxLng - minLng) * Math.random()randomPoint = [randomLng, randomLat]// 使用射线法判断点是否在多边形内isPointInside = isPointInsidePolygon(randomPoint, polygonCoords)}randomPoints.push(randomPoint)}return randomPoints}})</script></body>
</html>

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

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

相关文章

【计算机视觉】图像基本操作

1. 数字图像表示 一幅尺寸为MN的图像可以用矩阵表示&#xff0c;每个矩阵元素代表一个像素&#xff0c;元素的值代表这个位置图像的亮度&#xff1b;其中&#xff0c;彩色图像使用3维矩阵MN3表示&#xff1b;对于图像显示来说&#xff0c;一般使用无符号8位整数来表示图像亮度&…

javaweb-day03-前端零碎

1.Ajax &#xff08;1&#xff09;概述 &#xff08;2&#xff09;原生Ajax-繁琐&#xff0c;现已基本弃用 2.Ajax-Axios &#xff08;2&#xff09;案例 3.前端工程化 3.1 基础 3.2 vue项目 &#xff08;1&#xff09;项目目录结构 &#xff08;2&#xff09;主要开发…

论文阅读:A Software Platform for Manipulating theCamera Imaging Pipeline

论文代码开源链接&#xff1a; A Software Platform for Manipulating the Camera Imaging Pipelinehttps://karaimer.github.io/camera-pipeline/摘要&#xff1a;论文提出了一个Pipline软件平台&#xff0c;可以方便地访问相机成像Pipline的每个阶段。该软件允许修改单个模块…

Python毕业设计选题:基于django+vue的智能停车系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 车主管理 车辆信息管理 车位信息管理 车位类型管理 系统…

使用phpStudy小皮面板模拟后端服务器,搭建H5网站运行生产环境

一.下载安装小皮 小皮面板官网下载网址&#xff1a;小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01; 安装说明&#xff08;特别注意&#xff09; 1. 安装路径不能包含“中文”或者“空格”&#xff0c;否则会报错&#xff08;例如错误提示&#xff1a;Cant cha…

【jmeter】服务器使用jmeter压力测试(从安装到简单压测示例)

一、服务器上安装jmeter 1、官方下载地址&#xff0c;https://jmeter.apache.org/download_jmeter.cgi 2、服务器上用wget下载 # 更新系统 sudo yum update -y# 安装 wget 以便下载 JMeter sudo yum install wget -y# 下载 JMeter 压缩包&#xff08;使用 JMeter 官方网站的最…

【大数据学习 | Spark-Core】详解Spark的Shuffle阶段

1. shuffle前言 对spark任务划分阶段&#xff0c;遇到宽依赖会断开&#xff0c;所以在stage 与 stage 之间会产生shuffle&#xff0c;大多数Spark作业的性能主要就是消耗在了shuffle环节&#xff0c;因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。 负责shuffle…

Flink高可用配置(HA)

从Flink架构中我们可以看到,JobManager这个组件非常重要,是中心协调器,负责任务调度和资源管理。默认情况下,每个Flink集群只有一个JobManager实例。这会产生单点故障(SPOF):如果JobManager崩溃,则无法提交新程序,正在运行的程序也会失败。通过JobManager的高可用性,…

Meta 发布Sapiens人类视觉模型,2D 姿势估计、人体分割、深度估计

meta提出了 Sapiens&#xff0c;人类基础视觉模型。这是一个以人为中心的视觉任务的模型。包括&#xff1a; 2D 姿势估计、人体部位分割、深度估计和表面法线预测。 此模型本身支持 1K 高分辨率推理&#xff0c;Sapiens在超过 3 亿张人类图像上预训练的模型进行微调&#xff0c…

NLP论文速读(EMNLP2024)|多风格可控生成的动态多奖励权重

论文速读|Dynamic Multi-Reward Weighting for Multi-Style Controllable Generation 论文信息&#xff1a; 简介&#xff1a; 本文探讨了文本风格在沟通中的重要性&#xff0c;指出文本风格传达了除原始语义内容之外的多种信息&#xff0c;如人际关系动态&#xff08;例如正式…

鸿蒙中的Image组件如何引用网络图片

1.引用网络图片资源 引入网络图片需要申请权限ohos.permission.INTERNET&#xff0c;此时&#xff0c;Image组件的src参数为网络图片的链接&#xff0c;为了成功加载网络图片&#xff0c;您需要在module.json5文件中申请网络访问权限 注意&#xff1a;实际可用的时候&#xff0…

七天掌握SQL--->第七天:项目实践与总结

一、项目实践 1.1 项目背景 假设我们正在开发一个名为“在线图书管理系统”的项目。该项目旨在帮助图书馆管理员管理图书的借阅、归还、库存等操作&#xff0c;同时为读者提供一个便捷的图书查询和借阅平台。 1.2 数据库设计 1.2.1 需求分析 根据项目的需求&#xff0c;我…

React Hooks中use的细节

文档 useState useState如果是以函数作为参数&#xff0c;那要求是一个纯函数&#xff0c;不接受任何参数&#xff0c;同时需要一个任意类型的返回值作为初始值。 useState可以传入任何类型的参数作为初始值&#xff0c;当以一个函数作为参数进行传入的时候需要注意&#xff…

springboot 配置跨域访问

什么是 CORS&#xff1f; CORS&#xff0c;全称是“跨源资源共享”&#xff08;Cross-Origin Resource Sharing&#xff09;&#xff0c;是一种Web应用程序的安全机制&#xff0c;用于控制不同源的资源之间的交互。 在Web应用程序中&#xff0c;CORS定义了一种机制&#xff0…

应用于蛋白-小分子柔性对接的等变VAE模型 - FlexPose 测评

FlexPose 应用于蛋白-小分子柔性对接场景下&#xff0c;能够在欧几里得空间中直接对蛋白-小分子复合结构的进行预测的等变神经网络模型&#xff0c;而无需传统的采样和评分策略。此模型考虑了蛋白氨基酸主链和侧链的柔性&#xff0c;会根据小分子的情况对氨基酸的侧链和主链进行…

【Web前端】如何构建简单HTML表单?

HTML 表单是 Web 开发中非常重要的组成部分。它们是与用户交互的主要方式&#xff0c;能够收集用户输入的数据。表单的灵活性使它们成为 HTML 中最复杂的结构之一&#xff0c;但若使用正确的结构和元素&#xff0c;可以确保其可用性和无障碍性。 表单的基本结构 HTML 表单使用…

乌班图单机(不访问外网)部署docker和服务的方法

面向对象:Ubuntu不能访问外网的机子,部署mysql、redis、jdk8、minio 过程: 1、安装docker(照着图去这里找对应的下载下来https://download.docker.com/linux/static/stable/),将7个docker官网下载的文件下载下来后,传上去服务器随便一个文件夹或者常用的opt或者/usr/lo…

IDEA全局设置-解决maven加载过慢的问题

一、IDEA全局设置 注意&#xff1a;如果不是全局设置&#xff0c;仅仅针对某个项目有效&#xff1b;例在利用网上教程解决maven加载过慢的问题时&#xff0c;按步骤设置却得不到解决&#xff0c;原因就是没有在全局设置。 1.如何进行全局设置 a.在项目页面&#xff0c;点击f…

狂野飙车8+(Asphalt 8+) for Mac 赛车竞速游戏 安装教程

Mac分享吧 文章目录 狂野飙车8(Asphalt 8) for Mac 赛车竞速游戏软件 效果图展示一、狂野飙车8(Asphalt 8) 赛车竞速游戏 Mac电脑版——v2.1.11️⃣&#xff1a;下载软件2️⃣&#xff1a;安装软件2.1 左侧安装包拖入右侧文件夹中&#xff0c;等待安装完成&#xff0c;运行软件…

标贝科技:自动驾驶中的数据标注类别分享

国内的自动驾驶行业正处于快速发展阶段。伴随随着芯片算力的提升、算法的优化以及数据采集标注传感设备的日益成熟&#xff0c;自动驾驶技术正逐步从实验室转向商业化应用。电车时代的来临&#xff0c;加速了自动驾驶时代的全面降临&#xff0c;23年国内汽车行业内卷的开始&…