基于arcgis js api 4.x开发点聚合效果

一、代码
 

<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport"
          content="initial-scale=1,maximum-scale=1,user-scalable=no" />
    <title>
        Build a custom layer view using deck.gl | Sample | ArcGIS API for
        JavaScript 4.23
    </title>

    <link rel="stylesheet" href="http://localhost/arcgis_js_api_424/4.24/esri/css/main.css" />
    <script src="http://localhost/arcgis_js_api_424/4.24/init.js"></script>

    <style>
        html,
        body,
        #viewDiv {
            padding: 0;
            margin: 0;
            height: 100%;
            width: 100%;
        }
        #infoDiv {
            padding: 10px;
        }
    </style>

    <script>
        require(["esri/Map", "esri/views/MapView", "esri/Graphic", "esri/layers/GraphicsLayer",
            "esri/widgets/Editor",
            "esri/layers/TileLayer", "esri/layers/WMTSLayer", "esri/layers/WebTileLayer",
            "esri/geometry/Extent", "esri/geometry/Point",
            "esri/widgets/Sketch/SketchViewModel",
            "esri/layers/FeatureLayer", "esri/geometry/SpatialReference",
            "esri/symbols/SimpleFillSymbol", "esri/geometry/Polygon", "esri/symbols/SimpleMarkerSymbol",
            "esri/symbols/SimpleLineSymbol",
            "esri/renderers/HeatmapRenderer", "esri/renderers/UniqueValueRenderer", "esri/Color",
            "esri/layers/support/LabelClass", "esri/widgets/Legend", "esri/widgets/Expand",
        ], (
            Map,
            MapView, Graphic, GraphicsLayer, Editor,
            TileLayer, WMTSLayer, WebTileLayer, Extent, Point, SketchViewModel,
            FeatureLayer, SpatialReference, SimpleFillSymbol, Polygon, SimpleMarkerSymbol,
            SimpleLineSymbol, HeatmapRenderer,  
            UniqueValueRenderer, Color, LabelClass, Legend, Expand
        ) => {
            $.ajax({
                url: "./data/point.json",
                type: "get",
                dataType: "json",
                success: function (data) {
                    map = new Map({
                        //  basemap: "streets-vector"
                    });

                    console.log(data)
                    const view = new MapView({
                        container: "viewDiv",
                        map: map,
                        // center: [113.55, 34.78],
                        //zoom:12,
                        spspatialReference: {
                            wkid: 4547
                        },
                        extent: new Extent({
                            xmin: 344577.88,
                            ymin: 2380651.49,
                            xmax: 655422.12,
                            ymax: 5036050.38,
                            spatialReference: new SpatialReference({ wkid: 4547 })
                        })
                    });
                    var features = data.features;
                    let symbol = {
                        type: "simple-marker",  // autocasts as new SimpleMarkerSymbol()
                        style: "square",
                        color: "blue",
                        size: "18px",  
                        outline: {  // autocasts as new SimpleLineSymbol()
                            color: [255, 255, 0],
                            width: 3  // points
                        }
                    };
                    var graphicList = [];
                    for (var i = 0; i < 50000; i++) {
                        var feature = features[i];
                        if (i < 30000) {
                            graphicList.push(new Graphic({
                                geometry: new Point({
                                    x: feature.geometry.coordinates[0],
                                    y: feature.geometry.coordinates[1],
                                    spatialReference: {
                                        wkid: 4547
                                    }
                                }),
                                symbol: symbol,
                                attributes: { "ObjectID": i + 1, "PatrolStatus": "已巡","Rate":1.0 }
                            }));
                        }
                        if (i >= 30000) {
                            graphicList.push(new Graphic({
                                geometry: new Point({
                                    x: feature.geometry.coordinates[0],
                                    y: feature.geometry.coordinates[1],
                                    spatialReference: {
                                        wkid: 4547
                                    }
                                }),
                                symbol: symbol,
                                attributes: { "ObjectID": i + 1, "PatrolStatus": "未巡", "Rate": 0.0 }
                            }))
                        };
                    }


                    var renderer = {
                        type: "unique-value",
                        field: "PatrolStatus",
                        defaultSymbol: null,
                        uniqueValueInfos: [{
                            value: "已巡",
                            symbol: {
                                type: "simple-marker",  
                                style: "circle",
                                color: "rgb(182,232,105)",
                                size: "12px",  
                                outline: {  
                                    color: "rgb(140,203,23)",
                                    width: "4px",
                                }
                            }
                        }, {
                            value: "未巡",
                            symbol: {
                                type: "simple-marker", 
                                style: "circle",
                                color: "rgb(195,195,195)",
                                size: "12px",
                                outline: {  
                                    color: "rgb(164,164,164)",
                                    width: "4px",
                                }
                            }
                        }]
                    }

                    const clusterConfig = {
                        type: "cluster",
                        clusterRadius: 40,
                        maxScale: 5000,
                        popupTemplate: {
                            title: "巡检点聚类信息",
                            content: "此聚类表示 {cluster_count} 个巡检点",
                            fieldInfos: [{
                                fieldName: "cluster_count",
                                format: {
                                    places: 0,
                                    digitSeparator: true
                                }
                            }],
                            labelingInfo: [{
                                deconflictionStrategy: "none",
                                labelExpressionInfo: {
                                    expression: "Text($feature.cluster_count, '#,###')"
                                },
                                symbol: {
                                    type: "text",
                                    color: "#004a5d",
                                    font: {
                                        weight: "bold",
                                        family: "Noto Sans",
                                        size: "12px"
                                    }
                                },
                                labelPlacement: "center-center",
                            }],
                           
                            //clusterMinSize: "24px",
                            //clusterMaxSize: "60px",

                        }
                    };
                    let featureLayer = new FeatureLayer({
                        fields: [
                            {
                                name: "ObjectID",
                                alias: "ObjectID",
                                type: "oid"
                            },
                            {
                                name: "PatrolStatus",
                                alias: "巡检状态",//用于图例上显示中文
                                type: "string"
                            },
                            {
                                name: "Rate",
                                alias: "Rate",
                                type: "double"
                            }
                        ],
                        outFields: ["*"],
                        opacity: 1,
                        source: graphicList,
                        featureReduction: clusterConfig,
                        renderer: renderer,
                        popupTemplate: {
                            title: "巡检点信息",
                            content: [
                                {
                                    type: "fields",
                                    fieldInfos: [
                                        {
                                            fieldName: "ObjectID",
                                            label: "巡检ID"
                                        },
                                        {
                                            fieldName: "PatrolStatus",
                                            label: "巡检状态"
                                        },
                                       
                                    ]
                                }
                            ]
                        }

                    });

                    map.add(featureLayer);



                    const legend = new Legend({
                        view: view,
                        container: "legendDiv"
                    });
                    const infoDiv = document.getElementById("infoDiv");
                    view.ui.add(new Expand({
                        view: view,
                        content: infoDiv,
                        expandIcon: "list-bullet",
                        expanded: false
                    }), "top-left");
                    const toggleButton = document.getElementById("cluster");
                    toggleButton.addEventListener("click", () => {
                        let fr = featureLayer.featureReduction;
                        featureLayer.featureReduction = fr && fr.type === "cluster" ? null : clusterConfig;
                        toggleButton.innerText = toggleButton.innerText === "开启聚合" ? "取消聚合" : "开启聚合";
                    });

                }
            })
        });

    </script>
</head>

<body>
    <div id="viewDiv"></div>
    <div id="infoDiv" class="esri-widget">
        <button id="cluster" class="esri-button">取消聚合</button>
        <div id="legendDiv"></div>
    </div>
</body>
</html>

二、效果

1.开启聚合


2.取消聚合

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SPEC CPU 2017 quick start

SPEC CPU 2017 quick start 我这里选择在 linux&#xff08;ubuntu22.04.3&#xff09; 上安装 SPEC CPU 2017&#xff0c;gcc、g、gfortran 均使用 sudo apt install xxx 安装&#xff08;其版本为11.4.0&#xff09; 官方的 SPEC CPU 2017 在 Unix Systems 安装示例&#x…

2024-01-18 在Android Studio中,可以通过修改build.gradle文件(位于你的应用模块目录下)来自定义生成的APK名称

一、在Android Studio中&#xff0c;可以通过修改build.gradle文件&#xff08;位于你的应用模块目录下&#xff09;来自定义生成的APK名称&#xff0c;在build.gradle里面增加下面的代码 applicationVariants.all { variant ->variant.outputs.all {outputFileName "…

349. 两个数组的交集(力扣)(OJ题)

题目链接&#xff1a;349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 个人博客主页&#xff1a;https://blog.csdn.net/2301_79293429?typeblog 专栏&#xff1a;https://blog.csdn.net/2301_79293429/category_12545690.html 给定两个数组 nums1 和 nums2 &a…

json-server的基础使用

json-server 是什么? 用来快速搭建模拟的 REST API 的工具包 可以30秒内快速为我们搭建一个假的基于 REST API的服务 我们要如何使用呢&#xff1f; 1.先安装 //全局安装 npm i -g json-server 2.创建文件 db.json 我们需要在db.json放入一点内容 放入示例&#xff1a; {/…

用 Python 制作可视化 GUI 界面,一键实现证件照背景颜色的替换

今天&#xff0c;我们来分享一下如何通过Python的十来行代码来替换证件照的背景颜色&#xff0c;那么在最后&#xff0c;小编也会将上述的流程制作成一个GUI界面来方便大家使用。关于界面的大致模样其实和先前的相差不大&#xff0c;大家应该都看过上一篇的内容 界面大体的样子…

Python项目——久坐提醒定时器(PySide6)编写

1、介绍 使用Python编写一个久坐提醒软件。功能&#xff1a; 设置工作时间。设置休息时间。选择休息时是否播放音乐。休息时&#xff0c;软件置顶&#xff0c;且不能关闭。 2、工具 语言&#xff1a;python3.11UI设计工具&#xff1a;Qt designer编译器&#xff1a;PyCharm包…

北斗卫星:助力社区矫正人员追踪与管理的科技突破

北斗卫星&#xff1a;助力社区矫正人员追踪与管理的科技突破 社区矫正人员是一个重要的社会群体&#xff0c;他们的安全和管理对于社会的和谐稳定至关重要。随着技术的飞跃发展&#xff0c;北斗卫星系统作为我国自主研发的卫星导航系统&#xff0c;正逐渐在社区矫正工作中发挥…

《世界之外》提前开测,网易打响国乙大战

1月18日&#xff0c;国乙市场迎来了一场大战。 原定于1月26日开服的网易新乙游《世界之外》&#xff0c;突然宣布在1月18日进行不删档、不限量测试&#xff0c;从某种意义上来说&#xff0c;其实就等同于提前公测。 而同一天开服的还有叠纸的全新3D乙游《恋与深空》&#xff…

比特币狂人引爆达沃斯论坛

点击查看TechubNews原文链接&#xff1a;比特币狂人引爆达沃斯论坛 比特币狂人、自称无政府资本主义者的阿根廷总统米莱在达沃斯的最新演讲引爆社交网络大讨论。 1 月 15 日&#xff0c;第 54 届世界经济论坛在瑞士阿尔卑斯山的达沃斯开幕。来自约 60 个国家首脑和跨国公司的领…

音乐人声分离工具:极简的人声和背景音乐分离工具

这是一个极简的人声和背景音乐分离工具&#xff0c;本地化网页操作&#xff0c;无需连接外网&#xff0c;使用 2stems/4stems/5stems 模型。 将一首歌曲或者含有背景音乐的音视频文件&#xff0c;拖拽到本地网页中&#xff0c;即可将其中的人声和音乐声分离为单独的音频wav文件…

编程笔记 html5cssjs 045 网页布局

编程笔记 html5&css&js 045 网页布局 一、网页布局二、头部区域三、菜单导航区域三、内容区域四、不相等的列五、底部区域六、box-sizingbox-sizing 属性可以被用来调整这些表现&#xff1a;属性值content-boxborder-box 六、响应式网页布局小结 网页布局有很多种方式&…

MySQL(视图,存储函数,存储过程)

作业1&#xff1a; 作业实现&#xff1a; 首先创建学生表&#xff0c;课程表&#xff0c;以及学生选课表。 CREATE TABLE Student (Sno INT PRIMARY KEY,Sname VARCHAR(20) NOT NULL,Ssex CHAR(1) CHECK (Ssex IN (男, 女)),Sage INT,SDept VARCHAR(20) DEFAULT 计算机 );CRE…

zabbix监控扩展

目录 一、zabbix自动发现与自动注册 &#xff08;一&#xff09;理论定义 1.自动发现 2.自动注册 &#xff08;二&#xff09;实操部署 1.自动发现 &#xff08;1&#xff09;新增一台客户端命名为zbx-agent02 ① 配置时间同步 ② 在服务端和客户端上配置 hosts 解析 …

枚举类型缝缝补补

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 1.关键字enum的定义 enum是C语言中的一个关键字&#xff0c;enum叫枚举数据类型&#…

天津想转行学python培训班靠谱吗?

现在的职业如此繁多&#xff0c;很多人把高薪当成衡量工作好坏的重要标准&#xff0c;因此IT行业以超出其他行业几倍薪资水平成为不错的选择&#xff0c;而Python又以其简单易学好上手成为大家所青睐的学习目标。 Python发展前景如何 Python语言就业发展方向广泛&#xff1a;…

C-Lodop (Print)前端自定义打印控件

1.首先安装C-Lodop.exe软件&#xff0c;参考地址 Welcome to C-Lodop 2.软件下载地址 下载中心 - Lodop和C-Lodop官网主站 3.案列 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script srchttp://19…

Nginx前后端分离部署springboot和vue项目

Nginx前后端分离部署springboot和vue项目&#xff0c;其实用的比较多&#xff0c;有的小伙伴对其原理和配置还一知半解&#xff0c;现在就科普一下&#xff1a; 1、准备后端项目 后端工程无论是微服务还是单体&#xff0c;一般最终都是jar启动&#xff0c;关键点就是把后端服…

谷达冠楠科技:抖音开网店新手小白可以卖的产品

随着互联网的发展&#xff0c;越来越多的人选择在网上开设自己的店铺。而抖音作为目前最火的短视频平台&#xff0c;也提供了开店的功能。那么&#xff0c;对于新手小白来说&#xff0c;抖音开网店可以卖哪些产品呢? 我们可以考虑的是服装类商品。抖音上有很多时尚博主&#x…

工厂企业消防安全AI可视化视频智能监管解决方案

一、方案背景 2023年11月20日下午6时30分许&#xff0c;位于江苏省无锡市惠山区前洲街道的某公司突发严重火灾&#xff0c;共造成7人死亡。这次火灾提醒我们工业安全至关重要&#xff0c;企业都应该时刻保持警惕&#xff0c;加强安全意识和培训&#xff0c;提高应对突发事件的…

【单片机】改写DS2431芯片的地址码,地址ROM,DS2431芯片解密

对DS2431里面的128字节可以进行任意读写&#xff0c;方式可以看这里&#xff1a;https://blog.csdn.net/x1131230123/article/details/132248958 但DS2431芯片的地址码是光刻不可修改的&#xff0c;所以只有使用模拟芯片。 原理&#xff1a; https://www.dianyuan.com/article…