当前位置: 首页 > news >正文

【天地图-点线面最全功能】天地图实现功能:回显、绘制、编辑、删除任意点线面

实现效果图

在这里插入图片描述

实现功能

1. 回显点线面数据
2. 绘制点线面,保存可获取点线面数据
3. 编辑点线面,保存可获取最新编辑后的点线面数据
4. 删除任意点线面(解决删除按钮不能随元素位置变化(地图拖拽/放大缩小时)而变化问题->地图放大缩小拖动时处理删除按钮消失)

完整代码:

<!DOCTYPE html>
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>回显、绘制、编辑、删除任意点线面</title><script src="http://api.tianditu.gov.cn/api?v=4.0&amp;tk=应用KEY值"type="text/javascript"></script><style type="text/css">body,html {width: 100%;height: 100%;margin: 0;font-family: '微软雅黑';}#map {height: 400px;width: 100%;}input {margin-top: 10px;margin-left: 5px;font-size: 14px;}#contextMenu {position: absolute;background: white;border: 1px solid #ccc;box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.2);z-index: 1000;display: none;}.context-menu-item {padding: 2px 12px;cursor: pointer;font-size: 14px;}.context-menu-item:hover {background: #f0f0f0;}</style><script>var map, zoom = 10, handler;let isEdit = false; // 是否启用编辑// 右键菜单相关变量let contextMenu = null;let currentFeature = null; // 当前右键点击的元素let currentIndex = -1;     // 当前元素的索引let featureType = '';      // 元素类型:point/line/polygonlet viewChangeHandler = null;// 地图视图变化监听器// 点数据let pointOriginalArr = [[120.2536, 30.27093]]// 线数据let lineOriginalArr = [[[119.86084, 30.41702],[119.96796, 30.47353],[119.98718, 30.36758],],[[119.91714, 30.1855],[120.10666, 30.27923],]]// 面数据let polygonOriginalArr = [[[119.5752, 30.35392],[119.72488, 30.35273],[119.65347, 30.26025],],[[120.49118, 30.29109],[120.70541, 30.30532],[120.50629, 30.20211],[120.69855, 30.22703]]]function onLoad () {// 创建右键菜单createContextMenu();//初始化地图对象map = new T.Map("map");//设置显示地图的中心点和级别map.centerAndZoom(new T.LngLat(120.216329, 30.252589), zoom);// 绑定地图点击事件隐藏菜单map.addEventListener('click', hideContextMenu);// 地图视图变化监听viewChangeHandler = function () {if (currentFeature) {updateMenuPosition();}};map.addEventListener('movestart', hideContextMenu);map.addEventListener('moveend', viewChangeHandler);map.addEventListener('zoomend', viewChangeHandler);// 初始显示showPoint()showPolyLine()showPolygon()}// 位置更新function updateMenuPosition () {if (!currentFeature) return;let centerLngLat;switch (featureType) {case 'point':centerLngLat = currentFeature.getLngLat();break;case 'line':const lineLnglats = currentFeature.getLngLats();centerLngLat = getCenter(lineLnglats);break;case 'polygon':const polygonRings = currentFeature.getLngLats();centerLngLat = getCenter(polygonRings[0]);break;}const containerPoint = map.lngLatToContainerPoint(centerLngLat);const mapRect = map.getContainer().getBoundingClientRect();contextMenu.style.left = (containerPoint.x + mapRect.left) + 'px';contextMenu.style.top = (containerPoint.y + mapRect.top) + 'px';}// 几何中心计算方法function getCenter (lnglats) {// 确保有效的坐标数组if (!lnglats || lnglats.length === 0) return null;// 计算所有坐标点的平均值const sum = lnglats.reduce((acc, curr) => {// 处理不同格式的坐标(支持T.LngLat对象和普通数组)const lng = curr instanceof T.LngLat ? curr.lng : curr[0];const lat = curr instanceof T.LngLat ? curr.lat : curr[1];return {lng: acc.lng + lng,lat: acc.lat + lat};}, { lng: 0, lat: 0 });// 返回新的T.LngLat对象return new T.LngLat(sum.lng / lnglats.length,sum.lat / lnglats.length);}// 创建右键菜单function createContextMenu () {contextMenu = document.createElement('div');contextMenu.id = 'contextMenu';contextMenu.innerHTML = `<div class="context-menu-item" onclick="deleteFeature()">删除</div>`;document.body.appendChild(contextMenu);}// 显示右键菜单function showContextMenu (e, feature, index, type) {// 获取天地图事件中的原生事件对象const originalEvent = e.originalEvent || e.event || e;if (originalEvent.preventDefault) {originalEvent.preventDefault();}currentFeature = feature;currentIndex = index;featureType = type;updateMenuPosition(); // 初始定位contextMenu.style.display = 'block';// 使用原生事件的坐标,定位菜单项contextMenu.style.left = originalEvent.clientX + 'px';contextMenu.style.top = originalEvent.clientY + 'px';}// 隐藏右键菜单function hideContextMenu () {contextMenu.style.display = 'none';currentFeature = null;currentIndex = -1;featureType = '';}// 删除要素function deleteFeature () {if (currentIndex === -1) return;switch (featureType) {case 'point':pointOriginalArr.splice(currentIndex, 1);break;case 'line':lineOriginalArr.splice(currentIndex, 1);break;case 'polygon':polygonOriginalArr.splice(currentIndex, 1);break;}refreshMap();hideContextMenu();}// 刷新地图function refreshMap () {map.clearOverLays();showPoint();showPolyLine();showPolygon();}// 显示点function showPoint () {let pointArr = [];pointOriginalArr.forEach((item, index) => {let arr = []arr.push(new T.LngLat(item[0], item[1]))pointArr.push(arr);})pointArr.forEach((item, index) => {var marker = new T.Marker(item[0], {icon: new T.Icon({iconUrl: './imgs/marker-icon.png',}),});map.addOverLay(marker);// 右键菜单事件绑定(添加event参数传递)marker.addEventListener('contextmenu', function (apiEvent) {showContextMenu(apiEvent, marker, index, 'point');});if (!isEdit) return;marker.enableDragging();marker.addEventListener('dragend', function (e) {updatePointOriginalList([e.lnglat.lng, e.lnglat.lat], index)})})}// 更新点的数据,用于最后保存function updatePointOriginalList (arr, index) {pointOriginalArr[index] = arr}// 显示线function showPolyLine () {let lineArr = []lineOriginalArr.forEach((item, index) => {let arr = []item.forEach((item1) => {arr.push(new T.LngLat(item1[0], item1[1]))})lineArr.push(arr)})lineArr.forEach((item, index) => {var line = new T.Polyline(item);map.addOverLay(line);// 右键菜单事件绑定(添加event参数传递)line.addEventListener('contextmenu', function (apiEvent) {showContextMenu(apiEvent, line, index, 'line');});if (!isEdit) returnline.enableEdit();line.addEventListener('edit', function (e) {const ht = line.getLngLats()let arr = []ht.forEach((item) => {arr.push([item.lng, item.lat])})updateLineOriginalList(arr, index)})})}// 更新线的数据,用于最后保存function updateLineOriginalList (arr, index) {lineOriginalArr[index] = arr}// 显示面function showPolygon () {let polygonArr = []polygonOriginalArr.forEach((item, index) => {let arr = []item.forEach((item1) => {arr.push(new T.LngLat(item1[0], item1[1]))})polygonArr.push(arr)})polygonArr.forEach((item, index) => {var polygon = new T.Polygon(item);map.addOverLay(polygon);// 右键菜单事件绑定(添加event参数传递)polygon.addEventListener('contextmenu', function (apiEvent) {showContextMenu(apiEvent, polygon, index, 'polygon');});if (!isEdit) returnpolygon.enableEdit();polygon.addEventListener('edit', function (e) {const ht = polygon.getLngLats()[0]let arr = []ht.forEach((item) => {arr.push([item.lng, item.lat])})updatePolygonOriginalList(arr, index)})})}// 更新面的数据,用于最后保存function updatePolygonOriginalList (arr, index) {polygonOriginalArr[index] = arr}// 打点function openMarkerTool () {if (handler) handler.close();handler = new T.MarkTool(map, {follow: true,icon: new T.Icon({iconUrl: './imgs/marker-icon.png',// iconSize: new T.Point(24, 28), // 图标可视区域的大小}),});handler.open();handler.addEventListener('mouseup', function (e) {// 这里可以获取到当前点位的坐标pointOriginalArr.push([e.currentLnglat.lng, e.currentLnglat.lat])// 重新绘制地图,否则编辑不了refreshMap();handler.clear()})}// 画线function openPolylineTool () {if (handler) handler.close();handler = new T.PolylineTool(map);handler.open();handler.addEventListener('draw', function (e) {const currentLnglats = e.currentLnglatslet arr = []currentLnglats.forEach((item, index) => {arr.push([item.lng, item.lat])})lineOriginalArr.push(arr)// 重新绘制地图,否则编辑不了refreshMap();handler.clear()})}// 画面function openPolygonTool () {if (handler) handler.close();handler = new T.PolygonTool(map);handler.open();handler.addEventListener('draw', function (e) {const currentLnglats = e.currentLnglatslet arr = []currentLnglats.forEach((item, index) => {arr.push([item.lng, item.lat])})polygonOriginalArr.push(arr)// 重新绘制地图,否则编辑不了refreshMap();handler.clear()})}// 开启编辑function editClick () {isEdit = truemap.clearOverLays()showPoint()showPolyLine()showPolygon()}// 保存function saveClick () {console.log("点数据:", pointOriginalArr); // 两层结构:大数组中,包含点的小数组console.log("线数据:", lineOriginalArr); // 三层结构:大数组中包含线的数组,线的数组中包含经纬度小数组console.log("面数据:", polygonOriginalArr); // 三层结构:大数组中包含面的数组,面的数组中包含经纬小数组isEdit = falsemap.clearOverLays()showPoint()showPolyLine()showPolygon()}// 清空画布function clearClick () {isEdit = falsemap.clearOverLays()pointOriginalArr = []lineOriginalArr = []polygonOriginalArr = []}</script>
</head><body onLoad="onLoad()"><div id="map"></div><div class="line-btn"><input type="button" value="点工具" onClick="openMarkerTool() " /><input type="button" value="线工具" onClick="openPolylineTool() " /><input type="button" value="面工具" onClick="openPolygonTool() " /><input type="button" value="编辑" onClick="editClick() " /><input type="button" value="保存" onClick="saveClick() " /><input type="button" value="清除" onClick="clearClick() " /></div>
</body></html>

复制上面代码,替换应用KEY值即可看到功能效果。

相关文章:

【天地图-点线面最全功能】天地图实现功能:回显、绘制、编辑、删除任意点线面

实现效果图 实现功能 1. 回显点线面数据 2. 绘制点线面&#xff0c;保存可获取点线面数据 3. 编辑点线面&#xff0c;保存可获取最新编辑后的点线面数据 4. 删除任意点线面&#xff08;解决删除按钮不能随元素位置变化&#xff08;地图拖拽/放大缩小时&#xff09;而变化问题-&…...

003 SpringBoot集成Kafka操作

4.SpringBoot集成Kafka 文章目录 4.SpringBoot集成Kafka1.入门示例2.yml完整配置3.关键配置注释说明1. 生产者优化参数2. 消费者可靠性配置3. 监听器高级特性4. 安全认证配置 4.配置验证方法5.不同场景配置模板场景1&#xff1a;高吞吐日志收集场景2&#xff1a;金融级事务消息…...

【工具篇】【深度解析:2025 AI视频工具的全面指南】

随着人工智能技术的飞速发展,AI视频工具已经成为内容创作者、营销人员、教育工作者以及普通用户的得力助手。这些工具不仅简化了视频制作流程,还提供了前所未有的创意可能性。本文将详细介绍各类AI视频工具,帮助你找到最适合自己需求的工具。 1. 文生视频工具 智谱清影:这…...

前端面试真题 2025最新版

文章目录 写在前文CSS怪异盒模型JS闭包闭包的形成闭包注意点 CSS选择器及优先级优先级 说说flex布局及相关属性Flex 容器相关属性&#xff1a;Flex 项目相关属性 响应式布局如何实现是否用过tailwindcss&#xff0c;有哪些好处好处缺点 说说对象的 prototype属性及原型说说 pro…...

数据结构课程设计(java实现)---九宫格游戏,也称幻方

【问题描述】 九宫格&#xff0c;一款数字游戏&#xff0c;起源于河图洛书&#xff0c;与洛书是中国古代流传下来的两幅神秘图案&#xff0c;历来被认为是河洛文化的滥觞&#xff0c;中华文明的源头&#xff0c;被誉为"宇宙魔方"。九宫格游戏对人们的思维锻炼有着极大…...

一文掌握Charles抓包工具的详细使用

Charles是一款强大的HTTP代理/HTTP监视器/反向代理工具,广泛用于开发和测试网络应用程序。在爬虫开发中,Charles可以帮助开发者拦截、查看和修改HTTP/HTTPS请求和响应,从而更好地理解网络通信过程,分析和调试爬虫程序。本文将详细介绍Charles的安装、配置、基本使用方法以及…...

Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)

目录 1️⃣下载和安装Ollama 1. &#x1f947;官网下载安装包 2. &#x1f948;安装Ollama 3.&#x1f949;配置Ollama环境变量 4、&#x1f389;验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …...

Rk3568驱动开发_点亮led灯(手动挡)_5

1.MMU简介 完成虚拟空间到物理空间的映射 内存保护设立存储器的访问权限&#xff0c;设置虚拟存储空间的缓冲特性 stm32点灯可以直接操作寄存器&#xff0c;但是linux点灯不能直接访问寄存器&#xff0c;linux会使能mmu linux中操作的都是虚拟地址&#xff0c;要想访问物理地…...

【服务治理中间件】consul介绍和基本原理

目录 一、CAP定理 二、服务注册中心产品比较 三、Consul概述 3.1 什么是Consul 3.2 Consul架构 3.3 Consul的使用场景 3.4 Consul健康检查 四、部署consul集群 4.1 服务器部署规划 4.2 下载解压 4.3 启动consul 五、服务注册到consul 一、CAP定理 CAP定理&#xff…...

Docker下ARM64架构的源码编译Qt5.15.1,并移植到开发板上

Docker下ARM64架构的源码编译Qt5.15.1,并移植到开发板上 1、环境介绍 QT版本&#xff1a;5.15.1 待移植环境&#xff1a; jetson nano 系列开发板 aarch64架构&#xff08;arm64&#xff09; 编译环境&#xff1a; 虚拟机Ubuntu18.04&#xff08;x86_64&#xff09; 2、…...

对话Stack Overflow,OceanBase CTO 杨传辉谈分布式数据库的“前世今生”

近日&#xff0c; OceanBase CTO 杨传辉受邀出席全球知名开发者论坛 Stack Overflow 的最新一期播客节目&#xff0c;与 Stack Overflow 高级内容创作官 Ryan Donovan 展开对话。双方围绕分布式数据库的可靠性、一致性保障、HTAP 架构以及 AI 时代分布式数据库的发展趋势等热点…...

ds回答-开源llm应用开发平台

以下是几个著名的开源 LLM 应用开发平台&#xff0c;涵盖不同场景和技术特点&#xff1a; 1. Dify 特点&#xff1a;低代码 / 无代码开发、支持 RAG 检索、Agent 智能体、模型管理、LLMOps 全流程优化。核心功能&#xff1a;可视化工作流编排、数百种模型兼容&#xff08;如 GP…...

C++ Qt常见面试题(4):Qt事件过滤器

在 Qt 中,事件过滤器(Event Filter)提供了一种机制,可以拦截并处理对象的事件(如鼠标事件、键盘事件等),在事件到达目标对象之前对其进行预处理。事件过滤器通常用于以下场景: 捕获和处理特定的事件(如鼠标点击、按键等);对事件进行筛选或修改;实现全局的事件监听功…...

CF 109A.Lucky Sum of Digits(Java实现)

题目分析 给定一个值&#xff0c;判断这个值能否被4和7组成&#xff0c;如果能就输出最小的组合。不能就输出-1。 思路分析 由于是最小组合&#xff0c;即判断4能最多有多少个。但是如果一个值能完全被7整除&#xff0c;那就不需要4了&#xff0c;只用7组合的话位数会更短。(例…...

计算机毕业设计Python+DeepSeek-R1大模型游戏推荐系统 Steam游戏推荐系统 游戏可视化 游戏数据分析(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

生鲜行业智能化供应链解决方案技术白皮书

行业痛点与技术挑战 损耗控制难题 行业平均损耗率达18%-25%&#xff0c;需构建动态定价模型与智能分拣系统 冷链管理复杂度 全程温控数据采集点超过23个/车次&#xff0c;异常响应延迟需压缩至90秒内 供需预测偏差 传统模式预测准确率不足65%&#xff0c;亟需AI驱动需求预测体…...

《每天搞懂一道Hard》之数独终结者(LeetCode 37)

&#x1f4cc;《每天搞懂一道Hard》之数独终结者&#xff08;LeetCode 37&#xff09; &#x1f517;原题链接&#xff1a;https://leetcode.com/problems/sudoku-solver/ 今天我们来解剖一个经典回溯算法问题——数独求解器&#xff01;这道题在算法面试中出现频率高达35%&a…...

论文笔记-NeurIPS2017-DropoutNet

论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet&#xff1a;解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…...

【后端开发面试题】每日 3 题(四)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12903849.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享后端开发面试中常见的面试题给大家~ ❤️如果有收获的话&#x…...

使用AoT让.NetFramework4.7.2程序调用.Net8编写的库

1、创建.Net8的库&#xff0c;双击解决方案中的项目&#xff0c;修改如下&#xff0c;启用AoT&#xff1a; <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><OutputType>Library</OutputType><PublishAot>true</PublishAot>&…...

c++中的静态多态和动态多态简介

在 C 中&#xff0c;多态性&#xff08;Polymorphism&#xff09; 分为 静态多态&#xff08;Static Polymorphism&#xff09; 和 动态多态&#xff08;Dynamic Polymorphism&#xff09;&#xff0c;二者通过不同的机制实现代码的灵活性。以下是详细对比和核心要点&#xff1…...

FastExcel与Reactor响应式编程深度集成技术解析

一、技术融合背景与核心价值 在2025年企业级应用开发中&#xff0c;大规模异步Excel处理与响应式系统架构的结合已成为技术刚需。FastExcel与Reactor的整合方案&#xff0c;通过以下技术协同实现突破性性能&#xff1a; 内存效率革命&#xff1a;FastExcel的流式字节操作与Re…...

【MySQL篇】数据类型

目录 前言&#xff1a; 1&#xff0c;数据类型的分类 ​编辑 2 &#xff0c;数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float类型 2.3.2 decimal类型 3&#xff0c;字符串类型 3.1 char 3.2 varchar 3.3 char与varchar的比较 3.4日期和时间类型 3.5 …...

haclon固定相机位标定

什么是标定&#xff1f; 工业应用中相机拍到一个mark点的坐标为C1&#xff08;Cx,Cy&#xff09;&#xff0c;C1点对应的龙门架/机械手等执行端对应的坐标是多少&#xff1f; 标定就是解决这个问题&#xff0c;如相机拍到一个点坐标C1&#xff08;Cx,Cy&#xff09;&#xff0c…...

Token相关设计

文章目录 1. 双Token 机制概述1.1 访问令牌&#xff08;Access Token&#xff09;1.2 刷新令牌&#xff08;Refresh Token&#xff09; 2. 双Token 认证流程3. Spring Boot 具体实现3.1 生成 Token&#xff08;使用 JWT&#xff09;3.2 解析 Token3.3 登录接口&#xff08;返回…...

vue3:四嵌套路由的实现

一、前言 1、嵌套路由的含义 嵌套路由的核心思想是&#xff1a;在某个路由的组件内部&#xff0c;可以定义子路由&#xff0c;这些子路由会渲染在父路由组件的特定位置&#xff08;通常是 <router-view> 标签所在的位置&#xff09;。通过嵌套路由&#xff0c;你可以实…...

在 Element Plus 的 <el-select> 组件中,如果需要将 <el-option> 的默认值设置为 null。 用于枚举传值

文章目录 引言轻松实现 `<el-option>` 的默认值为 `null`I 实现方式监听清空事件 【推荐】使用 v-model 绑定 null添加一个值为 null 的选项处理 null 值的显示引言 背景:接口签名规则要求空串参与,空对象不参与签名计算 // 空字符串“” 参与签名组串,null不参与签…...

List(3)

前言 上一节我们讲解了list主要接口的模拟实现&#xff0c;本节也是list的最后一节&#xff0c;我们会对list的模拟实现进行收尾&#xff0c;并且讲解list中的迭代器失效的情况&#xff0c;那么废话不多说&#xff0c;我们正式进入今天的学习 list的迭代器失效 之前在讲解vec…...

算法-二叉树篇23-二叉搜索树中的插入操作

二叉搜索树中的插入操作 力扣题目链接 题目描述 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同…...

React底层常见的设计模式

在React中&#xff0c;常见的设计模式为开发者提供了结构化和可重用的解决方案&#xff0c;有助于提高代码的可维护性和可扩展性。以下是对React中几种常见设计模式的详细解析&#xff0c;并附上示例代码和注释&#xff1a; 1. 容器组件与展示组件模式&#xff08;Container/P…...

【PHP脚本语言详解】为什么直接访问PHP文件会显示空白?从错误示例到正确执行!

前言 作为一名开发者&#xff0c;你是否曾经遇到过这样的问题&#xff1a;写了一个PHP脚本&#xff0c;放到服务器根目录后&#xff0c;直接通过file:///路径访问却显示空白页面&#xff1f;而换成http://localhost却能正常显示&#xff1f;这篇文章将带你深入理解PHP脚本语言…...

小程序性能优化-预加载

在微信小程序中&#xff0c;数据预加载是提升用户体验的重要优化手段。以下是处理数据预加载的完整方案&#xff1a; 一、预加载的适用场景 跳转页面前的数据准备 如从列表页进入详情页前&#xff0c;提前加载详情数据首屏加载后的空闲时间 在首页加载完成后&#xff0c;预加载…...

Docker 数据卷管理及优化

Docker 数据卷是一个可供容器使用的特殊目录&#xff0c;它绕过了容器的文件系统&#xff0c;直接将数据存储在宿主机上。通过数据卷&#xff0c;可以实现数据的持久化、共享以及独立于容器生命周期的管理。 1.1 为什么要用数据卷 Docker 分层文件系统的特点 性能差&#xff…...

MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享

一、背景 在文档搜索场景中&#xff0c;高效精准的搜索功能至关重要&#xff0c;能提升检索效率&#xff0c;为用户提供精准、快速的信息获取体验&#xff0c;提高工作效率。在文档管理系统里&#xff0c;全文搜索是非常重要的功能之一。随着文档数量增长&#xff0c;如何快速…...

C#内置委托(Action)(Func)

概述 在 C# 中&#xff0c;委托是一种类型&#xff0c;它表示对具有特定参数列表和返回类型的方法的引用。C# 提供了一些内置委托&#xff0c;使得开发者可以更方便地使用委托功能&#xff0c;无需手动定义委托类型。本文将详细介绍 Action 和 Func 这两个常用的内置委托。 A…...

OpenCV计算摄影学(3)CUDA 图像去噪函数fastNlMeansDenoising()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用非局部均值去噪算法&#xff08;Non-local Means Denoising algorithm&#xff09;执行图像去噪&#xff0c;该算法来源于 http://www.ipol.…...

Kafka生产者相关

windows中kafka集群部署示例-CSDN博客 先启动集群或者单机也OK 引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.9.0</version></dependency>关于主题创建 理论…...

【容器化】低版本docker拉取ubuntn 22.04镜像启动容器执行apt update提示 NO_PUBKEY 871920D1991BC93C

前置信息 宿主机信息 [root@localhost ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR…...

如何流畅访问github

1.传输数据原理 本地计算机通过本地网接入运营骨干网&#xff0c;经过DNS域名解析&#xff0c;将输入的字符解析为要连接的真实IP地址&#xff0c;服务器返还一个数据包(github)给计算机 2.原因 DNS域名污染-DNS解析出现问题&#xff0c;导致访问一个不存在的服务器 3.解决…...

vue3:三项目增加404页面

一、路由添加 1、官网地址 带参数的动态路由匹配 | Vue Routerhttps://router.vuejs.org/zh/guide/essentials/dynamic-matching.html 2、复制核心语句 { path: /:pathMatch(.*)*, name: NotFound, component: NotFound } 3、粘贴到路由index.js中 4、建立页面 在view文件夹…...

纯c#字体处理库(FontParser) -- 轻量、极速、跨平台、具有字体子集化功能

关于字体库与 FontParser 的开发历程   字体库是用于处理和渲染字体的软件工具&#xff0c;其功能通常涵盖字体文件的加载、解析、字形渲染和文本布局等核心模块。在众多字体库中&#xff0c;FreeType 是被广泛应用且极具影响力的开源项目&#xff0c;已成为事实上的行业标准…...

云和恩墨亮相PolarDB开发者大会,与阿里云深化数据库服务合作

2025年2月26日&#xff0c;备受瞩目的阿里云PolarDB开发者大会于北京嘉瑞文化中心盛大举行&#xff0c;众多行业精英齐聚一堂&#xff0c;共襄技术盛会。云和恩墨作为阿里云重要的生态合作伙伴受邀参会。云和恩墨联合创始人兼技术研究院总经理杨廷琨与阿里云智能数据库产品事业…...

【通俗讲解电子电路】——从零开始理解生活中的电路(二)

电路分析&#xff1a;看懂简单的“电路图” ——从“路线图”到“工具箱”&#xff0c;掌握电路的底层逻辑 1. 欧姆定律&#xff1a;电的“交通规则” 公式解析&#xff1a;V I R 电压&#xff08;V&#xff09;&#xff1a;推动电流的动力&#xff08;如电池电压&#xff…...

Spring DIIoC

一.IoC 1.简介 什么是IoC&#xff1f;IoC&#xff0c;全称 Inversion of Control&#xff0c;控制反转。IoC是Spring的核心思想&#xff0c;Spring是⼀个“控制反转”的容器。 如果我们需要一个对象&#xff0c;正常来说我们是通过new一个对象&#xff0c;这个时候我们依赖的…...

基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

C++22——哈希

目录 1.unordered_map的文档介绍 2.unordered_set的文档介绍 3.底层结构 3.1哈希的概念 3.2哈希冲突 3.3哈希函数 3.4哈希冲突解决 3.4.1闭散列 3.4.2开散列 1.unordered_map的文档介绍 unordered_map在线文档说明 unordered_map是存储<key&#xff0c;value>键值…...

使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成

使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成 在现代企业级应用开发中&#xff0c;处理多个数据源是一个常见的需求。本文将详细介绍如何使用Spring Boot结合达梦数据库&#xff08;DM&#xff09;&#xff0c;并通过MyBatis Plus来简化数据库操作&…...

Servlet简介

Servlet是sun公司提供的一门用于开发动态web资源的技术。 Sun公司在其API中提供了一个servlet接口&#xff0c;用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据)&#xff0c;需要完成以下2个步骤&#xff1a; 编写一个Java类&#xff0c;实现servlet接口。 …...

智能合约安全 | 合约无效化攻击

目录&#xff1a; 智能合约安全 合约无效化攻击 合约自毁函数 selfdestruct 攻击实现 漏洞防御 总结 智能合约安全 合约无效化攻击 合约无效化攻击类同于web安全中的逻辑漏洞中的一种 我们这里拿一个典型的例子来讲解 有这样一份智能合约, 每个人可以向其中发送1 eth 第七个…...

20250226-代码笔记05-class CVRP_Decoder

文章目录 前言一、class CVRP_Decoder(nn.Module):__init__(self, **model_params)函数功能函数代码 二、class CVRP_Decoder(nn.Module):set_kv(self, encoded_nodes)函数功能函数代码 三、class CVRP_Decoder(nn.Module):set_q1(self, encoded_q1)函数功能函数代码 四、class…...