ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

CesiumJS三维地球开发入门:从环境搭建到数据可视化实战

CesiumJS三维地球开发入门:从环境搭建到数据可视化实战 1. 项目概述从零构建你的第一个三维地球最近几年三维数字地球的应用场景越来越广从智慧城市、自然资源管理到气象可视化、应急指挥几乎都能看到它的身影。如果你是一名GIS开发者、前端工程师或者是对空间数据可视化感兴趣的技术爱好者那么CesiumJS绝对是你绕不开的一个名字。它不是一个简单的“地图显示库”而是一个完整的、用于创建三维地理空间应用的JavaScript平台。简单来说有了Cesium你就能在浏览器里构建出一个可以旋转、缩放、加载各种数据影像、地形、模型、矢量的“活”地球。这个项目我们就从最基础也是最关键的一步开始基于CesiumJS实现一个三维数字地球并完成从环境搭建到第一个地球显示的完整入门流程。听起来好像很高大上但其实只要跟着步骤走你会发现入门Cesium并没有想象中那么复杂。整个过程不依赖复杂的后端纯粹在前端完成非常适合新手快速上手感受三维GIS开发的魅力。无论你是想为自己的项目增加一个酷炫的全球视图还是想深入学习WebGL和地理空间可视化这篇文章都将为你提供一个扎实的起点。2. 核心思路与技术选型解析2.1 为什么选择CesiumJS在决定使用一个技术栈之前搞清楚“为什么是它”至关重要。市面上能做3D地图的库不少比如Mapbox GL JS、Three.js结合地图插件等。CesiumJS的核心优势在于其“地理空间原生”的特性。首先CesiumJS内置了对WGS84地理坐标系的完整支持。这意味着你不需要自己处理经纬度到三维空间坐标的复杂转换直接使用new Cesium.Cartographic(longitude, latitude, height)这样的API即可。它原生理解什么是椭球体默认使用WGS84椭球什么是地形什么是各种地理投影。这对于GIS应用来说是基础中的基础如果自己用纯3D引擎去实现会涉及大量底层数学计算。其次它提供了一整套地理空间数据加载与渲染的解决方案。这不仅仅是显示一张图片那么简单。Cesium可以无缝加载多种标准的影像服务如WMTS、WMS、TMS、地形数据如Cesium Ion提供的全球地形、自定义DEM、3D模型glTF/GLB、以及大量的矢量数据格式GeoJSON、KML、CZML。更强大的是它能处理时间动态数据非常适合可视化卫星轨迹、天气变化等时序场景。最后性能与生态。CesiumJS基于WebGL在渲染大量数据如全球建筑白模、千万级点数据时经过了深度优化。其背后的Cesium Ion平台提供了丰富的现成数据源和3D Tiles流式传输服务虽然部分服务收费但极大地降低了获取和处理全球尺度数据的门槛。社区活跃文档尽管中文文档更新有时滞后和案例丰富遇到问题比较容易找到解决方案。2.2 项目整体架构设计我们这个入门项目的目标很明确在本地或一个简单的Web服务器环境下运行起一个包含CesiumJS库的HTML页面并成功初始化一个三维地球视图。其技术架构非常简单清晰是一个典型的前端静态应用结构依赖层核心是CesiumJS库。我们将通过两种主流方式获取它使用CDN在线引入或者下载库文件到本地进行离线开发。应用层一个HTML文件作为入口一个JavaScript文件编写主要的逻辑代码一个CSS文件进行简单的样式控制。数据/资源层Cesium运行时需要加载一些资源比如默认的蓝色星空背景图、水纹效果贴图、控件图标等。这些资源通常位于Cesium库的Build/Cesium/Assets和Build/Cesium/Widgets等目录下。如果使用CDN这些资源会自动从CDN加载如果本地部署则需要确保资源路径正确。这种架构的优势在于轻量、快速没有任何后端依赖所有逻辑在浏览器中执行非常适合学习、演示和快速原型开发。2.3 关键工具与资源准备在开始写代码之前我们需要准备好“工具箱”。对于纯粹的Cesium前端开发你甚至不需要安装Node.js或任何构建工具。一个现代浏览器强烈推荐Chrome或Edge因其开发者工具对WebGL调试更友好和一个代码编辑器如VS Code就足够了。但是为了获得更好的开发体验和未来项目扩展的可能性我建议搭建一个简单的本地开发环境代码编辑器VS Code安装Live Server插件。这个插件可以一键启动一个本地HTTP服务器并支持热重载。这对于需要加载本地资源文件的Cesium项目来说非常方便可以避免因file://协议引起的跨域问题。浏览器Chrome/Edge。务必开启开发者工具我们将会频繁使用到“Console”面板查看日志和错误使用“Sources”面板调试代码以及使用“Network”面板查看资源加载情况。Cesium库文件我们将从Cesium官网下载稳定版本的库。访问 Cesium官网 并点击“Download CesiumJS”你会得到一个ZIP包。解压后我们主要关注Build/Cesium目录下的内容。访问令牌可选但推荐为了加载Cesium Ion提供的默认底图Bing Maps影像等和地形你需要一个免费的Ion访问令牌。去Cesium Ion官网注册一个账户在“Access Tokens”页面创建一个默认令牌即可。这能让你一开始就获得漂亮的全球影像学习体验更好。注意使用Cesium Ion的默认底图需要网络连接并且有配额限制免费账户足够个人学习使用。如果项目要求完全离线或内网部署则需要准备自己的离线影像和地形数据源这属于进阶内容本项目暂不涉及。3. 两种入门安装方式详解万事开头难但Cesium的“开头”提供了多种选择。这里我详细讲解两种最常用的方式CDN引入和本地库引入。我会对比它们的优劣并给出每一步的操作细节和原理。3.1 方式一CDN引入最快上手CDN内容分发网络引入是最简单、最快捷的方式特别适合快速验证、制作在线Demo或初学者体验。操作步骤创建项目文件夹在本地创建一个空文件夹例如cesium-earth-demo。创建HTML文件在该文件夹内创建index.html。编写HTML骨架在index.html中写入基础HTML5结构。引入Cesium CSS在head标签内通过CDN链接引入Cesium的样式文件。这个文件定义了查看器控件如缩放按钮、指南针的样式。link hrefhttps://cesium.com/downloads/cesiumjs/releases/1.107/build/Cesium/Widgets/widgets.css relstylesheet引入Cesium JS在body标签的末尾或head中但使用async属性引入Cesium的核心JavaScript库。script srchttps://cesium.com/downloads/cesiumjs/releases/1.107/build/Cesium/Cesium.js/script提示请注意URL中的版本号1.107。你应该始终从Cesium官网获取最新稳定版的CDN链接因为API可能会有变动。直接使用我例子中的链接可能在未来失效。创建容器和主脚本在body中创建一个全屏的div作为地球的容器并创建我们自己的JS文件main.js。body div idcesiumContainer stylewidth: 100%; height: 100vh; margin: 0; padding: 0;/div script src./main.js/script /body编写初始化代码在main.js中编写初始化地球的代码。// 设置Cesium.Ion.defaultAccessToken。如果你没有令牌可以暂时注释掉这行 // 但地球将显示为默认的瓦片灰色网格没有影像和地形。 Cesium.Ion.defaultAccessToken 你的Ion访问令牌; // 初始化Cesium Viewer将其挂载到id为‘cesiumContainer’的DOM元素上。 const viewer new Cesium.Viewer(cesiumContainer, { // 这里可以传递一系列配置选项 // 例如使用OpenStreetMap影像无需token作为底图替代方案 // imageryProvider: new Cesium.OpenStreetMapImageryProvider({ // url: https://a.tile.openstreetmap.org/ // }), // 禁用一些默认控件以简化界面 // animation: false, // 时间轴动画控件 // baseLayerPicker: false, // 底图选择器 // fullscreenButton: false, // 全屏按钮 // vrButton: false, // VR按钮 // geocoder: false, // 搜索框 // homeButton: false, // 主页按钮 // infoBox: false, // 信息框 // sceneModePicker: false, // 2D/3D模式选择器 // selectionIndicator: false, // 选择指示器 // timeline: false, // 时间轴 // navigationHelpButton: false, // 导航帮助按钮 }); // 你可以通过viewer对象进行更多操作例如设置初始视角 viewer.camera.setView({ destination: Cesium.Cartesian3.fromDegrees(116.4, 39.9, 15000000), // 北京上空1500公里 orientation: { heading: Cesium.Math.toRadians(0), pitch: Cesium.Math.toRadians(-90), // 视角垂直向下 roll: 0.0 } });CDN方式的优缺点分析优点无需下载数百MB的库文件设置极其简单总是使用最新或指定版本。缺点完全依赖外部网络断网无法工作无法进行深度的源码调试和定制加载速度受网络影响。3.2 方式二本地库引入推荐用于正式开发对于大多数严肃的学习和项目开发我强烈推荐使用本地库的方式。它虽然第一步稍显繁琐但带来了离线开发、源码调试和构建集成的可能性。操作步骤下载Cesium库从官网下载ZIP包并解压。假设你将解压后的文件夹重命名为Cesium并放在你的项目根目录下结构如下cesium-earth-project/ ├── Cesium/ # 解压后的Cesium库目录 │ ├── Build/ │ │ └── Cesium/ │ │ ├── Cesium.js │ │ ├── Widgets/ │ │ └── Assets/ │ └── Source/ ├── index.html ├── main.js └── style.css (可选)修改HTML中的引用路径在index.html中将CDN链接替换为指向本地Cesium目录的相对路径。!-- 引入样式 -- link href./Cesium/Build/Cesium/Widgets/widgets.css relstylesheet !-- 引入主库 -- script src./Cesium/Build/Cesium/Cesium.js/script解决资源路径问题关键这是本地引入最容易出错的一步。Cesium在运行时需要加载图标、图片等静态资源它默认会从相对于Cesium.js文件的路径去寻找Assets和Widgets目录。如果你按照上面的结构放置并且通过本地HTTP服务器如VS Code Live Server打开index.html那么路径通常是正确的。 为了确保万无一失你可以在初始化Viewer之前告诉Cesium资源的根路径// 在main.js的最开始设置Cesium的资源基路径 window.CESIUM_BASE_URL ./Cesium/Build/Cesium/; Cesium.Ion.defaultAccessToken 你的Ion访问令牌; const viewer new Cesium.Viewer(cesiumContainer);设置CESIUM_BASE_URL全局变量是解决本地部署资源404错误的最有效方法。使用本地HTTP服务器千万不要直接双击index.html用file://协议打开。这会导致CORS跨域错误因为浏览器禁止从file://协议加载许多类型的资源。务必使用一个本地HTTP服务器。VS Code用户安装“Live Server”插件然后在index.html文件上右键选择“Open with Live Server”。命令行用户如果你有Node.js可以在项目根目录运行npx serve或python -m http.server 8080。本地方式的优缺点分析优点完全离线可用可以深入Source目录阅读和调试源码便于与Webpack、Vite等现代前端构建工具集成资源加载稳定快速。缺点首次需要下载较大的库文件需要配置本地服务器项目结构稍复杂。实操心得对于新手我建议先从CDN方式开始在5分钟内看到地球旋转的效果获得正反馈。当你想深入学习开始编写复杂功能时立刻切换到本地库方式。你会经常需要查看Cesium的源码来理解某个对象或方法的细节本地环境是必不可少的。4. 第一个三维地球的深度配置与交互成功初始化一个地球只是开始。默认的Viewer对象提供了丰富的可配置项和内置功能理解它们能让你更好地控制这个地球。4.1 Viewer 配置项详解new Cesium.Viewer(containerId, options)的第二个参数是一个配置对象。下面是一些最常用且重要的配置项解析imageryProvider: 影像图层提供器。这是决定地球“皮肤”的核心。如果不指定默认使用Cesium Ion提供的Bing Maps影像需要Token。你可以替换为其他提供商const viewer new Cesium.Viewer(cesiumContainer, { imageryProvider: new Cesium.TileMapServiceImageryProvider({ url: Cesium.buildModuleUrl(Assets/Textures/NaturalEarthII) }), // 使用Cesium自带的NaturalEarthII离线影像 // 或者使用ArcGIS全球影像 // imageryProvider: new Cesium.ArcGisMapServerImageryProvider({ // url: https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer // }), });terrainProvider: 地形提供器。让地球表面不再是光滑的球体而是有起伏的真实地形。同样默认使用Cesium Ion地形需要Token。terrainProvider: Cesium.createWorldTerrain() // 创建全球地形skyBox: 天空盒即地球之外的星空背景。你可以禁用或自定义它。skyBox: false, // 禁用天空盒背景变为黑色 // 或者使用自定义的星空图 // skyBox: new Cesium.SkyBox({ // sources: { // positiveX: stars/px.jpg, // negativeX: stars/nx.jpg, // positiveY: stars/py.jpg, // negativeY: stars/ny.jpg, // positiveZ: stars/pz.jpg, // negativeZ: stars/nz.jpg // } // }),sceneMode: 初始场景模式。Cesium.SceneMode.SCENE3D是默认的3D球体模式Cesium.SceneMode.SCENE2D是2D平面地图模式Cesium.SceneMode.COLUMBUS_VIEW是2.5D的哥伦布视图模式。fullscreenButton,vrButton,geocoder等这些布尔值选项控制界面右上角各个控件的显示与隐藏。在上文的代码注释中已列出你可以根据需要设置为false来简化界面。4.2 操控相机设定你的观察视角相机viewer.camera控制着我们观察地球的位置和角度。掌握相机操作是进行三维导航的基础。设置初始视角camera.setView(options)是最常用的方法。destination可以是一个Cartesian3三维坐标单位米也可以是一个Rectangle矩形区域。通常我们使用Cesium.Cartesian3.fromDegrees(lon, lat, height)来从经纬度创建坐标其中height是距离椭球体表面的高度米。// 飞到纽约上空1000米处并以45度俯角观看 viewer.camera.setView({ destination: Cesium.Cartesian3.fromDegrees(-74.0, 40.7, 1000.0), orientation: { heading: Cesium.Math.toRadians(0), // 北方向弧度制 pitch: Cesium.Math.toRadians(-45), // 俯角-90度垂直向下 roll: 0.0 // 翻滚角 } });相机动画飞行camera.flyTo(options)会生成一个平滑的动画过渡到目标视角比setView的瞬间跳转体验更好。其参数与setView类似但可以额外设置动画时长duration、飞行路径等。viewer.camera.flyTo({ destination: Cesium.Cartesian3.fromDegrees(116.4, 39.9, 5000), // 飞到北京上空5公里 duration: 3.0 // 飞行时间3秒 });实时监听相机变化你可以监听相机位置的变化用于实现一些交互逻辑比如根据视野范围动态加载数据。viewer.scene.postRender.addEventListener(function() { const position viewer.camera.positionCartographic; const height viewer.camera.positionCartographic.height; const lon Cesium.Math.toDegrees(position.longitude); const lat Cesium.Math.toDegrees(position.latitude); // console.log(经度: ${lon.toFixed(4)}, 纬度: ${lat.toFixed(4)}, 高度: ${height.toFixed(0)}米); });注意事项postRender在每一帧渲染后都会触发不要在此处执行过于耗时的操作否则会影响性能。对于简单的日志输出或状态更新是没问题的。4.3 添加基础数据点、线、面与标签一个空荡荡的地球意义不大。Cesium提供了丰富的Primitive和EntityAPI来添加图形。Entity是更高级的、数据驱动的抽象易于使用Primitive是更底层的图形原语性能更高但更复杂。入门阶段我们先从Entity开始。添加一个点Billboardconst redPoint viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(116.4, 39.9), point: { pixelSize: 10, color: Cesium.Color.RED, outlineColor: Cesium.Color.WHITE, outlineWidth: 2 }, label: { // 可选的标签 text: 北京, font: 14pt Helvetica, style: Cesium.LabelStyle.FILL_AND_OUTLINE, outlineWidth: 2, verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 标签在点的下方 pixelOffset: new Cesium.Cartesian2(0, -20) // 像素偏移 } }); // 让相机飞向这个点 viewer.zoomTo(redPoint);添加一条线Polylineconst blueLine viewer.entities.add({ polyline: { positions: Cesium.Cartesian3.fromDegreesArray([ 116.4, 39.9, // 北京 121.5, 31.2 // 上海 ]), width: 5, material: Cesium.Color.BLUE } });添加一个多边形Polygonconst greenPolygon viewer.entities.add({ polygon: { hierarchy: Cesium.Cartesian3.fromDegreesArray([ 115.0, 40.0, 117.0, 40.0, 117.0, 38.5, 115.0, 38.5 ]), material: Cesium.Color.GREEN.withAlpha(0.5), // 半透明绿色 outline: true, outlineColor: Cesium.Color.BLACK } });添加一个3D模型glTFconst modelEntity viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(116.4, 39.9, 100), // 北京上空100米 model: { uri: ./path/to/your/model.gltf, // 指向你的glTF模型文件 scale: 10.0 // 缩放比例 } });通过这些简单的Entity操作你已经可以在三维地球上标注位置、绘制路径、划定区域甚至放置建筑模型了。viewer.entities是一个EntityCollection你可以通过add、remove、removeAll等方法动态管理所有实体。5. 开发环境搭建与工程化实践当你完成了第一个Demo想要开始一个更正式的项目时将Cesium集成到现代前端工程化工作流中就变得很重要了。这能让你享受模块化、热更新、代码压缩等便利。5.1 使用npm/yarn安装Cesium这是管理Cesium依赖最规范的方式。在你的项目根目录下执行npm install cesium # 或 yarn add cesium安装后Cesium库文件会位于node_modules/cesium/Build/Cesium目录下。5.2 在Webpack/Vite项目中集成Webpack配置要点复制静态资源Cesium的Workers和Assets等资源需要被复制到最终构建的输出目录。可以使用CopyWebpackPlugin。// webpack.config.js const path require(path); const CopyWebpackPlugin require(copy-webpack-plugin); const CesiumSource node_modules/cesium/Source; const CesiumWorkers ../Build/Cesium/Workers; module.exports { // ... 其他配置 plugins: [ new CopyWebpackPlugin({ patterns: [ { from: path.join(CesiumSource, CesiumWorkers), to: Workers }, { from: path.join(CesiumSource, Assets), to: Assets }, { from: path.join(CesiumSource, Widgets), to: Widgets }, { from: path.join(CesiumSource, ThirdParty), to: ThirdParty }, ], }), ], // 告诉Webpack哪些模块是Cesium需要的AMD风格模块不需要解析 amd: { toUrlUndefined: true }, // 解决Cesium多线程Worker的加载问题 node: { // Resolve node module use of fs fs: empty } };设置CESIUM_BASE_URL在你的主入口JS文件中需要根据环境设置资源基础路径。// main.js import * as Cesium from cesium; import cesium/Build/Cesium/Widgets/widgets.css; // 重要设置Cesium静态资源的基础路径 window.CESIUM_BASE_URL /; // 假设资源被复制到了输出根目录 Cesium.Ion.defaultAccessToken your_token; const viewer new Cesium.Viewer(cesiumContainer);Vite配置要点更简单Vite对静态资源的处理更友好。安装cesium后直接在组件或入口文件中引入即可。安装vite-plugin-cesium社区插件非官方但很好用可以简化流程。npm install vite-plugin-cesium -D在vite.config.js中配置import { defineConfig } from vite; import cesium from vite-plugin-cesium; export default defineConfig({ plugins: [cesium()] });在Vue/React组件中直接使用// Vue组件示例 template div idcesiumContainer stylewidth: 100vw; height: 100vh;/div /template script setup import { onMounted } from vue; import * as Cesium from cesium; import cesium/Build/Cesium/Widgets/widgets.css; onMounted(() { Cesium.Ion.defaultAccessToken your_token; const viewer new Cesium.Viewer(cesiumContainer); // ... 你的代码 }); /scriptVite插件会自动处理CESIUM_BASE_URL和静态资源的服务。5.3 性能优化初步考量即使是入门项目也需要有性能意识因为三维渲染非常消耗资源。按需加载数据不要一次性加载全球的高精度数据。使用Cesium.Cesium3DTileset加载3D Tiles数据时它会自动根据视锥体裁剪和细节层次LOD进行流式加载。控制实体数量对于大量静态的点如成千上万个传感器使用Cesium.PointPrimitiveCollection或自定义的PrimitiveAPI会比创建同样数量的Entity性能高得多。使用Web WorkersCesium默认使用Web Workers进行地形和影像瓦片的解码不要禁用这个特性。监控帧率在开发过程中可以开启浏览器的性能监视器或使用viewer.scene.debugShowFramesPerSecond true;在画面上显示实时帧率。保持帧率在60FPS左右为佳低于30FPS就需要考虑优化了。6. 常见问题与排查技巧实录在实际操作中你几乎一定会遇到下面这些问题。这里我把它们和解决方案整理出来你可以像查字典一样使用。6.1 地球一片黑或显示网格现象地球不显示影像只是一个黑色球体或灰色瓦片网格。可能原因及解决未设置或Ion Token错误这是最常见的原因。检查控制台Console是否有关于Ion认证的错误信息。确保Cesium.Ion.defaultAccessToken已正确设置并且该Token在Cesium Ion账户中有效且未过期。网络问题CDN链接失效或本地服务器无法访问Cesium Ion服务。尝试使用不需要Token的离线影像作为测试如TileMapServiceImageryProvider见3.1节代码。资源路径错误仅限本地部署控制台出现大量404错误找不到Workers、Assets下的文件。务必检查并正确设置window.CESIUM_BASE_URL并确保通过HTTP服务器访问页面。6.2 控制台报错 “Cesium is not defined”现象浏览器控制台出现此错误地球无法初始化。可能原因及解决脚本加载顺序问题在你自己调用Cesium对象的脚本执行时Cesium.js库还没有加载完成。确保你的script srcmain.js标签放在引入Cesium.js的标签之后。模块化引入问题如果你使用import * as Cesium from cesium;的方式确保你的构建工具Webpack/Vite已正确配置并且cesium包已安装。6.3 本地运行出现CORS跨域错误现象控制台提示跨域请求被阻止通常发生在直接双击打开index.htmlfile://协议时。解决永远不要使用file://协议。必须使用本地HTTP服务器。使用VS Code Live Server、http-server、serve或任何你熟悉的静态服务器工具。6.4 添加的实体Entity不显示现象代码执行了viewer.entities.add(...)但地图上什么也没出现。排查步骤检查坐标确认你提供的经纬度坐标在地球范围内经度-180到180纬度-90到90。一个常见的错误是经纬度参数顺序弄反Cesium通常是经度, 纬度。检查高度如果height值设置得非常大如默认0而你的点没有设置pixelSize或billboard它可能只是一个无限小的点在远处看不见。确保设置了point.pixelSize或使用billboard。检查控制台错误实体定义可能有语法错误查看控制台是否有JS报错。使用zoomTo调用viewer.zoomTo(entity)或viewer.zoomTo(viewer.entities)让相机飞到实体所在位置。可能实体已经添加只是不在当前视野内。6.5 界面控件或样式错乱现象按钮位置不对或控件样式丢失。可能原因没有正确引入Cesium的CSS文件widgets.css。检查HTML中link标签的路径是否正确以及是否在Cesium.js之前引入。6.6 性能缓慢页面卡顿现象操作地球时感觉不流畅帧率很低。初步优化降低地形细节如果使用了高精度地形可以尝试暂时禁用地形viewer.terrainProvider Cesium.EllipsoidTerrainProvider();看看是否改善。简化影像图层尝试使用低分辨率的影像底图。减少实体数量检查是否在循环中添加了过多实体。对于大量点考虑使用PointPrimitiveCollection。关闭后期处理默认的Viewer可能会开启一些效果可以尝试在创建时配置fxaa: false禁用抗锯齿等。利用浏览器开发者工具的Performance面板进行分析找到性能瓶颈。6.7 如何加载自定义离线数据这是一个进阶但常见的问题。Cesium加载离线数据的关键在于正确配置ImageryProvider或TerrainProvider的URL使其指向你的本地服务器上的瓦片目录。离线影像将你的瓦片数据如TMS或WMTS格式组织好然后使用new Cesium.TileMapServiceImageryProvider({ url: ‘./your_tiles’ })。url指向包含layer.json或tilemapresource.xml的目录。离线地形地形数据通常需要预处理成quantized-mesh格式。你可以使用Cesium官方工具CesiumTerrainBuilder或第三方工具如GDAL来生成。然后使用new Cesium.CesiumTerrainProvider({ url: ‘./your_terrain_tiles’ })加载。踩过这些坑之后你会发现Cesium的入门路径其实非常清晰。从环境搭建到显示地球再到添加数据和集成到工程化项目每一步都有迹可循。关键在于动手实践多写代码多查文档英文官方文档是最权威的多利用浏览器的开发者工具进行调试。当你成功地在自己的网页上让地球旋转起来并放上第一个标记点时那种成就感就是学习技术最好的动力。
返回列表