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

高德地图API + three.js + Vue3基础使用与使用 + 标记不显示避坑

three.js小白的学习之路。

最近闲来无事,突然想起来之前好像项目有需求说是要将模型放在地图上。加上在浏览别的大佬写的博客时,也找到了一些大佬写的相关文章。基本上都是使用的高德地图开放平台的JS API。我也随之开启了自己的学习之路。

先简单学习了一些在高德地图上加入点标记、图层叠加、样式修改的API,不得不佩服人家确实厉害,操作简单,灵活度高,而且API从1.x升级到2.0之后,对性能优化的非常明显。

但是单纯的学习过程有些枯燥,就简单浏览了一遍,等用到的时候再来翻一遍。

然后目标直指自定义图层中的与three.js相结合的API的使用。

基础搭建

首先我使用的是Vite+Vue3+TS的框架,于是我安装了这几个插件:

yarn add @amap/amap-jsapi-loader
yarn add @amap/amap-jsapi-types

前一个是适用于Vue的插件形式,就和我们平常使用第三方包一样。但是这个第三方包没有提供任何有关type的信息,导致编程过程中没有提示。于是就安装了第二个插件,但是啊但是,这个插件包含的也只有一部分类型信息,很多与three.js相关的类型信息是没有的,难受。

接下来新建一个vue文件,构建基础框架:

<template><div id="container"></div>
</template><script lang="ts" setup>
import AMapLoader from "@amap/amap-jsapi-loader";
import "@amap/amap-jsapi-types";onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "安全密钥",};AMapLoader.load({key: "申请的key值", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15}).then(() => {map = new AMap.Map("container", {center: [116.54, 39.79],zooms: [2, 20],zoom: 14,viewMode: "3D",pitch: 50, // 俯仰角度,默认0,范围0-83,0相当于正交视图});}).catch((e) => {console.log(e);});});
</script><style scoped>
#container {width: 100vw;height: 100vh;
}
</style>

key和安全密钥需要自己去官网申请,跟着官网步骤走即可。

container是容器,和three.js类似。

AMapLoader是核心,在then的回调中,假如你是用的是js,没有引用@amap/amap-jsapi-types,那么then的回调函数里面将返回一个AMap参数供你使用。

AMapLoader.load().then((AMap) => {// …………
})

其实打开插件也可以看到,AMap是一个命名空间,将所有的API都放在了这个命名空间里面。

这样,打开网页就可以看到如下的画面了:

与three.js结合

高德地图官方提供了专门与three.js结合使用的API,是一个单独的自定义层级结构,GLCustomLayer类。

1.构造函数

const glLayer = new AMap.GLCustomLayer(opts: GlCustomLayerOptions)

2.参数opts

属性描述
opts.init 类型:Function初始化的时候,开发者可以在这个函数参数里面获取 gl 上下文,进行一些初始化的操作。
opts.render 类型:Function绘制函数,初始化完成时候,开发者需要给该图层设定render方法, 该方法需要实现图层的绘制,API会在合适的时机自动调用该方法
opts.zooms 类型:[Number, Number] default [2,20]图层缩放等级范围,默认 [2, 20]
opts.opacity 类型:Number default 1图层透明度,默认为 1
opts.visible 类型:Boolean default true图层是否可见,默认为 true
opts.zIndex 类型:Number default 120图层的层级,默认为 120

3.成员函数

getMap():返回GLCustomLayer所属地图的实例;返回值:Map| null

getzIndex():获取GLCustomLayer叠加顺序;返回值:number

setzIndex(index):设置GLCustomLayer叠加顺序;参数:number,叠加值;返回值:void

getOpacity():获取GLCustomLayer透明度;返回值:number

setOpacity(opacity):设置GLCustomLayer透明度;参数:number,透明度;返回值:void

getZooms():获取GLCustomLayer显示层级范围;返回值:number

setZooms(zooms):设置GLCustomLayer显示层级范围;参数:Vector,默认[3, 20];返回值:number

show():显示GLCustomLayer;返回值:void

hide():隐藏GLCustomLayer;返回值:void

示例代码

<template><div id="container"></div>
</template><script lang="ts" setup>
import * as Three from "three";
import AMapLoader from "@amap/amap-jsapi-loader";
import "@amap/amap-jsapi-types";let map: AMap.Map;
let camera: Three.PerspectiveCamera,scene: Three.Scene,renderer: Three.WebGLRenderer;
const meshArr: Three.Mesh[] = [];let customCoords;
let data;const init = (gl: any) => {// 这里我们的地图模式是 3D,所以创建一个透视相机,相机的参数初始化可以随意设置,因为在 render 函数中,每一帧都需要同步相机参数,因此这里变得不那么重要。// 如果你需要 2D 地图(viewMode: '2D'),那么你需要创建一个正交相机camera = new Three.PerspectiveCamera(60,window.innerWidth / window.innerHeight,10,1000000);renderer = new Three.WebGLRenderer({context: gl, // 传递canvas的gl上下文});// 自动清空画布这里必须设置为 false,否则地图底图将无法显示renderer.autoClear = false;scene = new Three.Scene();{// 环境光照和平行光const aLight = new Three.AmbientLight(0xffffff, 0.3);const dLight = new Three.DirectionalLight(0xffffff, 1);dLight.position.set(1000, -100, 900);scene.add(dLight);scene.add(aLight);}const texture = new Three.TextureLoader().load("https://a.amap.com/jsapi_demos/static/demo-center-v2/three.jpeg");texture.minFilter = Three.LinearFilter;const mat = new Three.MeshPhongMaterial({color: 0xfff0f0,depthTest: true,transparent: true,map: texture,});const geo = new Three.BoxGeometry(500, 500, 500);for (let i = 0; i < data.length; i++) {const pos = data[i];const mesh = new Three.Mesh(geo, mat);mesh.position.set(pos[0], pos[1], 500);meshArr.push(mesh);scene.add(mesh);}
};const render = () => {// 这里必须执行!!重新设置 three 的 gl 上下文状态。renderer.resetState();// 重新设置图层的渲染中心点,将模型等物体的渲染中心点重置, 否则和 LOCA 可视化等多个图层能力使用的时候会出现物体位置偏移的问题customCoords.setCenter([116.52, 39.79]);const { near, far, fov, up, lookAt, position } =customCoords.getCameraParams();// 这里的顺序不能颠倒,否则可能会出现绘制卡顿的效果。camera.near = near;camera.far = far;camera.fov = fov;camera.position.set(...position);camera.up.set(...up);camera.lookAt(...lookAt);camera.updateProjectionMatrix();renderer.render(scene, camera);// 这里必须执行!!重新设置 three 的 gl 上下文状态。renderer.resetState();
};onMounted(() => {window._AMapSecurityConfig = {securityJsCode: "你的安全密钥",};AMapLoader.load({key: "你的key", // 申请好的Web端开发者Key,首次调用 load 时必填version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15}).then(() => {map = new AMap.Map("container", {center: [116.54, 39.79],zooms: [2, 20],zoom: 14,viewMode: "3D",pitch: 50, // 俯仰角度,默认0,范围0-83,0相当于正交视图});// 数据转换工具customCoords = map.customCoords;// 数据使用转换工具进行转换,这个操作必须要提前执行(在获取镜头参数 函数之前执行),否则将会获得一个错误信息。data = customCoords.lngLatsToCoords([[116.52, 39.79],[116.54, 39.79],[116.56, 39.79],]);// 创建GL图层const glLayer = new AMap.GLCustomLayer({zIndex: 10,init,render,});map.add(glLayer);}).catch((e) => {console.log(e);});
});
</script><style scoped>
#container {width: 100vw;height: 100vh;
}
</style>

运行结果:

三个Box已经跃然纸上。

AMap.Map.customCoords

这里在多一嘴,说一下用到的一个方法,AMap.Map.customCoords

我在jsap-types的插件里面是没有找到这个的。其实这个是高德地图 JS API 2.0 中的一个工具,用于在 3D 地图场景下进行坐标转换。它主要用于将经纬度坐标转换为 3D 场景中的世界坐标,以便在 Three.js 等 3D 渲染引擎中使用。

说白了即使将地图坐标转换成three.js中的世界坐标的。

这里面提供了几个方法:

  • 坐标转换:通过 customCoords.lngLatsToCoords() 方法,可以将经纬度数组转换为 3D 场景中的坐标数组

  • 设置中心点customCoords.setCenter() 方法设置 3D 场景的中心点,用于确定 3D 模型的参考原点(世界坐标原点),通常在每次的render函数调用中执行一遍。

  • 获取相机参数customCoords.getCameraParams() 方法可以获取当前地图视角的相机参数(如视野范围、近平面、远平面等),这些参数可以用于同步 Three.js 的相机状态

避坑

1.加载失败,报错WebGL 1 is not supported since r163。

这个意思很明显,就是three.js的r163版本之后,不在支持WebGL 1了。此时再仔细看了一眼官网,发现其用的是r142版本,和官网严格对其,即可解决。

2.TS提示AMap.GLCustomLayer不存在

运行没问题,写代码时提示不存在,于是我去翻了翻types插件,发现其实是有的,只不过没有导出而已,自己手动更改一下就能解决

   =====>>>>  

但是,上面提到的AMap.Map.customCoords,我是真的没有找到,可能没有这types插件里面定义,因为官网也说了,只是定义了大部分,这个估计是个漏网之鱼。

3.中心点设置

在代码中可以看到,map的center设置的是三个Box中第二个的位置,此时添加一个AxesHelper,可以看到世界坐标的原点其实是第一个Box的位置。

因此地图的中心点与glLayer图层内3D模型世界坐标的中心点并不是一回事,是分开来单独设置的。three.js 的中心点就是通过customCoords.setCenter()设置的。

4.标记点不显示的问题

这里面并没有添加标记点,我是在一开始学的时候遇到了,这里一并记录。

我按照官网的教程,添加了一个标记点:

  const marker = new AMap.Marker({position: new AMap.LngLat(116.39, 39.9),title: "北京",offset: new AMap.Pixel(-10, -10),icon: "//vdata.amap.com/icons/b18/1/2.png", // 添加 icon 图标 URL});map.add(marker);

结果:

标记点理应是一个红星放在地图上,结果却没有显示。我查看了一下DOM结构,发现最外的盒子大小是0:

于是我修改了一下css:

// 保证marker能正常显示
:deep(.amap-markers) {width: 100%;height: 100%;
}

好了:

但是这样显然有点不合理,这么大一个工程怎么可能会有这种错误。我又向上翻了一翻,结果发现了一个关键的css,那就是overflow:hidden。

因为我这个工程是用来写three.js的,而默认情况下,three.js老爱出现滚动条,于是我在App.vue的根节点添加了overflow:hidden,所以导致后续的子节点全部自动继承,只需要将其注释掉,那么不添加上述的css字段也是ok的。

// APP.vue
// overflow: hidden;
// overflow-x: hidden;// index.vue
// // 保证marker能正常显示
// :deep(.amap-markers) {
//   width: 100%;
//   height: 100%;
// }

 这个纯属是我个人问题导致,记录一下自己的愚蠢。

相关文章:

高德地图API + three.js + Vue3基础使用与使用 + 标记不显示避坑

three.js小白的学习之路。 最近闲来无事&#xff0c;突然想起来之前好像项目有需求说是要将模型放在地图上。加上在浏览别的大佬写的博客时&#xff0c;也找到了一些大佬写的相关文章。基本上都是使用的高德地图开放平台的JS API。我也随之开启了自己的学习之路。 先简单学习…...

书籍推荐:《价值心法》一姜胡说

书名 &#xff1a;《价值心法》一姜胡说 摘录 每天问问自己&#xff0c;如果今天只做一件事&#xff0c;这件事是什么&#xff1f;找到它。拿出2—3个小时&#xff0c;专门处理这件事。其他所有事全部排在那2—3个小时之外。 集中一段时间用来做最重要的事。这段时…...

Linux GPIO驱动开发实战:Poll与异步通知双机制详解

1. 引言 在嵌入式Linux开发中&#xff0c;GPIO按键驱动是最基础也最典型的案例之一。本文将基于一个支持poll和异步通知双机制的GPIO驱动框架&#xff0c;深入剖析以下核心内容&#xff1a; GPIO中断与防抖处理环形缓冲区设计Poll机制实现异步通知(SIGIO)实现应用层交互方式 …...

x-cmd install | brows - 终端里的 GitHub Releases 浏览器,告别繁琐下载!

目录 核心功能与优势安装适用场景 还在为寻找 GitHub 项目的特定 Release 版本而苦恼吗&#xff1f;还在网页上翻来覆去地查找下载链接吗&#xff1f;现在&#xff0c;有了 brows&#xff0c;一切都将变得简单高效&#xff01; brows 是一款专为终端设计的 GitHub Releases 浏览…...

一天学完Servlet!!!(万字总结)

文章目录 前言Servlet打印Hello ServletServlet生命周期 HttpServletRequest对象常用api方法请求乱码问题请求转发request域对象 HttpServletResponse对象响应数据响应乱码问题请求重定向请求转发与重定向区别 Cookie对象Cookie的创建与获取Cookie设置到期时间Cookie注意点Cook…...

c#-命名和书写规范

文章目录 1. 接口名称以大写 I 开头2. 属性类型以单词 Attribute 结尾3. 枚举类型对非标记使用单数名词,对标记使用复数名词4. 标识符不应包含两个连续下划线(__)字符5. 对变量、方法和类使用有意义的描述性名称6. 将 PascalCase 用于类名和方法名称7. 对方法参数和局部变量…...

【双指针】和为s的两个数字

57. 和为target的两个数字 剑指 Offer 57. 和为s的两个数字 ​ 输入一个递增排序的数组和一个数字target&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是target。如果有多对数字的和等于target&#xff0c;则输出任意一对即可。 示例 1&#xff1a; 输入&…...

【Vue】TypeScript与Vue3集成

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Vue 文章目录 1. 前言2. 环境准备与基础搭建2.1. 安装 Node.js 与 npm/yarn/pnpm2.2. 创建 Vue3 TypeScript 项目2.2.1. 使用 Vue CLI2.2.2. 使用 Vite&#xff08;推荐&#xff09;2.2.3. 目录结构简述 3. Vue3 TS 基础语法整…...

win11中wsl在自定义位置安装ubuntu20.04 + ROS Noetic

wsl的安装 环境自定义位置安装指定ubuntu版本VsCodeROS备份与重载备份重新导入 常用命令参考文章 环境 搜索 启用或关闭 Windows 功能 勾选这2个功能&#xff0c;然后重启 自定义位置安装指定ubuntu版本 从网上找到你所需要的相关wsl ubuntu版本的安装包&#xff0c;一般直…...

【数据可视化-29】食物营养成分数据可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

手动实现legend 与 echarts图交互 通过js事件实现图标某项的高亮 显示与隐藏

通过html实现legend的样式 提供调用echarts的api实现与echarts图表交互的效果 实现饼图element实现类似于legend与echartstu表交互效果 效果图 配置代码 <template><div style"height: 400px; width: 500px;background-color: #CCC;"><v-chart:opti…...

C语言编程--16.删除链表的倒数第n个节点

题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a…...

centos7使用certbot完成nginx ssl证书续期

没有废话纯干货 yum源配置&#xff08;配置好的可以跳过&#xff09; #到/etc/yum.repos.d/下mkdir bak&#xff0c;将所用东西mv到bak下 cd /etc/yum.repos.d/ mkdir bak mv ./* bak/ wget https://mirrors.aliyun.com/repo/Centos-7.repo 没有安装nginx的话&#xff0c;配…...

ECharts学习之 toolbox 工具栏

toolbox: {show: true,feature: {//数据视图工具&#xff0c;可以展现当前图表所用的数据dataView: {title: "数据视图",readOnly: false, //是否不可编辑&#xff0c;即只读lang:[数据视图,关闭,刷新] //数据视图上有三个话术},magicType: {type: ["line"…...

修改el-select背景颜色

修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式&#xff08;推荐&#xff09; */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…...

Qt 使用 MySQL 数据库的基本方法

在 Qt 中&#xff0c;使用 MySQL 数据库的基本方法主要是通过 QSqlDatabase、QSqlQuery 等类来进行数据库的连接、查询和数据操作。以下是 Qt 中连接和操作 MySQL 数据库的基本步骤。 1. 安装 MySQL 驱动 首先&#xff0c;确保您的 Qt 环境已经配置了 MySQL 驱动。通常&#…...

BLIP 系列论文(BLIP、BLIP-2、InstructBLIP)

BLIP BLIP 是 Salesforce 团队在多模态领域中的经典工作&#xff0c;影响力巨大&#xff0c;BLIP 系列包括&#xff1a;BLIP、BLIP-2、InstructBLIP。 BLIP 在多模态大模型之前&#xff0c;多模态领域中最流行的是视觉-语言预训练&#xff08;Vision-Language Pre-training,…...

【玩转全栈】—— 无敌前端究极动态组件库--Inspira UI

目录 Inspira UI 介绍 配置环境 使用示例 效果&#xff1a; Inspira UI 学习视频&#xff1a; 华丽优雅 | Inspira UI快速上手_哔哩哔哩_bilibili 官网&#xff1a;https://inspira-ui.com/ Inspira UI 介绍 Inspira UI 是一个设计精美、功能丰富的用户界面库&#xff0c;专为…...

Java24新增特性

Java 24&#xff08;Oracle JDK 24&#xff09;作为Java生态的重要更新&#xff0c;聚焦AI开发支持、后量子安全、性能优化及开发者效率提升&#xff0c;带来20余项新特性和数千项改进。以下是核心特性的分类解析&#xff1a; 一、语言特性增强&#xff1a;简化代码与模式匹配 …...

Git多人协作与企业级开发模型

目录 1.多人协作一 2.多人协作二 3.远程分⽀删除后&#xff0c;本地gitbranch-a依然能看到的解决办法 4.企业级开发模型 4.1.Git的重要性 4.2.系统开发环境 4.3.Git 分⽀设计规范 1.多人协作一 ⽬前&#xff0c;我们所完成的⼯作如下&#xff1a; 基本完成Git的所有本…...

Android学习总结之扩展基础篇(一)

一、IdleHandler工作原理 1. IdleHandler 接口定义 IdleHandler 是 MessageQueue 类中的一个接口&#xff0c;定义如下&#xff1a; public static interface IdleHandler {/*** 当消息队列空闲时会调用此方法。* return 如果返回 true&#xff0c;则该 IdleHandler 会保留在…...

C语言教程(十六): C 语言字符串详解

一、字符串的表示 在C语言中&#xff0c;字符串是由一系列字符组成&#xff0c;并且以空字符 \0 作为结束标志。字符串通常用字符数组来表示。例如&#xff1a; char str[] {H, e, l, l, o, \0};也可以使用字符串字面量来初始化字符数组&#xff1a;char str[] "Hello&…...

Redis LFU 策略参数配置指南

一、基础配置步骤‌ 设置内存上限‌ 在 redis.conf 配置文件中添加以下指令&#xff0c;限制 Redis 最大内存使用量&#xff08;例如设置为 4GB&#xff09;&#xff1a; maxmemory 4gb选择 LFU 淘汰策略‌ 根据键的作用域选择策略&#xff1a; # 所有键参与淘汰 maxmemory-…...

Pikachu靶场-unsafe upfileupload

不安全的文件上传漏洞防御与对抗方式对照表 防御方式 防御实现 攻击者对抗方式 对抗原理 文件类型白名单验证 仅允许指定扩展名&#xff08;如 .jpg, .png&#xff09; if (!in_array($ext, [jpg, png])) { die(); } 伪造文件类型&#xff1a; 1. 修改文件头&#xff08;…...

Python基础语法:查看数据的类型type(),数据类型转换,可变和不可变类型

目录 查看数据类型type() 使用type()语句查看数据的类型 变量无类型而数据有类型 数据类型转换 在字符串&#xff0c;整型&#xff0c;浮点数之间相互转换 可变类型和不可变类型 查看数据类型type() 使用type()语句查看数据的类型 Python中使用type(被查看数据的类型)语…...

高防IP是如何防护DDoS攻击和CC攻击的

高防IP是一种针对网络攻击&#xff08;如DDoS和CC攻击&#xff09;设计的防护服务&#xff0c;其核心原理是通过流量调度、智能清洗和分布式防护节点等技术&#xff0c;将恶意流量拦截在目标服务器之外。以下是其防护DDoS和CC攻击的具体机制&#xff1a; 一、防御DDoS攻击的机制…...

从认证到透传:用 Nginx 为 EasySearch 构建一体化认证网关

在构建本地或云端搜索引擎系统时&#xff0c;EasySearch 凭借其轻量、高性能、易部署等优势&#xff0c;逐渐成为众多开发者和技术爱好者的首选。但在实际部署过程中&#xff0c;如何借助 Nginx 为 EasySearch 提供高效、稳定且安全的访问入口&#xff0c;尤其是在身份认证方面…...

利用deepseek快速生成甘特图

一、什么是甘特图 甘特图&#xff08;Gantt Chart&#xff09;是一种直观的项目管理工具&#xff0c;广泛应用于多个领域&#xff0c;主要用于​​时间规划、任务分配和进度跟踪​​。 直观性​​&#xff1a;时间轴清晰展示任务重叠或延迟。 ​​灵活性​​&#xff1a;支持…...

突破厚铜PCB阻抗控制难题:多级阻抗实现方法

随着电子技术的发展&#xff0c;电子设备对电路板的性能要求越来越高。其中&#xff0c;阻抗控制是电路板设计中的一个重要环节&#xff0c;尤其是对于高频、高速的电子设备。厚铜电路板由于其优良的导电性能和机械强度&#xff0c;被广泛应用于各种高端电子设备中。然而&#…...

JCP官方定义的Java技术体系组成部分详解

JCP官方定义的Java技术体系组成部分详解 1. Java平台规范&#xff08;Java Platform Specifications&#xff09; 定义&#xff1a;由JCP制定的Java平台核心规范&#xff0c;包括Java SE&#xff08;标准版&#xff09;、Java EE&#xff08;企业版&#xff0c;现为Jakarta EE…...

如何在 Windows上安装 Python 3.6.5?

Windows 系统安装步骤 下载安装包 安装包下载链接&#xff1a;https://pan.quark.cn/s/9294ca0fd46a 运行安装程序 双击下载的 .exe 文件&#xff08;如 python-3.6.5.exe&#xff09;。 勾选 Add Python 3.6 to PATH&#xff08;重要&#xff01;这将自动配置环境变量&…...

OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)

hdc&#xff08;OpenHarmony Device Connector&#xff09;是为开发人员提供的用于设备连接调试的命令行工具&#xff0c;该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备&#xff08;或模拟器&#xff09;进行连接调试通信。简单来讲&#xff0c;hdc 是 Op…...

【C语言】C语言动态内存管理

前言 在C语言编程中&#xff0c;内存管理一直是程序员需要重点关注的领域。动态内存管理更是如此&#xff0c;它不仅涉及到内存的灵活分配和释放&#xff0c;还隐藏着许多潜在的陷阱。本文将从动态内存分配的基础讲起&#xff0c;逐步深入到常见的错误、经典笔试题分析&#x…...

Java 运算符:深度解析

前言 作为Java开发者&#xff0c;运算符是我们每天都会接触的基础元素。然而&#xff0c;很多开发者对运算符的理解仅停留在表面层次。本文将全面深入地剖析Java中的各类运算符&#xff0c;揭示其底层原理、使用技巧和最佳实践&#xff0c;帮助您成为真正的Java运算符专家。 …...

健康养生小窍门

健康养生是我们对美好生活的追求&#xff0c;掌握一些实用的小窍门&#xff0c;能让我们轻松拥抱健康。 在生活起居方面&#xff0c;要注重环境的营造。卧室的窗帘选择遮光性好的材质&#xff0c;保证睡眠时的黑暗环境&#xff0c;有助于提高睡眠质量。在室内放置一些绿植&…...

4月24号

网络编程: //IP的对象一台电脑的对象 InetAddress address InetAddress.getByName("DESKTOP-5OJJSAM"); System.out.println(address); String name address.getHostName(); System.out.println(name);//DESKTOP-5OJJSAM String ip address.getHostAddress(); Sys…...

【RocketMq源码篇-01】环境搭建、基本使用、可视化界面

RocketMq源码核心篇整体栏目 内容链接地址【一】环境搭建、基本使用、可视化界面https://zhenghuisheng.blog.csdn.net/article/details/147481401 环境搭建、基本使用、可视化界面 一&#xff0c;RocketMq源码分析1. docker安装rocketMq2. rocketMq基本使用2.1&#xff0c;创建…...

Mysql的深度分页查询优化

一、深度分页为什么慢&#xff1f; 当执行 SELECT * FROM orders ORDER BY id LIMIT 1000000, 10 时&#xff1a; MySQL 会扫描前 1,000,010 行&#xff0c;丢弃前 100 万行&#xff0c;仅返回 10 行。偏移量&#xff08;offset&#xff09;越大&#xff0c;扫描行数越多&…...

OpenCv高阶(十一)——物体跟踪

文章目录 前言一、OpenCV 中的物体跟踪算法1、均值漂移&#xff08;Mean Shift&#xff09;&#xff1a;2、CamShift&#xff1a;3、KCF&#xff08;Kernelized Correlation Filters&#xff09;&#xff1a;4、MIL&#xff08;Multiple Instance Learning&#xff09;&#xf…...

第一章:Model Context Protocol (MCP)

Chapter 1: Model Context Protocol (MCP) &#x1f31f; 为什么需要MCP&#xff1f; 想象你正在训练一只小狗&#xff0c;希望它能听懂你的指令并执行任务。但如果你和小狗用不同语言交流&#xff0c;它可能完全不知道你的意思。类似地&#xff0c;大型语言模型&#xff08;L…...

【SAP PP】COOIS报表分析

本文目录 一、基本查询操作 二、订单参数文件 三、COOIS报表增强BADI COOIS报表是PP模块核心报表&#xff0c;是系统中一个功能强大的标准报表&#xff0c;COOIS可查询查询生产订单的状态、进度、组件、工序、报工等信息的综合型报表&#xff0c;&#xff0c;关联了生产订单…...

2025上海车展|紫光展锐发布新一代旗舰级智能座舱芯片平台A888

4月24日&#xff0c;在第二十一届上海国际汽车工业展览会&#xff08;以下简称“上海车展”&#xff09;期间&#xff0c;紫光展锐重磅推出新一代旗舰级智能座舱芯片平台A8880&#xff0c;以强劲实力全面助力汽车座舱智能化迈向新征程。 三大核心能力&#xff0c;紧抓市场机遇 …...

蓝牙4.0与蓝牙5.0的区别

蓝牙4.0与蓝牙5.0的主要区别&#xff1a; 传输速度&#xff1a;蓝牙5.0的传输速度是蓝牙4.0的两倍&#xff0c;理论速率可达2Mbps&#xff0c;而蓝牙4.0为1Mbps。 传输距离&#xff1a;蓝牙5.0的传输距离是蓝牙4.0的四倍&#xff0c;在开放空间可达300米&#xff0c;而蓝牙4.0…...

Vue 的单文件组件(.vue 文件)script 标签的使用说明

在 Vue 的单文件组件&#xff08;.vue 文件&#xff09;中&#xff0c;最多可以编写 2 个 <script> 标签&#xff0c;但需要满足特定条件&#xff1a; 1. Vue 3 的情况&#xff08;主流用法&#xff09; 从 Vue 3.2 开始&#xff0c;官方支持以下两种形式共存&#xff1…...

TIM输入捕获知识部分

越往左&#xff0c;频率越高&#xff1b;越往右&#xff0c;频率越低。【越紧凑&#xff0c;相同时间&#xff0c;次数越多】 计算频率的方法&#xff1a;测评法、测周法、中界频率。 频率的定义&#xff1a;1s内出现了多少个重复的周期 测评法就是从频率的定义出发的&#…...

【数据可视化-30】Netflix电影和电视节目数据集可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

多线程事务?拿捏!

场景:有一批1万或者10万数据&#xff0c;插入数据库&#xff0c;怎么做 事务中进行批量提交 publList<List<OrderPo>> partition Lists.partition(list, 450);StopWatch stopWatch new StopWatch();stopWatch.start();// 顺序插入for (List<OrderPo> sub…...

Spring Boot 自动配置深度解析:从源码结构到设计哲学

Spring Boot 自动配置深度解析&#xff1a;从源码结构到设计哲学 为什么自动配置如此重要&#xff1f; 在传统 Spring 开发中&#xff0c;开发者要手动配置大量 XML 或 JavaConfig&#xff0c;过程繁琐、重复且容易出错。Spring Boot 引入自动配置机制&#xff0c;极大地简化…...

Linux下载与安装——笔记

Linux 是一种自由和开放源代码的 操作系统&#xff08;OS&#xff09;&#xff0c;其核心&#xff08;Kernel&#xff09;由 Linus Torvalds 于 1991 年首次发布。 1、选择适合的 Linux 发行版 根据使用场景和技术水平选择&#xff1a; 新手入门&#xff1a;Ubuntu&#xff08…...

09前端项目----分页功能

分页功能 分页器的优点实现分页功能自定义分页器先实现静态分页器调试分页器动态数据/交互 Element UI组件 分页器的优点 电商平台同时展示的数据很多&#xff0c;所以采用分页功能实现分页功能 Element UI已经有封装好的组件&#xff0c;但是也要掌握原理&#xff0c;以及自定…...