Cesium快速入門到精通系列教程九:Cesium 中高效添加和管理圖標/標記的標準方式??

Cesium中通過 ??Primitive 高效添加 ??點、線、多邊形、圓、橢圓、球、模型?? 等地理要素,以下是各類地理要素的高效添加方式:

一、公告板

1. 創建 BillboardCollection 并添加到場景?

const billboards = viewer.scene.primitives.add(new Cesium.BillboardCollection());
  • ??new Cesium.BillboardCollection()??

創建一個新的 ??公告板集合??(BillboardCollection),用于管理多個公告板(Billboard)。

  • ??viewer.scene.primitives.add(...)??

將這個公告板集合添加到 Cesium 的 ??場景(Scene)?? 中,使其能夠被渲染。

作用??:
類似于創建一個“容器”,用于高效管理多個公告板(比如多個圖標、標記點等),而不是單獨添加每個公告板(單獨添加會有更高的性能開銷)。?

2. 向 BillboardCollection 添加一個公告板??

billboards.add({position: Cesium.Cartesian3.fromDegrees(113.3244, 23.1049, 600),image: '/Assets/nav.svg',width: 32,height: 32,scaleByDistance: new Cesium.NearFarScalar(1e3, 1.0, 2e6, 0.2)
});
  • ??position: Cesium.Cartesian3.fromDegrees(113.3244, 23.1049, 600)??

定義公告板的 ??3D 坐標位置??:

113.3244, 23.1049 是經緯度(WGS84 坐標系)。

600 是高度(單位:米),表示公告板在地球表面上方 600 米處。

  • ??image: '/Assets/nav.svg'??

公告板顯示的 ??圖片路徑??(這里是 /Assets/nav.svg,可以是一個 SVG 或 PNG 圖標)。

  • ??width: 32, height: 32??

公告板的 ??尺寸??(寬度和高度均為 32 像素)。

  • ??scaleByDistance: new Cesium.NearFarScalar(1e3, 1.0, 2e6, 0.2)??

??視距縮放優化??(根據相機距離動態調整公告板大小):

當相機距離 ??1000 米(1e3)?? 時,公告板顯示原始大小(1.0 倍)。

當相機距離 ??2000000 米(2e6)?? 時,公告板縮小到 0.2 倍(避免遠處圖標過大)。

作用??:
在指定位置(廣州附近,高度 600 米)添加一個 ??導航圖標??(nav.svg),并優化其顯示大小(近大遠小)。?

3、整體作用??

這段代碼的 ??核心功能?? 是:

  1. ??創建一個公告板集合??(BillboardCollection),用于高效管理多個公告板。
  2. ??向集合中添加一個公告板??,指定其:
  • ??位置??(經緯度 + 高度)。
  • ??顯示的圖片??(nav.svg)。
  • ??尺寸??(32x32 像素)。
  • ??視距縮放優化??(近大遠小,避免遠處圖標過大)。

4、優化點??

  • ??使用 BillboardCollection 而不是單獨添加 Billboard??

批量管理多個公告板時,性能更高(減少 GPU 調用次數)。

  • ??scaleByDistance 優化??

避免遠處圖標過大,提升視覺效果。

  • ??支持 3D 位置(含高度)??

不僅能在地表放置圖標,還能在 3D 空間(如空中)放置。

5、擴展用法??

如果需要添加多個公告板,可以循環調用 billboards.add():

const positions = [{ lon: 113.3244, lat: 23.1049, height: 600 },{ lon: 113.3254, lat: 23.1059, height: 700 }
];
positions.forEach(pos => {billboards.add({position: Cesium.Cartesian3.fromDegrees(pos.lon, pos.lat, pos.height),image: '/Assets/nav.svg',width: 32,height: 32});
});

性能更好的方式:

const billboards = viewer.scene.primitives.add(new Cesium.BillboardCollection({scene: viewer.scene,debugShowBoundingVolume: false // 關閉調試框,提升性能[4](@ref)})
);const positions = [{ lon: 116.40, lat: 39.91, image: "icon1.png" },{ lon: 121.47, lat: 31.23, image: "icon2.png" }
];const billboardList = positions.map(pos => {return {image: pos.image,position: Cesium.Cartesian3.fromDegrees(pos.lon, pos.lat),scale: 0.8,color: Cesium.Color.WHITE.withAlpha(0.9),horizontalOrigin: Cesium.HorizontalOrigin.CENTER,verticalOrigin: Cesium.VerticalOrigin.BOTTOM};
});// 批量添加(減少渲染調用)
billboards.add(billboardList);

6、動態更新策略

直接修改屬性

const billboard = billboards.get(0); // 獲取第一個廣告牌
billboard.scale = 1.2; // 修改縮放比例
billboard.position = Cesium.Cartesian3.fromDegrees(120.0, 30.0); // 更新位置

動態效果(旋轉/閃爍)???

// 通過 preRender 事件實現旋轉動畫[9](@ref)
viewer.scene.preRender.addEventListener(() => {const time = Date.now() * 0.001;billboard.rotation = time % (Math.PI * 2); // 持續旋轉billboard.color.alpha = 0.5 + 0.5 * Math.sin(time); // 透明度閃爍
});

按需更新??

// 僅當廣告牌可見時更新
if (billboard.show) {billboard.scale = calculateScaleBasedOnDistance();
}

7、性能優化技巧

7.1 ??GPU 合并渲染??

? ? ??批量添加??:單次 billboards.add() 提交多個廣告牌,觸發 GPU 實例化渲染。

? ? ??紋理復用??:相同圖片自動合并紋理,減少 Draw Call。

7.2 距離動態控制??

billboard.scaleByDistance = new Cesium.NearFarScalar(1e3, 1.0, 1e5, 0.2);
billboard.translucencyByDistance = new Cesium.NearFarScalar(1e4, 1.0, 2e5, 0.1);

近距離正常顯示,遠距離縮小并漸隱,降低渲染負載。?

7.3 ??視錐體裁剪??

viewer.scene.frustumCulling = true; // 默認開啟,自動剔除視野外廣告牌

8、內存管理機制

8.1 移除單個廣告牌??

billboards.remove(billboard); // 移除指定對象

8.2 ??批量清理??

// 移除所有廣告牌
billboards.removeAll();
// 或從場景中移除整個集合
viewer.scene.primitives.remove(billboards);

8.3 避免內存泄漏??

// 銷毀時釋放資源
viewer.scene.primitives.destroyPrimitives = true;

9、總結?

代碼部分作用
new Cesium.BillboardCollection()創建公告板集合(高效管理多個 Billboard)
viewer.scene.primitives.add(...)將集合添加到場景(使其可渲染)
billboards.add({...})添加一個公告板,指定位置、圖片、尺寸和縮放優化

這段代碼是 ??Cesium 中高效添加和管理 3D 圖標/標記的標準方式??,適用于地圖、仿真、游戲等場景。?

二、文本

使用 Primitive API

  // 初始化Viewerconst viewer = new Cesium.Viewer('cesiumContainer', {terrainProvider: Cesium.createWorldTerrain(),sceneMode: Cesium.SceneMode.SCENE3D});// 創建LabelCollection圖元const labelCollection = viewer.scene.primitives.add(new Cesium.LabelCollection({show: true,// 啟用深度測試避免被地形遮擋(需權衡性能)depthTest: false}));// 批量添加文本標簽const positions = [{ lon: 116.404, lat: 39.915, text: "北京" },{ lon: 121.47, lat: 31.23, text: "上海" },// 更多位置數據...];positions.forEach(pos => {labelCollection.add({position: Cesium.Cartesian3.fromDegrees(pos.lon, pos.lat),text: pos.text,font: '14px sans-serif', // 字體優化:避免過大字號fillColor: Cesium.Color.WHITE,outlineColor: Cesium.Color.BLACK,outlineWidth: 2,// 垂直對齊:文本位于坐標點下方verticalOrigin: Cesium.VerticalOrigin.BOTTOM,// 像素偏移:微調位置pixelOffset: new Cesium.Cartesian2(0, -15)});});

三. 點(Point)??

使用 Primitive API(高性能,適合大量點)?

const pointPrimitiveCollection = viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection());
pointPrimitiveCollection.add({position: Cesium.Cartesian3.fromDegrees(113.3244, 23.1049, 0),color: Cesium.Color.RED,pixelSize: 10
});

四、線(Polyline)?

使用 Primitive API(Primitive 方式需手動構建 Geometry)?

const polylineCollection = viewer.scene.primitives.add(new Cesium.PolylineCollection());
polylineCollection.add({positions: Cesium.Cartesian3.fromDegreesArray([113.3244, 23.1049,113.3254, 23.1059]),width: 2,material: new Cesium.ColorMaterialProperty(Cesium.Color.BLUE)
});

五、多邊形(Polygon)?

使用 Primitive API(Primitive 方式需手動構建 Geometry)?

const polygonCollection = viewer.scene.primitives.add(new Cesium.PolygonCollection());
polygonCollection.add({hierarchy: Cesium.Cartesian3.fromDegreesArray([113.3244, 23.1049,113.3254, 23.1059,113.3264, 23.1039]),material: new Cesium.ColorMaterialProperty(Cesium.Color.GREEN.withAlpha(0.5))
});

六、圓(Circle)?

使用 Primitive API(需手動計算圓周點)?

// 初始化Cesium
const viewer = new Cesium.Viewer('cesiumContainer', {terrainProvider: Cesium.createWorldTerrain(),baseLayerPicker: false, // 禁用底圖選擇器geocoder: false, // 禁用地理編碼器homeButton: false, // 禁用主頁按鈕infoBox: false, // 禁用信息框sceneModePicker: false, // 禁用場景模式選擇器selectionIndicator: false, // 禁用選擇指示器navigationHelpButton: false, // 禁用導航幫助按鈕animation: false, // 禁用動畫控件timeline: false, // 禁用時間軸fullscreenButton: false // 禁用全屏按鈕
});// 定義圓的中心點和半徑
const centerLon = 113.3244;
const centerLat = 23.1049;
const radiusInMeters = 1000;// 將圓心轉換為 Cartesian3 坐標
const centerCartesian = Cesium.Cartesian3.fromDegrees(centerLon, centerLat);// 計算圓的 Cartesian3 點集(近似采樣)
const granularity = Cesium.Math.RADIANS_PER_DEGREE; // 采樣精度(弧度/度)
const positions = [];
for (let angle = 0; angle < 360; angle += granularity) {const radians = Cesium.Math.toRadians(angle);// 計算圓周上的點(基于球面坐標)const x = radiusInMeters * Math.cos(radians);const y = radiusInMeters * Math.sin(radians);// 將局部坐標轉換為全局 Cartesian3const point = Cesium.Cartesian3.fromDegrees(centerLon + x / 111320, // 經度偏移(1度≈111320米)centerLat + y / (111320 * Math.cos(Cesium.Math.toRadians(centerLat))), // 緯度偏移(考慮緯度縮放)0 // 高度(與圓心相同));positions.push(point);
}// 閉合圓(首尾相連)
positions.push(positions[0]);// 使用 Primitive API 添加圓
const primitiveCollection = viewer.scene.primitives.add(new Cesium.PrimitiveCollection());
primitiveCollection.add(new Cesium.Primitive({geometryInstances: new Cesium.GeometryInstance({geometry: new Cesium.PolygonGeometry({polygonHierarchy: new Cesium.PolygonHierarchy(positions),perPositionHeight: false // 固定高度}),attributes: {color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE.withAlpha(0.5) // 半透明藍色)}}),appearance: new Cesium.PerInstanceColorAppearance({outline: true,outlineColor: Cesium.Color.RED,outlineWidth: 2})})
);// 定位相機到圓的位置
viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(centerLon, centerLat, 5000),orientation: {heading: Cesium.Math.toRadians(0),pitch: Cesium.Math.toRadians(-30)}
});

七、橢圓(Ellipse)?

使用 Primitive API(需手動計算橢圓點集)?

const viewer = new Cesium.Viewer('cesiumContainer', {terrainProvider: Cesium.createWorldTerrain(),baseLayerPicker: false, // 禁用底圖選擇器geocoder: false, // 禁用地理編碼器homeButton: false, // 禁用主頁按鈕infoBox: false, // 禁用信息框sceneModePicker: false, // 禁用場景模式選擇器selectionIndicator: false, // 禁用選擇指示器navigationHelpButton: false, // 禁用導航幫助按鈕animation: false, // 禁用動畫控件timeline: false, // 禁用時間軸fullscreenButton: false // 禁用全屏按鈕
});// 定義橢圓的中心點、半長軸、半短軸和旋轉角度const centerLon = 113.3244;const centerLat = 23.1049;const semiMajorAxis = 2000; // 半長軸(米)const semiMinorAxis = 1000; // 半短軸(米)const rotation = Cesium.Math.toRadians(45); // 旋轉角度(弧度)// 將橢圓中心轉換為 Cartesian3 坐標const centerCartesian = Cesium.Cartesian3.fromDegrees(centerLon, centerLat);// 計算橢圓的 Cartesian3 點集(近似采樣)const granularity = Cesium.Math.RADIANS_PER_DEGREE; // 采樣精度(弧度/度)const positions = [];for (let angle = 0; angle < 360; angle += granularity) {const radians = Cesium.Math.toRadians(angle);// 計算橢圓上的點(基于參數方程)const x = semiMajorAxis * Math.cos(radians);const y = semiMinorAxis * Math.sin(radians);// 旋轉橢圓const rotatedX = x * Math.cos(rotation) - y * Math.sin(rotation);const rotatedY = x * Math.sin(rotation) + y * Math.cos(rotation);// 將局部坐標轉換為全局 Cartesian3const point = Cesium.Cartesian3.fromDegrees(centerLon + rotatedX / 111320, // 經度偏移(1度≈111320米)centerLat + rotatedY / (111320 * Math.cos(Cesium.Math.toRadians(centerLat))), // 緯度偏移(考慮緯度縮放)0 // 高度(與橢圓中心相同));positions.push(point);}// 閉合橢圓(首尾相連)positions.push(positions[0]);// 使用 Primitive API 添加橢圓const primitiveCollection = viewer.scene.primitives.add(new Cesium.PrimitiveCollection());primitiveCollection.add(new Cesium.Primitive({geometryInstances: new Cesium.GeometryInstance({geometry: new Cesium.PolygonGeometry({polygonHierarchy: new Cesium.PolygonHierarchy(positions),perPositionHeight: false // 固定高度}),attributes: {color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.BLUE.withAlpha(0.5) // 半透明藍色)}}),appearance: new Cesium.PerInstanceColorAppearance({outline: true,outlineColor: Cesium.Color.RED,outlineWidth: 2})}));// 定位相機到橢圓位置viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(centerLon, centerLat, 5000),orientation: {heading: Cesium.Math.toRadians(0),pitch: Cesium.Math.toRadians(-30)}});

八、球(Sphere)?

使用 Primitive API(Primitive 方式需手動構建 Geometry)?

const sphereCollection = viewer.scene.primitives.add(new Cesium.PrimitiveCollection());
sphereCollection.add(new Cesium.Primitive({geometryInstances: new Cesium.GeometryInstance({geometry: new Cesium.EllipsoidGeometry({vertexFormat: Cesium.VertexFormat.POSITION_AND_NORMAL,radii: new Cesium.Cartesian3(100, 100, 100)})}),appearance: new Cesium.PerInstanceColorAppearance()})
);

九、3D 模型(Model)?

使用 Primitive API(Primitive 方式需手動加載模型)?

性能優化建議?

場景推薦方式原因
??少量要素??Entity?API代碼簡潔,開發效率高
??大量要素(>1000)??Primitive?API性能更高,減少 CPU-GPU 通信開銷
??動態更新(如軌跡動畫)??Entity?API支持更簡單的屬性動畫
??自定義渲染(如特殊著色器)??Primitive?API可深度定制渲染邏輯

總結?

要素類型推薦 API示例代碼
??點??Entity?或?PointPrimitiveCollectionviewer.entities.add({ point: {...} })
??線??Entity?或?PolylineCollectionviewer.entities.add({ polyline: {...} })
??多邊形??Entity?或?PolygonCollectionviewer.entities.add({ polygon: {...} })
??圓/橢圓??Entity?API(更簡單)viewer.entities.add({ circle: {...} })
??球??Entity?API(更簡單)viewer.entities.add({ ellipsoid: {...} })
??模型??Entity?API(更簡單)viewer.entities.add({ model: {...} })

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84886.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84886.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84886.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

volka烹飪常用英語

1. 視頻開場與主題介紹 Today, we are going to learn English while cooking. Fire. In this video, I’m going to continue to teach you the 3,000 most common English words that will allow you to understand 95% of spoken English. And we are going to be preparin…

同旺科技 USB TO SPI / I2C適配器(專業版)--EEPROM讀寫——B

所需設備&#xff1a; 1、USB 轉 SPI I2C 適配器&#xff1b;內附鏈接 2、24C64芯片&#xff1b; 適應于同旺科技 USB TO SPI / I2C適配器專業版&#xff1b; 燒寫EEPROM數據、讀取EEPROM數據、拷貝EEPROM數據、復制產品固件&#xff0c;一切將變得如此簡單&#xff01; 1…

Linux下成功編譯CPU版Caffe的保姆級教程(基于Anaconda Python3.8 包含完整可用Makefile.config文件)

目錄 前言 一、環境準備 1. 系統要求 2. 安裝必要依賴 二、Anaconda環境配置 1. 安裝Anaconda 2. 創建專用Python環境 3. 安裝必要的Python包 三、獲取Caffe源代碼 四、配置編譯選項 1. 修改Makefile.config 2. 修改Makefile 3. 修改CMakeLists.txt&#xff08;如…

shell三劍客

了解三劍客 三劍客指的是: grep、sed和awk這三個在linux系統中常用的命令行工具 shell三劍客 grep&#xff1a; 主要用于查找和過濾特定文本 sed&#xff1a;是一個流編輯器&#xff0c;可以對文本進行增刪改查 awk&#xff1a;是一個文本處理工具&#xff0c;適合對列進行處…

創客匠人視角:知識IP變現的主流模式與創新路徑

知識IP變現賽道正從“野蠻生長”走向“精細化運營”&#xff0c;如何在流量紅利消退期實現可持續變現&#xff1f;創客匠人基于服務數萬職業教育IP的實踐經驗&#xff0c;總結出一套兼顧效率與長尾價值的變現邏輯&#xff0c;為行業提供了可參考的路徑。 主流變現模式&#x…

【嵌入式人工智能產品開發實戰】(二十三)—— 政安晨:將小智AI代碼中的display與ota部分移除

政安晨的個人主頁&#xff1a;政安晨 歡迎 &#x1f44d;點贊?評論?收藏 希望政安晨的博客能夠對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff01; 目錄 本篇目標 第一步 ? 修改說明 &#x1f527; 修改后的代碼節選 &#x1f4cc; 總…

從sdp開始到webrtc的通信過程

1. SDP 1.1 SDP的關鍵點 SDP&#xff08;Session Description Protocol&#xff09;通過分層、分類的屬性字段&#xff0c;結構化描述實時通信會話的 會話基礎、網絡連接、媒體能力、安全策略、傳輸優化 等核心信息&#xff0c;每個模塊承擔特定功能&#xff1a; 1. 會話級別…

PHP、Apache環境中部署sqli-labs

初始化數據庫的時候&#xff0c;連接不上 檢查配置文件里面的數據庫IP、用戶名、密碼是否正確 mysqli_connect函數報錯 注意要下載兼容PHP7的sqli-labs版本 1、下載sqli-labs工程 從預習資料中下載。 文件名&#xff1a;sqli_labs_sqli-for7.zip 2、配置數據庫 把下載好的…

Spring AI Alibaba Graph 實踐

本文中將闡述下 AI 流程編排框架和 Spring AI Alibaba Graph 以及如何使用。 1. Agent 智能體 結合 Google 和 Authropic 對 Agent 的定義&#xff1a;Agent 的定義為&#xff1a;智能體&#xff08;Agent&#xff09;是能夠獨立運行&#xff0c;感知和理解現實世界并使用工具…

Server 11 ,?通過腳本在全新 Ubuntu 系統中安裝 Nginx 環境,安裝到指定目錄( 腳本安裝Nginx )

目錄 前言 一、準備工作 1.1 系統要求 1.2 創建目錄 1.3 創建粘貼 1.4 授權腳本 1.5 執行腳本 1.6 安裝完成 二、實際部署 2.1 賦予權限 2.2 粘貼文件 2.3 重啟服務 三、腳本解析 步驟 1: 安裝編譯依賴 步驟 2: 創建安裝目錄 步驟 3: 下載解壓源碼 步驟 4: 配置…

層壓板選擇、信號完整性和其他權衡

關于印刷電路材料&#xff0c;我有很多話要說&#xff0c;我覺得這非常有趣&#xff0c;而且所有候選人都帶有“材料”這個詞。無論出現在頂部的東西都是我最終選擇的。我實際上會描述決策過程&#xff0c;因為我認為這很有趣&#xff0c;但首先要強調將我帶到這里的職業旅程。…

幾種經典排序算法的C++實現

以下是幾種經典排序算法的C實現&#xff0c;包含冒泡排序、選擇排序、插入排序、快速排序和歸并排序&#xff1a; #include <iostream> #include <vector> using namespace std;// 1. 冒泡排序 void bubbleSort(vector<int>& arr) {int n arr.size();f…

[學習] 多項濾波器在信號插值和抽取中的應用:原理、實現與仿真(完整仿真代碼)

多項濾波器在信號插值和抽取中的應用&#xff1a;原理、實現與仿真 文章目錄 多項濾波器在信號插值和抽取中的應用&#xff1a;原理、實現與仿真引言 第一部分&#xff1a;原理詳解1.1 信號插值中的原理1.2 信號抽取中的原理1.3 多項濾波器的通用原理 第二部分&#xff1a;實現…

Linux中source和bash的區別

在Linux中&#xff0c;source和bash&#xff08;或sh&#xff09;都是用于執行Shell腳本的命令&#xff0c;但它們在執行方式和作用域上有顯著區別&#xff1a; 1. 執行方式 bash script.sh&#xff08;或sh script.sh&#xff09; 啟動一個新的子Shell進程來執行腳本。腳本中的…

解決文明6 內存相關內容報錯EXCEPTION_ACCESS_VIOLATION

我裝了很多Mod&#xff0c;大約五六十個&#xff0c;經常出現內存讀寫異常的報錯。為了這個問題&#xff0c;我非常痛苦&#xff0c;已經在全球各大論壇查詢了好幾周&#xff0c;終于在下方的steam評論區發現了靠譜的解答討論區。 https://steamcommunity.com/app/289070/dis…

IIS 實現 HTTPS:OpenSSL證書生成與配置完整指南

參考 IIS7使用自簽名證書搭建https站點(內網外網都可用) windows利用OpenSSL生成證書,并加入IIS 親測有效 !!! IIS 配置自簽名證書 參考:IIS7使用自簽名證書搭建https站點(內網外網都可用) 親測可行性,不成功。 IIS 配置OpenSSL 證書 √ OpenSSL 下載 https://slp…

Spark DAG、Stage 劃分與 Task 調度底層原理深度剖析

Spark DAG、Stage 劃分與 Task 調度底層原理深度剖析 核心知識點詳解 1. DAG (Directed Acyclic Graph) 的構建過程回顧 Spark 應用程序的執行始于 RDD 的創建和一系列的轉換操作 (Transformations)。這些轉換操作&#xff08;如 map(), filter(), reduceByKey() 等&#xff…

關于阿里云-云消息隊列MQTT的連接和使用,以及SpringBoot的集成使用

一、目的 本文主要記錄物聯網設備接入MQTT以及對接服務端SpringBoot整個的交互流程和使用。 二、概念 2.1什么是MQTT? MQTT是基于TCP/IP協議棧構建的異步通信消息協議&#xff0c;是一種輕量級的發布、訂閱信息傳輸協議。可以在不可靠的網絡環境中進行擴展&#xff0c;適用…

車載功能框架 --- 整車安全策略

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

HarmonyOS5 讓 React Native 應用支持 HarmonyOS 分布式能力:跨設備組件開發指南

以下是 HarmonyOS 5 與 React Native 融合實現跨設備組件的完整開發指南&#xff0c;綜合關鍵技術與實操步驟&#xff1a; 一、分布式能力核心架構 React Native JS 層 → Native 橋接層 → HarmonyOS 分布式能力層(JavaScript) (ArkTS封裝) (設備發現/數據同步/硬件…