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

从登录页实战到 XSS 防御:Web 前端安全入门全攻略

在 Web 开发中,前端不仅是用户交互的窗口,更是安全防护的第一道防线。很多开发者误以为 "安全是后端的事",却忽略了前端代码中的漏洞可能成为攻击者的突破口。本文结合实战案例,从 HTML 结构搭建、JavaScript 逻辑实现到 CSS 美化,系统梳理前端基础知识点,并深入解析最常见的前端安全威胁 ——XSS 注入,帮助开发者构建 "美观 + 安全" 的前端应用。 一、HTML:搭建安全合规的页面骨架 HTML 作为网页的 "骨架",定义了内容结构和数据传输方式,其设计是否合规直接影响后续安全防护的基础。核心要抓住 "语义化标签 + 安全属性配置" 两大关键点。 1. 核心概念与安全场景 * 标签语义化:使用<h2&

为了结合后端而学习前端的学习日志(1)——纯CSS静态卡片案例

为了结合后端而学习前端的学习日志(1)——纯CSS静态卡片案例

前端设计专栏 使用纯CSS创建简洁名片卡片的学习实践 在这篇技术博客中,我将分享我的前端学习过程,如何使用纯HTML和CSS创建一个简洁美观的名片式卡片,就像我博客首页展示的那样。这种卡片设计非常适合作为个人简介、产品展示或团队成员介绍。 源码展示 <!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>纯CSS名片卡片</title><style&

前端小案例——网页井字棋

前端小案例——网页井字棋

前言:我们在学习完了HTML、CSS和JavaScript之后,就会想着使用这三个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——网页井字棋。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-ZEEKLOG博客 目录 写在前面         ——该案例的全部代码已经放在文章末尾,有兴趣的读者可以到最后将全部代码复制到自己的编译器上运行,感受一下井字棋案例的最终效果!!! ——首先先让我们了解一下我们需要了解的前置知识: 1.HTML骨架 2.CSS装饰 1. 引入字体和全局样式 2.设置 body 样式 3 设置 .wrapper 样式 4.设置 .current-status 和其中的元素样式  5.设置 board 和 .cell 样式 6.鼠标悬浮时的图片效果 7.设置 game-end-overlay 样式 8 设置 .winning-message 样式 9.

如何彻底释放LG WebOS电视潜能:第三方应用完全指南

智能电视用户的新选择 【免费下载链接】webos-homebrew-channelUnofficial webOS TV homebrew store and root-related tooling 项目地址: https://gitcode.com/gh_mirrors/we/webos-homebrew-channel 你是否曾对LG WebOS智能电视的官方应用商店感到失望?应用数量有限、功能单一、无法安装第三方工具...这些问题困扰着无数智能设备用户。传统的官方渠道限制了电视的真正潜力,让价值数千元的智能设备变成了"智能"的摆设。 WebOS Homebrew Channel正是为解决这些问题而生。作为非官方的应用商店,它打破了LG WebOS智能电视的应用安装限制,让你能够自由安装各种第三方应用程序,真正释放智能电视的全部潜能。 核心功能解析:为什么选择Homebrew Channel 独立应用仓库系统 WebOS Homebrew Channel提供了一个完全独立的WebOS软件包仓库,支持家庭酿造应用的发现、安装和更新。更重要的是,它支持多个外部仓库,