大屏地图区域显示、复选框多选打点,自定义窗体信息(vue3+TS)

效果图:

NPM 安装 Loader:
npm i @amap/amap-jsapi-loader --save

并设置 key 和安全密钥:

import AMapLoader from '@amap/amap-jsapi-loader';//引入高德地图window._AMapSecurityConfig = {securityJsCode: "「你申请的安全密钥」",};AMapLoader.load({key: "替换为你申请的 key", //申请好的 Web 端开发 Key,首次调用 load 时必填version: "2.0", //指定要加载的 JS API 的版本,缺省时默认为 1.4.15plugins: ["AMap.Scale"], //需要使用的的插件列表,如比例尺'AMap.Scale',支持添加多个如:['AMap.Scale','...','...']AMapUI: {//是否加载 AMapUI,缺省不加载version: "1.1", //AMapUI 版本plugins: ["overlay/SimpleMarker"], //需要加载的 AMapUI ui 插件},Loca: {//是否加载 Loca, 缺省不加载version: "2.0", //Loca 版本},}).then((AMap) => {var map = new AMap.Map("container"); //"container"为 <div> 容器的 idmap.addControl(new AMap.Scale()); //添加比例尺组件到地图实例上}).catch((e) => {console.error(e); //加载错误提示});
完整代码:
<template><div id="map-chart"></div><a-checkbox-group v-model:value="value" @change="changeCheckbox"><a-checkbox value="loc">坐标打点</a-checkbox><a-checkbox value="text">文字打点</a-checkbox></a-checkbox-group>
</template><script lang="ts" setup>
import AMapLoader from '@amap/amap-jsapi-loader';//引入高德地图
import { onMounted, ref, onUnmounted } from 'vue';// 声明全局变量 _AMapSecurityConfig
declare global {interface Window {_AMapSecurityConfig: {securityJsCode: string;};}
}
// 高德地图安全码
window._AMapSecurityConfig = {securityJsCode: '2bd59df65eacf33784ed68fbaa369b45',
}
let map;const value = ref([]);
const locList = [[108.034657, 32.06777], [107.511763, 31.196079],
[107.931884, 31.354703]
];
const textList = [{name: '通川区',position: [107.504962, 31.214231],contant: '通川区人杰地灵'},{name: '大竹县',position: [107.20742, 30.736122],contant: '大竹县人杰地灵'},{name: '渠县',position: [106.970746, 30.836348],contant: '渠县人杰地灵'}
];
const countyList = [{ name: '通川区', position: [107.42, 31.15], scaleLevel: 10.5 },{ name: '达川区', position: [107.47763, 31.35], scaleLevel: 11 },{ name: '大竹县', position: [107.26742, 30.668], scaleLevel: 10.5 },{ name: '渠县', position: [106.970746, 30.96348], scaleLevel: 10.5 },{ name: '开江县', position: [107.868609, 31.012945], scaleLevel: 11 },{ name: '宣汉县', position: [107.931884, 31.544703], scaleLevel: 10 },{ name: '万源市', position: [108.034657, 32.00777], scaleLevel: 10 }
]
var triMarkers = new Array();
var textMarkers = new Array();
var countyMarkers = new Array();//存放县级行政区划名称标识
var infoWindow;//信息窗口
let addLocMark = () => { };
let addTextMark = () => { };
let delLocMark = () => { };
let delTextMark = () => { };
function changeCheckbox(e) {if (e.includes('loc')) {addLocMark();}if (e.includes('text')) {addTextMark();}if (!e.includes('loc')) {delLocMark();}if (!e.includes('text')) {delTextMark();}
}onMounted(async () => {// 加载高德地图AMapLoader.load({key: "c0be00cd6badf373c1f9fd9a8f0114af", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15plugins: ['AMap.DistrictSearch'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等}).then((AMap) => {//加载成功map = new AMap.Map("map-chart", {  //设置地图容器idzoom: 8.9,           //初始化地图级别center: [107.56778, 31.309278], //初始化地图中心点位置});map.setMapStyle("amap://styles/darkblue");//设置地图样式//加载行政区划插件,用于绘制行政区划边界,区域面等功能AMap.plugin('AMap.DistrictSearch', function () {// 创建行政区查询对象var district = new AMap.DistrictSearch({// 返回行政区边界坐标等具体信息extensions: 'all',// 设置查询行政区级别为 市level: 'city'})// 调用 DrawSection 函数,参数为城市名、行政区划对象和是否搜索下一级标志DrawSection('达州市', district, true);// 绘制行政区划function DrawSection(cityName, district, isSearchNextLevel) {// 使用 district 对象的 search 方法查询指定的城市名district.search(cityName, function (status, result) {// 从查询结果中提取边界信息const bounds = result.districtList[0].boundaries;// 如果边界信息存在,则开始绘制if (bounds) {// 遍历所有边界for (let i = 0; i < bounds.length; i += 1) {if (isSearchNextLevel) {// 如果是搜索下一级(这里是市的级别),则绘制市的板块new AMap.Polygon({map, // 设置地图实例path: bounds[i], // 设置多边形路径strokeColor: '#1ee7e7', // 设置线条颜色fillColor: '#003c70', // 设置填充颜色fillOpacity: 0.5 // 设置填充透明度});} else {// 如果不是搜索下一级(这里是县的级别),则绘制县的边界线new AMap.Polyline({path: bounds[i], // 设置折线路径strokeColor: '#1ee7e7', // 设置线条颜色map // 设置地图实例});}}// 如果需要搜索下一级,并且有下一级行政区划信息if (isSearchNextLevel) {const districtList = result.districtList[0].districtList;// 遍历下一级行政区划列表for (let i = 0; i < districtList.length; i += 1) {// 递归调用 DrawSection,绘制下一级行政区划DrawSection(districtList[i].name, district, false);}}}});}// 隐藏其他地图添加遮罩层new AMap.DistrictSearch({extensions: 'all',subdistrict: 0}).search('达州市', function (status, result) {var outer = [// 外多边形坐标数组和内多边形坐标数组new AMap.LngLat(-360, 90, true),new AMap.LngLat(-360, -90, true),new AMap.LngLat(360, -90, true),new AMap.LngLat(360, 90, true)]var holes = result.districtList[0].boundariesvar pathArray = [outer]pathArray.push.apply(pathArray, holes)//将holes数组中的元素添加到pathArray数组中var polygon = new AMap.Polygon({pathL: pathArray,strokeColor: '#1ee7e7',//线颜色strokeWeight: 3,fillColor: '#05143e',//填充色fillOpacity: 0.8,})polygon.setPath(pathArray)map.add(polygon)})});//添加县级行政区划名称标识,可点击放大countyList.forEach((item) => {var countyMarker = new AMap.Marker({position: item.position,content: `<div style="color:#44f3fb;font-size:16px">${item.name}</div>`,offset: new AMap.Pixel(-20, -20)});map.add(countyMarker);countyMarkers.push(countyMarker);countyMarker.on('click', function (e) {map.setZoomAndCenter(item.scaleLevel, item.position);});});addLocMark = () => {locList.forEach((item) => {var marker = new AMap.Marker({position: item,});map.add(marker);triMarkers.push(marker);});};delLocMark = () => {map.remove(triMarkers);};addTextMark = () => {textList.forEach((item) => {var marker = new AMap.Marker({position: item.position,content: `<div class="text-mark">${item.name}</div>`,offset: new AMap.Pixel(-20, -20)});marker.on('click', function (e) {infoWindow = new AMap.InfoWindow({content: `<p style="color:#44f3fb;font-size:16px">标题:${item.name}</p><div class="text-info">${item.contant}</div>`,offset: new AMap.Pixel(0, -30)});infoWindow.open(map, e.target.getPosition());});map.add(marker);textMarkers.push(marker);});};delTextMark = () => {map.remove(textMarkers);infoWindow.close();};}).catch(e => {console.error(e);});
});onUnmounted(() => {map.destroy();
});
</script><style scoped lang="less">
#map-chart {width: 952px;height: 96%;
}.ant-checkbox-wrapper {margin: 0;color: aliceblue;font-size: 16px;
}.ant-checkbox-group {display: grid;gap: 10px;position: absolute;top: 150px;left: 520px;padding: 10px;background: rgba(33, 254, 254, 0.15);border-radius: 4%;
}
</style>
<style type="text/css">
.amap-logo {display: none;opacity: 0 !important;
}.amap-copyright {opacity: 0;
}
</style>

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

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

相关文章

基于YOLO深度学习和百度AI接口的手势识别与控制项目

基于YOLO深度学习和百度AI接口的手势识别与控制项目 项目描述 本项目旨在开发一个手势识别与控制系统&#xff0c;该系统能够通过摄像头捕捉用户的手势&#xff0c;并通过YOLO深度学习模型或调用百度AI接口进行手势识别。识别到的手势可以用来控制计算机界面的操作&#xff0…

单机docker-compose部署minio

单机多副本docker-compose部署minio 简单介绍 如果服务器有限可以单机挂载多硬盘实现多副本容错&#xff08;生产不推荐&#xff09; 部署好的文件状态 有两个重要文件 docker-compose.yaml和nginx.conf docker-compose.yaml是docker部署容器的配置信息包括4个minio和1个ng…

[数据集][目标检测]男女性别检测数据集VOC+YOLO格式9769张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;9769 标注数量(xml文件个数)&#xff1a;9769 标注数量(txt文件个数)&#xff1a;9769 标注…

Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发

Miracast/WifiDisplay概念介绍 Miracast Miracast是由Wi-Fi联盟于2012年所制定&#xff0c;以Wi-Fi直连&#xff08;Wi-Fi Direct&#xff09;为基础的无线显示标准。支持此标准的消费性电子产品&#xff08;又称3C设备&#xff09;可透过无线方式分享视频画面&#xff0c;例如…

CSS学习17--CSS3 过渡、2D变形、3D变形、动画

CSS3 过渡、2D变形、3D变形、动画 一、过渡二、2D变形 transform1.移动 translate2.缩放 scale3. 旋转 rotate4. 倾斜 skew 三、3D变形1. rotateX&#xff08;&#xff09;rotateY&#xff08;&#xff09; rotateZ&#xff08;&#xff09;2. 体会透视 perspective3. translat…

虚拟现实智能家居实训系统实训解决方案

随着科技的飞速发展&#xff0c;智能家居已成为现代生活的重要组成部分&#xff0c;它不仅极大地提升了居住的便捷性与舒适度&#xff0c;还推动了物联网、大数据、人工智能等前沿技术的融合应用。为了满足市场对智能家居专业人才日益增长的需求&#xff0c;虚拟现实智能家居实…

搭建 WordPress 及常见问题与解决办法

浪浪云活动链接 &#xff1a;https://langlangy.cn/?i8afa52 文章目录 环境准备安装 LAMP 堆栈 (Linux, Apache, MySQL, PHP)配置 MySQL 数据库 安装 WordPress配置 WordPress常见问题及解决办法数据库连接错误白屏问题插件或主题冲突内存限制错误 本文旨在介绍如何在服务器上…

Linux下vscode配置C++和python编译调试环境

Visual Studio Code (简称 VSCode) 是由微软开发的一款免费、开源、跨平台的代码编辑器。它支持 Windows、macOS 和 Linux 操作系统&#xff0c;并且内置对多种编程语言的支持&#xff0c;包括但不限于 C/C、Python、JavaScript、TypeScript、Java 和 Go 等。VSCode 主要用于编…

HarmonyOS ArkUI 构建布局

文章目录 一、构建布局1.线性布局 (Row/Column)1.1 Blank空白填充组件1.2 layoutWeight 自适应缩放1.3 自适应延伸 2.弹性布局 (Flex)3.栅格布局 (GridRow/GridCol)3.创建列表 (List) 一、构建布局 1.线性布局 (Row/Column) 线性布局文档 通过线性容器Row和Column构建 Column…

SpringBoot项目获取统一前缀配置以及获取非确定名称配置

SpringBoot项目获取统一前缀配置以及获取非确定名称配置 在SpringBoot项目中&#xff0c;我们经常看到统一前缀的配置&#xff0c;我们该怎么统一获取 my.config.a.namexiaoming my.config.a.age18 my.config.a.addressguangdong my.config.b.namexiaomli my.config.b.age20 my…

《深度学习》OpenCV 高阶 图像金字塔 用法解析及案例实现

目录 一、图像金字塔 1、什么是图像金字塔 2、图像金字塔作用 1&#xff09;金字塔尺度间的图像信息补充 2&#xff09;目标检测与识别 3&#xff09;图像融合与拼接 4&#xff09;图像增强与去噪 5&#xff09;图像压缩与编码 二、用法解析 1、向下采样 1&#xff09;概念…

使用SQL语句查询MySQL数据表

6.1 创建单表基本查询 1&#xff0e;Select 语句的语法格式及其功能 &#xff08;1&#xff09;Select 语句的一般格式。 Select < 字段名称或表达式列表 > From < 数据表名称或视图名称 > [ Where < 条件表达式 > ] [ Group By < 分组的字段名称…

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示 $str $_GET["name"]; //接受URL来的get形式的name传参 echo "<h2 aligncenter>欢迎用户".$str."</h2>";//在网页输出&#x…

STM32 之 SDRAM 详解

目录 前言 一、SDRAM 简介 二、SDRAM的组成原理 2.1存储单元阵列 2.1.1地址译码 2.1.2存储电容 2.2控制逻辑 2.2.1时钟同步 2.2.2命令解码 2.2.3模式寄存器 2.3数据输入 / 输出缓冲 2.3.1数据总线 2.3.2数据锁存 2.4刷新电路 2.4.1自动刷新 2.4.2自刷新 三、S…

SaaS化多租户实现的两种方法

SaaS化多租户实现的两种方法 SaaS系统的定义 SaaS&#xff0c;全称为Software-as-a-Service&#xff08;软件即服务&#xff09;&#xff0c;是一种基于云计算的软件交付模式。而SaaS系统&#xff0c;即是通过这种模式提供给用户的软件系统。即多租户系统&#xff0c;每个租户…

腾讯云升级多个云存储解决方案 以智能化存储助力企业增长

9月6日&#xff0c;在腾讯数字生态大会腾讯云储存专场上&#xff0c;腾讯云升级多个存储解决方案&#xff1a;Data Platform 数据平台解决方案重磅发布&#xff0c;数据加速器 GooseFS、数据处理平台数据万象、日志服务 CLS、高性能并行文件存储 CFS Turbo 等多产品全新升级&am…

TypeScript 扩展

扩展 ?:可选参数 可选链事实上并不是TypeScript独有的特性&#xff0c;它是ES11&#xff08;ES2020&#xff09;中增加的特性 可选链使用可选链操作符 ? 作用是当对象的属性不存在时&#xff0c;会短路&#xff0c;直接返回undefined&#xff0c;如果存在&#xff0c;那么…

SpringCloud集成ELK

1、添加依赖 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.1</version> </dependency>2、在logback-spring.xml中添加配置信息&#xff08;logback-sp…

Android SystemUI组件(06)导航栏创建分析虚拟按键

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧SystemBars分析中导航栏部分即可。 1 导航栏创建之makeStatusBarView 通过上一篇文章的…

前端 + 接口请求实现 vue 动态路由

前端 接口请求实现 vue 动态路由 在 Vue 应用中&#xff0c;通过前端结合后端接口请求来实现动态路由是一种常见且有效的权限控制方案。这种方法允许前端根据用户的角色和权限&#xff0c;动态生成和加载路由&#xff0c;而不是在应用启动时就固定所有的路由配置。 实现原理…