Cesium实现动态水面效果

目录

1.使用Primitive实现动态水面效果

2.版本问题 


1.使用Primitive实现动态水面效果

     let points = [[87.07131373100303, 29.40857655725876],[87.33503858397042, 29.41843499494008],[87.33072496578943, 29.193059292424955],[87.05098771260403, 29.20286249623694],];let polygonArr = [];points.map((ele) => {polygonArr.push(...ele, 0);});viewer.scene.primitives.add(new Cesium.Primitive({geometryInstances: new Cesium.GeometryInstance({geometry: new Cesium.PolygonGeometry({polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(polygonArr)),height: 4400,}),}),appearance: new Cesium.EllipsoidSurfaceAppearance({aboveGround: true,material: new Cesium.Material({fabric: {type: "Water",uniforms: {normalMap: require("@/assets/img/waterdudv.jpg"),frequency: 1000.0,animationSpeed: 0.05,amplitude: 10.0,},},}),}),show: true,}));viewer.scene.globe.depthTestAgainstTerrain = true;viewer.camera.setView({//定位到范围中心点destination: Cesium.Cartesian3.fromDegrees(87.07131373100303,29.40857655725876,12000),orientation: {heading: Cesium.Math.toRadians(130.304929908965146), //1pitch: Cesium.Math.toRadians(-17.364771143804237),roll: 0.09931507517437696,},});

水面动态效果

示例代码1 

 DrawwaterFun3() {let points = [[87.07131373100303, 29.40857655725876],[87.33503858397042, 29.41843499494008],[87.33072496578943, 29.193059292424955],[87.05098771260403, 29.20286249623694],];let polygonArr = [];points.map((ele) => {polygonArr.push(...ele, 0);});viewer.scene.primitives.add(new Cesium.Primitive({geometryInstances: new Cesium.GeometryInstance({geometry: new Cesium.PolygonGeometry({polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(polygonArr)),height: 4400,}),}),appearance: new Cesium.EllipsoidSurfaceAppearance({aboveGround: true,material: new Cesium.Material({fabric: {type: "Water",uniforms: {normalMap: require("@/assets/img/waterdudv.jpg"),frequency: 1000.0,animationSpeed: 0.05,amplitude: 10.0,},},}),}),show: true,}));viewer.scene.globe.depthTestAgainstTerrain = true;viewer.camera.setView({//定位到范围中心点destination: Cesium.Cartesian3.fromDegrees(87.07131373100303,29.40857655725876,12000),orientation: {heading: Cesium.Math.toRadians(130.304929908965146), //1pitch: Cesium.Math.toRadians(-17.364771143804237),roll: 0.09931507517437696,},});}

水面动态效果

示例代码2

 DrawwaterFun2() {const riverPolygon = new Cesium.PolygonGeometry({polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArray([140.0, 30.0, 0, 150.0, 30.0, 0, 150.0, 20.0, 0, 140.0, 20.0, 0,])),height: 20,extrudedHeight: 0,ellipsoid: Cesium.Ellipsoid.WGS84,});// 自定义材质const riverMaterial = new Cesium.Material({fabric: {type: "Water",uniforms: {// baseWaterColor: new Cesium.Color(64 / 255.0, 157 / 255.0, 253 / 255.0, 0.5),normalMap: require("@/assets/img/waterdudv.jpg"),frequency: 1000.0,animationSpeed: 0.1,amplitude: 10,specularIntensity: 10,},},});// 河道的riverPrimitiveconst riverPrimitive = new Cesium.Primitive({geometryInstances: new Cesium.GeometryInstance({id: "river",geometry: riverPolygon,}),appearance: new Cesium.EllipsoidSurfaceAppearance({material: riverMaterial,}),show: true,allowPicking: false,asynchronous: false,});viewer.scene.primitives.add(riverPrimitive);viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(150.0, 30.0, 10000000),});},

2024-01-24-16-57-53

示例代码3 

    DrawwaterFun() {this.viewer.scene.globe.depthTestAgainstTerrain = false;var waterPrimitive = new Cesium.Primitive({show: true, // 默认隐藏allowPicking: false,geometryInstances: new Cesium.GeometryInstance({geometry: new Cesium.PolygonGeometry({polygonHierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights([130.0, 30.0, 0, 150.0, 30.0, 0, 150.0, 10.0, 0, 130.0, 10.0, 0,])),vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,//extrudedHeight: 0,//注释掉此属性可以只显示水面//perPositionHeight : true//注释掉此属性水面就贴地了}),}),// 可以设置内置的水面shaderappearance: new Cesium.EllipsoidSurfaceAppearance({material: new Cesium.Material({fabric: {type: "Water",uniforms: {//baseWaterColor:new Cesium.Color(0.0, 0.0, 1.0, 0.5),//blendColor: new Cesium.Color(0.0, 0.0, 1.0, 0.5),//specularMap: 'gray.jpg',normalMap: require("@/assets/img/waterdudv.jpg"),//normalMap: "本地贴图地址 或 base64",frequency: 100000.0,animationSpeed: 0.5,amplitude: 10.0,},},}),}),});this.viewer.scene.primitives.add(waterPrimitive);this.viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(140, 20, 6000000.0),orientation: {heading: Cesium.Math.toRadians(0.0), //默认朝北0度,顺时针方向,东是90度pitch: Cesium.Math.toRadians(-90), //默认朝下看-90,0为水平看,roll: Cesium.Math.toRadians(0), //默认0},});return;// //1 创建 geometry// const polygon = new Cesium.PolygonGeometry({//   polygonHierarchy: new Cesium.PolygonHierarchy(//     Cesium.Cartesian3.fromDegreesArray([90, 40, 120, 40, 120, 30, 90, 30])//   ),// });// const geometry = Cesium.PolygonGeometry.createGeometry(polygon);// //2,创建geometryInstance// const instance = new Cesium.GeometryInstance({//   geometry: geometry,// });// //3,创建 material// var material = new Cesium.Material({//   fabric: {//     type: "Water",//     uniforms: {//       baseWaterColor: new Cesium.Color.fromCssColorString("#001165"),//       normalMap: require("@/assets/img/waterdudv.jpg"),//       specularMap: require("@/assets/img/water.jpg"),//       // blendColor: new Cesium.Color.fromCssColorString("#333"),//       frequency: 20000,//       animationSpeed: 0.1,//       amplitude: 50,//       specularIntensity: 0.5,//     },//   },// });// // 4 创建Appearance// var appearance = new Cesium.EllipsoidSurfaceAppearance({//   material: material,// });// let primitive = viewer.scene.primitives.add(//   new Cesium.Primitive({//     geometryInstances: instance,//     appearance: appearance,//     asynchronous: false,//   })// );},

2024-01-24-16-59-10

示例代码4

 DrawwaterFun5() {var box = new Cesium.BoxGeometry({vertexFormat: Cesium.VertexFormat.POSITION_NORMAL_AND_ST,maximum: new Cesium.Cartesian3(250000.0, 250000.0, 250000.0),minimum: new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0),});var geometry = Cesium.BoxGeometry.createGeometry(box);let inst = new Cesium.GeometryInstance({geometry: geometry,});// 自定义材质let aper = new Cesium.MaterialAppearance({material: new Cesium.Material({fabric: {uniforms: {iTime: 0,},source: `const int NUM_STEPS = 8;const float PI     = 3.141592;const float EPSILON  = 1e-3;//#define EPSILON_NRM (0.1 / iResolution.x)#define EPSILON_NRM (0.1 / 200.0)// seaconst int ITER_GEOMETRY = 3;const int ITER_FRAGMENT = 5;const float SEA_HEIGHT = 0.6;const float SEA_CHOPPY = 4.0;const float SEA_SPEED = 1.8;const float SEA_FREQ = 0.16;const vec3 SEA_BASE = vec3(0.1,0.19,0.22);const vec3 SEA_WATER_COLOR = vec3(0.8,0.9,0.6);//#define SEA_TIME (1.0 + iTime * SEA_SPEED)const mat2 octave_m = mat2(1.6,1.2,-1.2,1.6);// mathmat3 fromEuler(vec3 ang) {vec2 a1 = vec2(sin(ang.x),cos(ang.x));vec2 a2 = vec2(sin(ang.y),cos(ang.y));vec2 a3 = vec2(sin(ang.z),cos(ang.z));mat3 m;m[0] = vec3(a1.y*a3.y+a1.x*a2.x*a3.x,a1.y*a2.x*a3.x+a3.y*a1.x,-a2.y*a3.x);m[1] = vec3(-a2.y*a1.x,a1.y*a2.y,a2.x);m[2] = vec3(a3.y*a1.x*a2.x+a1.y*a3.x,a1.x*a3.x-a1.y*a3.y*a2.x,a2.y*a3.y);return m;}float hash( vec2 p ) {float h = dot(p,vec2(127.1,311.7));return fract(sin(h)*43758.5453123);}float noise( in vec2 p ) {vec2 i = floor( p );vec2 f = fract( p );vec2 u = f*f*(3.0-2.0*f);return -1.0+2.0*mix( mix( hash( i + vec2(0.0,0.0) ),hash( i + vec2(1.0,0.0) ), u.x),mix( hash( i + vec2(0.0,1.0) ),hash( i + vec2(1.0,1.0) ), u.x), u.y);}// lightingfloat diffuse(vec3 n,vec3 l,float p) {return pow(dot(n,l) * 0.4 + 0.6,p);}float specular(vec3 n,vec3 l,vec3 e,float s) {float nrm = (s + 8.0) / (PI * 8.0);return pow(max(dot(reflect(e,n),l),0.0),s) * nrm;}// skyvec3 getSkyColor(vec3 e) {e.y = max(e.y,0.0);return vec3(pow(1.0-e.y,2.0), 1.0-e.y, 0.6+(1.0-e.y)*0.4);}// seafloat sea_octave(vec2 uv, float choppy) {uv += noise(uv);vec2 wv = 1.0-abs(sin(uv));vec2 swv = abs(cos(uv));wv = mix(wv,swv,wv);return pow(1.0-pow(wv.x * wv.y,0.65),choppy);}float map(vec3 p) {float freq = SEA_FREQ;float amp = SEA_HEIGHT;float choppy = SEA_CHOPPY;vec2 uv = p.xz; uv.x *= 0.75;float d, h = 0.0;float SEA_TIME = 1.0 + iTime * SEA_SPEED;for(int i = 0; i < ITER_GEOMETRY; i++) {d = sea_octave((uv+SEA_TIME)*freq,choppy);d += sea_octave((uv-SEA_TIME)*freq,choppy);h += d * amp;uv *= octave_m; freq *= 1.9; amp *= 0.22;choppy = mix(choppy,1.0,0.2);}return p.y - h;}float map_detailed(vec3 p) {float freq = SEA_FREQ;float amp = SEA_HEIGHT;float choppy = SEA_CHOPPY;vec2 uv = p.xz; uv.x *= 0.75;float SEA_TIME = 1.0 + iTime * SEA_SPEED;float d, h = 0.0;for(int i = 0; i < ITER_FRAGMENT; i++) {d = sea_octave((uv+SEA_TIME)*freq,choppy);d += sea_octave((uv-SEA_TIME)*freq,choppy);h += d * amp;uv *= octave_m; freq *= 1.9; amp *= 0.22;choppy = mix(choppy,1.0,0.2);}return p.y - h;}vec3 getSeaColor(vec3 p, vec3 n, vec3 l, vec3 eye, vec3 dist) {float fresnel = clamp(1.0 - dot(n,-eye), 0.0, 1.0);fresnel = pow(fresnel,3.0) * 0.65;vec3 reflected = getSkyColor(reflect(eye,n));vec3 refracted = SEA_BASE + diffuse(n,l,80.0) * SEA_WATER_COLOR * 0.12;vec3 color = mix(refracted,reflected,fresnel);float atten = max(1.0 - dot(dist,dist) * 0.001, 0.0);color += SEA_WATER_COLOR * (p.y - SEA_HEIGHT) * 0.18 * atten;color += vec3(specular(n,l,eye,60.0));return color;}// tracingvec3 getNormal(vec3 p, float eps) {vec3 n;n.y = map_detailed(p);n.x = map_detailed(vec3(p.x+eps,p.y,p.z)) - n.y;n.z = map_detailed(vec3(p.x,p.y,p.z+eps)) - n.y;n.y = eps;return normalize(n);}float heightMapTracing(vec3 ori, vec3 dir, out vec3 p) {float tm = 0.0;float tx = 1000.0;float hx = map(ori + dir * tx);if(hx > 0.0) return tx;float hm = map(ori + dir * tm);float tmid = 0.0;for(int i = 0; i < NUM_STEPS; i++) {tmid = mix(tm,tx, hm/(hm-hx));p = ori + dir * tmid;float hmid = map(p);if(hmid < 0.0) {tx = tmid;hx = hmid;} else {tm = tmid;hm = hmid;}}return tmid;}vec4 czm_getMaterial(vec2 vUv){vec2 uv = vUv;uv = vUv * 2.0 - 1.0;float time = iTime * 0.3 + 0.0*0.01;// rayvec3 ang = vec3(0, 1.2, 0.0);vec3 ori = vec3(0.0,3.5,0);vec3 dir = normalize(vec3(uv.xy,-2.0)); dir.z += length(uv) * 0.15;dir = normalize(dir) * fromEuler(ang);// tracingvec3 p;heightMapTracing(ori,dir,p);vec3 dist = p - ori;vec3 n = getNormal(p, dot(dist,dist) * EPSILON_NRM);vec3 light = normalize(vec3(0.0,1.0,0.8));// colorvec3 color = mix(getSkyColor(dir),getSeaColor(p,n,light,dir,dist),pow(smoothstep(0.0,-0.05,dir.y),0.3));return vec4( pow(color,vec3(0.75)), 1.0 );}`,},}),translucent: true,vertexShaderSource: `in vec3 position3DHigh;in vec3 position3DLow;in float batchId;in vec2 st;in vec3 normal;out vec2 v_st;out vec3 v_positionEC;out vec3 v_normalEC;void main() {v_st = st;vec4 p = czm_computePosition();v_positionEC = (czm_modelViewRelativeToEye * p).xyz;      // position in eye coordinatesv_normalEC = czm_normal * normal;                         // normal in eye coordinatesgl_Position = czm_modelViewProjectionRelativeToEye * p;}`,fragmentShaderSource: `in vec2 v_st;in vec3 v_positionEC;in vec3 v_normalEC;void main()  {vec3 positionToEyeEC = -v_positionEC;vec3 normalEC = normalize(v_normalEC);czm_materialInput materialInput;materialInput.normalEC = normalEC;materialInput.positionToEyeEC = positionToEyeEC;materialInput.st = v_st;vec4 color = czm_getMaterial(v_st);out_FragColor = color;}`,});let modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(Cesium.Cartesian3.fromDegrees(110, 40, 10));viewer.scene.primitives.add(new Cesium.Primitive({geometryInstances: inst,appearance: aper,asynchronous: false,modelMatrix: modelMatrix,}));viewer.camera.flyToBoundingSphere(new Cesium.BoundingSphere(Cesium.Cartesian3.fromDegrees(110, 40, 10),950000),{duration: 0.1,});function renderLoop(timestamp) {aper.material.uniforms.iTime = timestamp / 1000;requestAnimationFrame(renderLoop);}renderLoop();},

2024-01-24-17-14-30

2.版本问题 

CesiumV1.113 出现的问题

 CesiumV1.111 出现的问题CesiumV1.112出现的问题

CesiumV1.110 出现的问题

CesiumV1.109 出现的问题 

在github上面找解决办法:
1.第一位说是多边形图元设置材质不起效果,后面cesium工作人员给了建议,试了效果也不好

2.第二位呢直接做了版本回退,测试了1.108、1.109、1.110,1.111,1.112,1.113几个版本,发现1.108版本效果正常

这个时候,我才知道版本问题,我刚开始用的是最新版本1.113,最新版本有这个bug,所以我也回退到1.108

 版本开始回退之后,我运行,地图加载不出来,报如下错,

 

 在网上又找了办法,说是会请求cesium icon的资源,由于服务器在国外就会报错,得加自己的地图,我又改了下: 

    initCesium() {new Promise(async (resolve, reject) => {const imageryLayer = await new Cesium.ImageryLayer(new Cesium.UrlTemplateImageryProvider({url: "http://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",minimumLevel: 1,maximumLevel: 18,crs: "WGS84", // 使用84坐标系,默认为:GCJ02}));this.viewer = new Cesium.Viewer(this.$refs.cesiumContainer, {selectionIndicator: false,infoBox: false,contextOptions: {msaaLevel: 8, // 硬件反走样,默认值为 1requestWebgl2: true,//requestWebgl1: true,},baseLayer: imageryLayer,animation: false,timeline: false, // 底部时间线fullscreenButton: false, // 全屏vrButton: false, // VRsceneModePicker: false, // 选择视角的模式(球体、平铺、斜视平铺)baseLayerPicker: false, // 图层选择器(地形影像服务)navigationHelpButton: false, // 导航帮助(手势,鼠标)geocoder: false, // 位置查找工具homeButton: false, // 视角返回初始位置shouldAnimate: true,shadows: true,});this.viewer.scene.globe.baseColor = Cesium.Color.BLACK; // 设置地球颜色this.viewer.scene.debugShowFramesPerSecond = true;this.viewer.cesiumWidget.creditContainer.style.display = "none"; // 去除logowindow.viewer = this.viewer;this.DrawOnLineGaoDeMapFun();//this.DrawOnlineTdtMapFun()//this.DrawUnOnlineTdtMapFun()this.DrawTerrainProviderFun();///this.SetViewFun()resolve(viewer);}).then(() => {this.LeftClickFun();this.AllDrawFun();});},

 

参考:

1.Cesium动态水面(任意多边形PolygonGeometry)保姆级教程-CSDN博客

2.Cesium自定义shader材质实现逼真水面,支持uniforms属性实时修改-CSDN博客 

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

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

相关文章

kali安装LAMP和DVWA

LANMP简介 LANMP是指一组通常用来搭建动态网站或者服务器的开源软件&#xff0c;本身都是各自独立的程序&#xff0c;但是因为常被放在一起使用&#xff0c;拥有了越来越高的兼容度&#xff0c;共同组成了一个强大的Web应用程序平台。 L:指Linux&#xff0c;一类Unix计算机操作…

【代码随想录13】102. 二叉树的层序遍历 226. 翻转二叉树 101. 对称二叉树

目录 102. 二叉树的层序遍历题目描述做题思路参考代码 226. 翻转二叉树题目描述做题思路参考代码 101. 对称二叉树题目描述做题思路参考代码 102. 二叉树的层序遍历 题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff…

【前端可视化】postcss-px-to-viewport 适配怎么限制最大宽度?使用 postcss-mobile-forever

需求原因 自己用 nuxt3 写官网发现用 postcss-px-to-viewport 这个插件虽然能够实现基于 vw 的响应式&#xff0c;但是无法做到限制宽度&#xff0c;比如设计稿 1920p&#xff0c;我只想让最大缩放比例为 1920p&#xff0c;不能超过&#xff0c;就无法实现了。 方案参考 纯 c…

webassembly003 whisper.cpp的python绑定实现+Cython+Setuptools

python绑定项目 官方未提供python的封装绑定&#xff0c;直接调用执行文件 https://github.com/stlukey/whispercpp.py提供了源码和Cpython结合的绑定 https://github.com/zhujun1980/whispercpp_py提供了ctype方式的绑定&#xff0c;需要先make libwhisper.so Pybind11 bi…

spring Cloud Stream 实战应用深度讲解

springCloudStream 简介 Spring Cloud Stream是一个框架&#xff0c;用于构建与共享消息传递系统连接的高度可扩展的事件驱动微服务。 该框架提供了一个灵活的编程模型&#xff0c;该模型建立在已经建立和熟悉的 Spring 习惯用语和最佳实践之上&#xff0c;包括对持久发布/订…

算法基础学习|双指针算法

双指针算法 代码模板 for (int i 0, j 0; i < n; i ){while (j < i && check(i, j)) j ;// 具体问题的逻辑 } 常见问题分类&#xff1a;(1) 对于一个序列&#xff0c;用两个指针维护一段区间(2) 对于两个序列&#xff0c;维护某种次序&#xff0c;比如归并…

Transformer and Pretrain Language Models3-1

content transformer attention mechanism transformer structure​​​​​​​ pretrained language models language modeling pre-trained langue models(PLMs&#xff09; fine-tuning approaches PLMs after BERT applications of masked LM frontiers of PLMs …

RocketMQ的一万字全面总结,带你快速入门消息队列

前言 近日偶然聊起消息队列&#xff0c;发现知识模糊又破碎&#xff0c;遂广泛查询资料&#xff0c;做了这么一篇非常浅显的总结&#xff0c;聊以充作入门参考资料吧。 下面几个问题&#xff0c;如果不能回答地很好&#xff0c;可以试着在文中找寻一下答案。&#xff08;答案…

时间序列大模型:TimeGPT

论文&#xff1a;https://arxiv.org/pdf/2310.03589.pdf TimeGPT&#xff0c;这是第一个用于时间序列的基础模型&#xff0c;能够为训练期间未见过的多样化数据集生成准确的预测。 大规模时间序列模型通过利用当代深度学习进步的能力&#xff0c;使精确预测和减少不确定性成为…

VSCode 更换默认的 terminal(终端)

Win10 中 VSCode 默认的 terminal 为 PowerShell, 想要更换为 Git bash。 1. 按快捷键&#xff1a;Ctrl Shift P 2. 搜索&#xff1a;“erminal: Select Default Profile” 3. 你会看到可选的终端列表&#xff0c;然后选择 Git Bash

3.Eureka注册中心

3.Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f;有多个user-service实例地址&#xff0…

JVM对象创建与内存回收机制

对象的创建过程有如下步骤&#xff1a; 1.类加载检查&#xff1a; 虚拟机遇到一个new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过&#xff0c;如果没…

长城资产信息技术岗24届校招面试面经

本文介绍2024届秋招中&#xff0c;中国长城资产管理股份有限公司的信息技术岗岗位一面的面试基本情况、提问问题等。 10月投递了中国长城资产管理股份有限公司的信息技术岗岗位&#xff0c;所在部门为长城新盛信托有限责任公司。目前完成了一面&#xff0c;在这里记录一下一面经…

函数递归(Recursion)一篇便懂

递归的概念 在 C 语言中&#xff0c;递归&#xff08;Recursion&#xff09;是一种函数调用自身的编程技术。当一个函数在其定义中调用自身时&#xff0c;就称为递归函数。 了解递归思想 把⼀个大型复杂问题层层转化为⼀个与原问题相似&#xff0c;但规模较小的子问题来求解…

3.chrony服务器

目录 1. 简介 1.1. 重要性 1.2. Linux的两个时钟 1.3. 设置日期时间 1.3.1. timedatectl命令设置 1.3.2. date命令设置 1.4. NTP 1.5. Chrony介绍 2. 安装与配置 2.1. 安装&#xff1a; 2.2. Chrony配置文件分析 2.3. 同步时间服务器 2.3.1. 授时中心 2.3.2. 实验…

制造业中的数据治理

随着信息技术的飞速发展&#xff0c;数据已经成为现代制造业的核心资产。数据治理作为确保数据质量、安全性、可靠性和一致性的关键过程&#xff0c;对于提高生产效率和质量控制具有不可忽视的影响。本文将深入探讨制造业中数据治理的重要性、挑战和实践&#xff0c;以揭示其对…

HCIP:不同VLAN下实现网络互相通信

配置pc1 配置pc2 配置pc3 将sw1划分到vlan3 将sw3划分到vlan3 在sw1上进行缺省 将sw1上&#xff08;g0/0/1&#xff09;的untagged改成 1 3 则在pc1上ping pc2可通 在sw1上进行缺省 在sw3上&#xff08;e0/0/1&#xff09;打标记 则在pc1上ping pc3可通&#xff08;实现互通&am…

新特性Record最全用法总结---动力节点总结

目录 0、有用的新特性 一、Record 1.1、Record的介绍&#xff1a; 1.2、Record的声明&#xff1a; 1.3、Record的创建&#xff1a; 1.4、Record使用举例&#xff1a; 1.5、Record-实例方法、静态方法 1.6、Record-三类构造方法 1.6.1、紧凑型构造、定制构造方法&#…

服务器的组成

服务器的重要结构组成 家用电脑组成&#xff1a; CPU、主板、内存条、显卡、硬盘、电源、风扇、网卡、显示器、机箱、键盘鼠标等等。 CPU CPU是电脑的大脑&#xff0c; CPU发展史&#xff1a; 32 位CPU&#xff1a;最大的内存寻址地址2^32&#xff0c;大约4G的大小。 CP…

爬虫进阶之selenium模拟浏览器

爬虫进阶之selenium模拟浏览器 简介环境配置1、建议先安装conda2、创建虚拟环境并安装对应的包3、下载对应的谷歌驱动以及与驱动对应的浏览器 代码setting.py配置scrapy脚本参考中间件middlewares.py 附录&#xff1a;selenium教程 简介 Selenium是一个用于自动化浏览器操作的…