Web地图服务开发知识-- 3D 地图开发

Web地图服务开发知识-- 3D 地图开发

其实 3D 地图没那么玄乎,本质上就是在 2D 地图的基础上多了 “高程数据”,有兴趣的同学只需要简单几步就可以实现一个简单的 3D 地图应用。总的来说,3D 地图 = 2D 地图(卫星或者道路瓦片) + 高程数据(DEM / 高程瓦片)+ 3D 渲染(模型 / gltf)。本文会围绕“3D UI 渲染工具”和“高程数据获取”两大块展开。

一、3D 地图的核心内容

  • 3D 地形:每个地方的海拔起伏,配合卫星图会非常形象,是 3D 地图必备的能力。图示:
  • 3D 建筑:建筑通常通过形状和高度来描述,但数量会比较多。OSM 维护了全球的 3D 建筑数据,由全球的相关爱好者提供,目前通过 Cesium 的 3D 瓦片服务暴露出来。严格来说建筑也可以算到 3D 物体里面,但实际情况是建筑由于数据量大且是静态的,所以通常会有单独的服务来维护建筑数据,客户端渲染的时候也会有一个单独的建筑层,按需局部加载和渲染。图示:
  • 3D 物体:比如移动的汽车、飞机等,数据一般需要自己设计或者从其他渠道获取

二、3D 地图核心数据

1. DEM(数字高程模型)

说白了就是地形的 “数字身高表”。DEM 描述了每 30 米(或者其他精度)间隔的点的海拔数据,是 3D 地形渲染的 “核心原料”。

2. 高程瓦片

DEM 数据是完整的 “大地图”,直接加载会卡死浏览器,所以需要像切蛋糕一样切成小块 —— 这就是高程瓦片。它和 2D 地图的图片瓦片原理一样,按缩放级别分割,加载时只拉取当前视野需要的瓦片,保证加载速度。不同工具的瓦片编码方式不同。高程瓦片比较常用的有3种:

对比维度
OGC 3D Tiles
Cesium Terrain(.terrain 格式)
Mapbox 高程数据(Terrain RGB)
核心属性
OGC 国际标准3D 通用容器,除了地形还支持 3D 建筑等其他数据
CesiumJS、ArcGIS Maps SDK、SuperMap iClient都支持,Three.js/OpenLayers 需插件
Cesium 社区事实标准
仅聚焦地形渲染
Cesium、baidu、天地图支持
Mapbox 专属方案
数据格式
二进制
二进制
图片编码
高程=R×256²+G×256+B-10000
坐标系支持
全主流坐标系(WGS84、Web 墨卡托、CGCS2000 等),支持自定义投影,国内 BD09/GCJ02 可适配
主要适配 Web 墨卡托,可通过自定义 TilingScheme 扩展至 WGS84/CGCS2000,国内坐标系需二次适配
仅原生支持 Web 墨卡托(EPSG:3857),其他坐标系需手动转换高程数据,国内适配成本高

3. glTF

3D 模型的 “通用格式”,就像图片里的 JPG 一样普及。不管是建筑模型、车辆模型还是景观模型,大多会导出成 glTF 格式,方便在 Web 端加载渲染。几乎所有主流 3D 地图工具都支持这个格式,是 3D 物体的核心载体。

三、主流 3D 地图开发工具

1. 高德地图 JS API(商用付费)

  • 特点:
    • 城市建筑 “真 3D”,开箱即用的 3D 城市地图
    • 自带国内 3d building 数据
    • 支持 3D 物体模型
  • 缺点:目前没找到 3D 地形相关能力。

2. 百度地图 JS API Three(商用付费)

  • 特点:
    • 支持 3D 建筑
    • 自带国内 3d building 数据
    • 支持 3D 物体模型
    • 提供了 CesiumTerrainTileProvider 适配器,能读取 Cesium 的高程数据(不知道是百度自己实现的还是在 sdk 中集成了Cesium)。
  • 优势:兼容性 Cesium 数据。
  • 缺点:没有自己的高程数据服务;UI 能力上和原生 Cesium 有差距。

3. Google Map

能力上比百度好,但国内访问受限,不多赘述。

4. 天地图(免费)

  • 特点:
    • 有自己的 3D 地图 SDK
    • 有在线高程瓦片服务。
  • 优势:目前国内少有的在线高程瓦片服务。
  • 缺点:SDK是基于 Cesium 而来,但是目前仅支持 Cesium 1.108,导致它的 SDK 和高程数据服务和最新版本的 Cesium 都不兼容。

5. 超图(SuperMap iClient,收费)

  • 特点:国产 GIS “全能选手”,源自 Cesium,但在国内做的确实不错
    • 原生支持 3D 地形、3D 建筑、3D 模型渲染
    • 自研高程瓦片服务,支持 OGC 3D Tiles、glTF 等主流格式
    • 深度兼容 Cesium(SuperMap iClient for Cesium)
    • 支持 OGC 3D Tiles、glTF 等主流格式
  • 缺点:非原创;有费用。

6. OpenLayers(开源、免费)

  • 特点:
    • 能和 Cesium JS 集成实现 3D 地形
    • 能和 Three.js 集成实现 3D 物体
  • 优势:允许用户轻松从传统的平面地图视图过渡到三维地球视图,并保持数据同步。2D 开发经验可复用,适合从 2D 项目迁移到 3D 的场景。
  • 缺点:没有 3D 建筑的能力,只能通过 3D 地形来实现,非原生支持 3D,整体能力上和原生有出入。

7. Mapbox GL JS(开源、部分免费)

  • 特点:
    • 支持显示 3D 建筑
    • 通过 Three.js 渲染 3D 物体
    • 自研的 Mapbox Terrain RGB 高程数据服务
    • 自有 3D building 数据
  • 优势:2D、3D 都自有 SDK 和数据。
  • 缺点:非专注于 3D,有费用。

8. Cesium(SDK开源、数据服务收费)

  • 特点:3D 地图领域 “王者”,数据和 SDK 都是行业顶流。SDK 是众多后来者的“源”,比如超图、天地图;OGC 3D Tiles 标准的发起者。
    • 原生支持 3D 地形、3D 建筑、3D 物体
    • 自有高程数据服务和 3D buinding 服务
    • 是全球唯一官方 OSM 3D Tiles 托管服务。
  • 优势:功能最全,定制化能力强。
  • 缺点:学习成本略高,国内访问慢,使用数据服务有费用。

9. 其他工具

  • Unity:
    • 不是传统 Web 地图工具,但国内用得很多(比如王者荣耀的地图就是 Unity 做的)。
    • 开发语言是 C#,不能直接用 JS 控制,但有 API 可与 JS 通讯。付费软件。
    • 适合做局部、高精度的定制 3D 地图。
  • HT for Web:
    • 定制的 3D 工具,不适合地图类的开发,适合单个或若干 3D 物体的渲染和交互
    • 但价格贵(单个 SDK 6 万)
  • Three.js:
    • 3D 物体渲染 “基础库”
    • 适合单个或若干 3D 物体的渲染和交互

四、选型建议

  1. 从能力上来说,首选 Cesium;
  2. 如果需要考虑 2D 3D 切换,考虑 Mapbox 或者 OpenLayers;
  3. 如果是局部地图或者独立的 3D 模型,考虑 Unity、HT、Three.js。

五、高程数据获取

前面聊的工具本身大多免费,但高程数据服务除了天地图,基本都要收费;而天地图又卡在版本过旧(仅兼容 Cesium 1.108)的问题上。如果想避开版本坑,或需要私有化部署高程数据,分享实测可用的方案:

1. 高程数据来源

数据源
地址
核心特点
SRTM 官网
覆盖全球高程数据,支持局部下载,精度 30 米,下载格式为 TIFF
bigemaphttp://www.bigemap.com/reader/hcontour/ecd/工具收费(约3千)
地理空间数据云
精度可选 30 米 / 90 米,缺点是无全球 / 全国整体数据,适合局部项目
中科图新(参考)
收费数据源

2. TIFF 转 Cesium 可用的 Terrain 高程瓦片

拿到 TIFF 格式的高程数据后,需要转换成 Cesium 支持的 Terrain 高程瓦片:

  1. 下载 CesiumLab(仅 Windows 版本);
  2. 或者 SuperMap iDesktop(收费);
  3. 导入 TIFF 数据,选择转换成 Cesium Terrain 格式的高程瓦片;
  4. 全国 30 米精度的 TIFF 数据约 4GB,转换耗时较长(实测 10 小时以上)

3. 私有化部署

转换后的 Terrain 瓦片是大量小文件,无需复杂配置:

  1. 把瓦片文件放到 Nginx 服务器指定目录;
  2. 配置 Nginx 暴露 HTTP 服务(只需开启静态文件访问);
  3. 客户端 SDK 工具直接调用该 HTTP 地址。

希望这篇攻略能帮大家少踩坑,有其他工具使用经验的小伙伴,也欢迎在评论区交流~

最后,我会继续写一些文章来介绍这些内容:

Read more

一、FPGA到底是什么???(一篇文章让你明明白白)

一句话概括 FPGA(现场可编程门阵列) 是一块可以通过编程来“变成”特定功能数字电路的芯片。它不像CPU或GPU那样有固定的硬件结构,而是可以根据你的需求,被配置成处理器、通信接口、控制器,甚至是整个片上系统。 一个生动的比喻:乐高积木 vs. 成品玩具 * CPU(中央处理器):就像一个工厂里生产好的玩具机器人。它的功能是固定的,你只能通过软件(比如按不同的按钮)来指挥它做预设好的动作(走路、跳舞),但你无法改变它的机械结构。 * ASIC(专用集成电路):就像一个为某个特定任务(比如只会翻跟头)而专门设计和铸造的金属模型。性能极好,成本低(量产时),但一旦制造出来,功能就永远无法改变。 * FPGA:就像一盒万能乐高积木。它提供了大量基本的逻辑单元(逻辑门、触发器)、连线和接口模块。你可以通过“编程”(相当于按照图纸搭建乐高)将这些基本模块连接起来,构建出你想要的任何数字系统——可以今天搭成一个CPU,明天拆了重新搭成一个音乐播放器。 “现场可编程”

HarmonyOS6 底部导航栏组件 rc_concave_tabbar 使用指南

HarmonyOS6 底部导航栏组件 rc_concave_tabbar 使用指南

文章目录 * 前言 * 组件特性 * 适用场景 * 使用说明 * 安装组件 * 安装步骤 * 步骤一:引入相关依赖 * 步骤二:创建菜单数据 * 步骤三:使用导航组件 * 运行效果 * 参数介绍 * TabsConcaveCircle 组件参数 * TabMenusInterfaceIRequired 菜单项配置 * 进阶使用 * 自定义单个菜单项颜色 * 调整动画速度 * 自定义高度和颜色 * 注意事项 * 总结 前言 rc_concave_tabbar 是一个功能强大、样式精美的 HarmonyOS 底部导航栏组件库,提供凹陷圆形动画效果样式,适用于多种场景。本篇将介绍 rc_concave_tabbar 的使用方法以及其相关的设计理念。 组件特性 * 流畅动画:支持流畅的凹陷圆形切换动画效果 * 高度定制:支持自定义背景色、字体颜色、高度等多种样式配置 * 灵活配置:支持全局配置和单项配置,满足不同场景需求

【FPGA】Vivado 保姆级安装教程 | 从官网下载安装包开始到安装完毕 | 每步都有详细截图说明 | 支持无脑跟装

【FPGA】Vivado 保姆级安装教程 | 从官网下载安装包开始到安装完毕 | 每步都有详细截图说明 | 支持无脑跟装

安装包下载:Xilinx_Vivado Download Link(下好后可直接安装) 目录 (有安装包后,可直接跳转至 Step5,免得去官网下了,比较麻烦) Step1:进入官网 Step2:注册账号 Step3:进入下载页面 Step4:下载安装包 Step5:安装 Step6:等待软件安装完成 安装完成 Step1:进入官网 ① 我们可以选择在 XILINX 官网下载其公司旗下的产品 Vivado 🔍 官网地址:www.xilinx.com           (英文)www.china.xilinx.com  (官方中文网站) 👉 点击直达:Xilinx - Adaptable. Intelligent | together we advance_    (英文)

OpenClaw配置Bot接入飞书机器人+Kimi2.5

OpenClaw配置Bot接入飞书机器人+Kimi2.5

上一篇文章写了Ubuntu_24.04下安装OpenClaw的过程,这篇文档记录一下接入飞书机器+Kimi2.5。 准备工作 飞书 创建飞书机器人 访问飞书开放平台:https://open.feishu.cn/app,点击创建应用: 填写应用名称和描述后就直接创建: 复制App ID 和 App Secret 创建成功后,在“凭证与基础信息”中找到 App ID 和 App Secret,把这2个信息复制记录下来,后面需要配置到openclaw中 配置权限 点击【权限管理】→【开通权限】 或使用【批量导入/导出权限】,选择导入,输入以下内容,如下图 点击【下一步,确认新增权限】即可开通所需要的权限。 配置事件与回调 说明:这一步的配置需要先讲AppId和AppSecret配置到openclaw成功之后再设置订阅方式,