vue+arcgis api for js实现地图经纬网格显示

server/2025/1/20 18:21:54/

vue代码调用:

import { gridLineLatLng } from './js/mapGrids.js'export default {mounted(){// 显示经纬网格gridLineLatLng.currentMap = this.mapAndView// gridLineLatLng.isGetMapPageXmax = falsegridLineLatLng.init()},beforeDestroy() {// 删除经纬网格gridLineLatLng.destory()},}

详细实现代码 mapGrids.js:

/** * 地图网格工具js* */import Graphic from '@arcgis/core/Graphic.js'
import GraphicsLayer from '@arcgis/core/layers/GraphicsLayer.js'/** 地图经纬网格 */
let gridLineLatLng = {currentMap: null, // viewcurrentFeatureLayer: null, // 网格图层layerstationaryHandler: null,color: 'blue', // 网格颜色 '#6666ff'degree: 1, // 间隔度数,xmax: 0,isGetMapPageXmax: true, // 是否获取地图页面最右边的地图可见范围(最大经度)timer: null,init: function() {let gridLineLayer = gridLineLatLng.currentMap.map.findLayerById('gridLineLayer')if (!gridLineLayer) {gridLineLayer = new GraphicsLayer({id: 'gridLineLayer',graphics: [],spatialReference: gridLineLatLng.currentMap.spatialReference})gridLineLatLng.currentMap.map.add(gridLineLayer)} else {// 清理图层gridLineLayer.graphics.removeAll()}gridLineLatLng.currentFeatureLayer = gridLineLayerlet zoom = gridLineLatLng.currentMap.zoom // 获取当前地图缩放级别gridLineLatLng.degree = gridLineLatLng.getDegree(zoom)// 经纬度间隔let degree = gridLineLatLng.degree  // 数值越小,计算事件越长const decimalPart = degree.toString().split('.')[1]// 经纬度小数部分const fixedNum = decimalPart ? decimalPart.length : 0// 经纬度小数点后保留位数console.log('zoom:', zoom, ', increase degree:', degree)// 获取地图页面最右边的地图可见范围(最大经度)gridLineLatLng.xmax = 0if (gridLineLatLng.isGetMapPageXmax) {// 获取地图页面右上角的经纬度const html = document.getElementById('map-container')const screenPoint = {x: html.clientWidth,y: 0,spatialReference: gridLineLatLng.currentMap.spatialReference}const point = gridLineLatLng.currentMap.toMap(screenPoint)gridLineLatLng.xmax = point.x}if (zoom > 0 || zoom < 20) {let extent = gridLineLatLng.currentMap.extentlet ymax = extent.ymax // 当前视口最北点纬度let xmax = gridLineLatLng.xmax || extent.xmax // 当前视口最东点经度let ymin = extent.yminlet xmin = extent.xminlet lineSymbol = {type: 'simple-fill', outline: { color: gridLineLatLng.color,width: 1,style: 'dash'}}let textSymbol = {type: 'text',  color: 'white',haloColor: 'red',haloSize: '1px',text: '',xoffset: 0,yoffset: -10,font: {  size: 11,weight: 'bold'}}// 经线网格// for (let index = -180; index <= 180; index += degree) {for (let index = xmin + degree / 3; index <= xmax; index += degree) {let polyline = {type: 'polyline', paths: [[index, 90], [index, -90]],spatialReference: gridLineLatLng.currentMap.spatialReference}let lonLineGraphic = new Graphic({geometry: polyline,symbol: lineSymbol})// 添加到图层组中gridLineLatLng.currentFeatureLayer.graphics.add(lonLineGraphic)textSymbol.text = index.toFixed(fixedNum) + '°'const textGraphic = new Graphic({geometry: {type: 'point', longitude: index,latitude: ymax,spatialReference: gridLineLatLng.currentMap.spatialReference}, symbol: textSymbol})gridLineLatLng.currentFeatureLayer.graphics.add(textGraphic)}// 纬线网格// for (let index = -90; index <= 90; index += degree) {for (let index = ymin + degree / 3; index <= ymax; index += degree) {let polyline = {type: 'polyline', paths: [[-180, index], [180, index]],spatialReference: gridLineLatLng.currentMap.spatialReference}let lonLineGraphic = new Graphic({geometry: polyline,symbol: lineSymbol})// 添加到图层组中gridLineLatLng.currentFeatureLayer.graphics.add(lonLineGraphic)textSymbol.text = index.toFixed(fixedNum) + '°'textSymbol.yoffset = 4textSymbol.xoffset = -22const textGraphic = new Graphic({geometry: {type: 'point', longitude: xmax,latitude: index,spatialReference: gridLineLatLng.currentMap.spatialReference}, symbol: textSymbol})gridLineLatLng.currentFeatureLayer.graphics.add(textGraphic)}}// 添加范围变动监听,,动态生成网格gridLineLatLng.stationaryHandler = gridLineLatLng.currentMap.watch('stationary', status => {if (status) {if (gridLineLatLng.timer) {clearTimeout(gridLineLatLng.timer)}gridLineLatLng.timer = setTimeout(() => {if (gridLineLatLng.stationaryHandler) {gridLineLatLng.stationaryHandler.remove()}gridLineLatLng.init()}, 1000)}})},getDegree: function(zoom) {let degree = 0.01switch (zoom) {case 0:degree = 0.7breakcase 1:degree = 0.3breakcase 2:degree = 0.1breakcase 3:degree = 0.06breakcase 4:degree = 0.04breakcase 5:degree = 0.02breakcase 6:degree = 0.009breakcase 7:degree = 0.006breakcase 8:degree = 0.003breakdefault:degree = 0.01break}return degree},destory: function() {// 移除地图事件if (gridLineLatLng.stationaryHandler) {gridLineLatLng.stationaryHandler.remove()}// 移除图层gridLineLatLng.currentMap.map.remove(gridLineLatLng.currentFeatureLayer)}
}export {gridLineLatLng
}

实现思路可参考:
vue+leaflet实现地图网格(https://blog.csdn.net/qq_41441896/article/details/131470559)


http://www.ppmy.cn/server/159957.html

相关文章

efficient_pcm 函数

efficient_pcm 函数&#xff0c;旨在为一个 LDPC&#xff08;低密度奇偶校验&#xff09;编码系统提供一个优化的数据结构和计算方法。具体来说&#xff0c;efficient_pcm 函数是为了优化存储和计算基于奇偶校验矩阵 H 的过程&#xff0c;简化后续解码过程中的矩阵操作。 函数…

PL/SQL语言的文件操作

PL/SQL语言的文件操作 引言 PL/SQL&#xff08;Procedural Language/SQL&#xff09;是Oracle数据库提供的一种过程化编程语言&#xff0c;它结合了SQL的强大数据处理能力和过程性编程的灵活性。PL/SQL不仅可以用于数据库的操作和处理用户输入的数据&#xff0c;还可以进行丰…

MySQL Workbench安装教程以及菜单汉化

WorkBench的下载 直接给下载MySql WorkBench的链接&#xff0c;直接进入正题&#xff1a;MySQL :: Download MySQL Workbench[这里是图片001]https://dev.mysql.com/downloads/workbench/进入了下载界面&#xff1a; &#xff08;安装路径自己看着办&#xff0c;注意安装路径不…

个人vue3-学习笔记

声明:这只是我个人的学习笔记(黑马),供以后复习用 。一天学一点,随时学随时更新。明天会更好的! 这里只给代码,不给运行结果,看不出来代码的作用我也该进厂了。。。。。 Day1 使用create-vue创建项目。 1.检查版本。 node -v 2.创建项目 npm init vue@latest 可…

Docker新手使用教程

一、Docker 的基本概念 镜像 (Image): 镜像是一个只读的模板&#xff0c;用于创建 Docker 容器。镜像包含了运行应用程序所需的所有内容&#xff1a;代码、运行时环境、库、配置文件等。可以将镜像看作是应用程序的 “代码”。你可以从 Docker Hub 或其他镜像仓库下载现成的镜…

【Java】—— 基于Websocket实现页面聊天效果

基于SpringBootVue和Websocket实现页面聊天效果&#xff0c;如下&#xff1a; 一、WebSocket 的主要特点 全双工通信&#xff1a;一旦 WebSocket 连接建立&#xff0c;客户端和服务器就可以随时相互发送消息&#xff0c;而不需要一方必须先发起请求。 较少的控制开销&#xf…

「港科技」联手「地平线」打造GPT风格的自动驾驶世界模型:DrivingWorld

摘要 最近在自回归&#xff08;AR&#xff09;生成模型方面的成功&#xff0c;例如自然语言处理中的GPT系列&#xff0c;激发了在视觉任务中复制这一成功的努力。一些研究尝试将这种方法扩展到自动驾驶中&#xff0c;通过构建基于视频的世界模型来生成逼真的未来视频序列和预测…

线性变换与矩阵的关系及其在机器学习中的应用

线性变换与矩阵的关系 线性变换是数学中&#xff0c;特别是在线性代数领域&#xff0c;一个极为重要的概念。它描述了一个向量空间到另一个向量空间&#xff08;可能是同一个空间&#xff09;的一种特定类型的映射&#xff0c;这种映射保持向量的加法和标量乘法运算不变。换句…