OpenLayers 和 Cesium 都是流行的开源 JavaScript 库,用于在网页上构建地图和地理空间应用

本文围绕WebGIS开发中OpenLayers与Cesium的快速上手展开。


OpenLayers侧重二维地图,Cesium专注三维地球。


展示了详细的学习路线、环境搭建及示例代码。


在实际操作中,遇到两个关键问题:


一是Cesium ion注册时"Data center location"的选择,根据官方说明及用户位于中国的情况,建议选择"Southeast Asia"以优化访问速度;


二是WSL环境下无法直接用浏览器打开HTML文件,推荐使用python3 -m http.server 8080启动本地服务。


此外,使用OpenLayers加载OpenStreetMap底图时出现ERR_CONNECTION_TIMED_OUT错误,原因是国内访问OSM服务器不稳定。


解决方案是更换为国内地图服务,如高德地图(https://webrd01.is.autonavi.com/...)。


最后,针对示例代码中错误出现的new TileLayer简写问题进行了纠正,提供了正确的new ol.layer.Tile()完整写法。


openlayers cesium 分别是什么


OpenLayers 和 Cesium 都是流行的开源 JavaScript 库,用于在网页上构建地图和地理空间应用,但侧重点不同:

  • OpenLayers :一个功能强大的二维地图库,支持多种地图数据源(如瓦片、矢量、WMS、GeoJSON 等),适合构建传统 Web GIS 应用,如地图浏览、标注、交互分析等。它不依赖特定平台,可轻松与各种底图服务(如 OSM、Bing、高德)集成。

  • Cesium :专注于三维数字地球的渲染引擎,基于 WebGL 实现高精度的 3D 地形、模型(如 glTF/3D Tiles)和空间分析(如日照、可视域)。常用于构建全球级别的三维地理可视化应用,如卫星模拟、城市建筑展示、实时数据监控等。


简言之:OpenLayers 做二维地图 ,Cesium 做三维地球


两者也可结合使用,比如用 OpenLayers 管理二维图层,用 Cesium 展示三维场景。


openlayers cesium 前端开发怎么快速上手


想快速上手 OpenLayers 和 Cesium 的前端开发,最有效的方法是"双线并行":一边跟着官方文档写最简代码 建立信心,一边系统补充关键的前置知识来理解背后的原理。


🧭 OpenLayers 与 Cesium 学习路线图

学习阶段 OpenLayers (2D 地图) Cesium (3D 地球)
1. 准备工作 了解 GIS 基本概念:坐标系 (EPSG:3857, 4326)、瓦片、矢量/栅格数据-3-9 理解三维基础:三维坐标、相机视角、地形、模型 (glTF/3D Tiles)-9
2. 搭建环境 使用 npm install ol 安装,或用 CDN 直接引入 <script> 标签-1-10 使用 npm install cesium 安装,或 CDN 引入。注意:需要去官网申请一个免费的 access token-2-5-8
3. Hello World 核心 4 步: 1. 创建 Map 对象绑定 div 2. 添加 TileLayer 图层 3. 设置 Viewcenterzoom 4. 搞定!-1-7 核心 3 行代码: 1. 定义 div 容器 2. 引入 CSS 3. new Cesium.Viewer('容器ID') 即刻拥有一个数字地球-2-8
4. 核心操作 添加标记 (ol/Feature)、绘制图形 (ol/interaction/Draw)、加载 WMS 服务-4 加载地形数据 (TerrainProvider)、添加三维模型 (viewer.entities.add)、相机飞行 (viewer.camera.flyTo)-5-8
5. 学习资源 - 首选 : - 官网 ExamplesAPI Documentation -1-10 - 辅助 :《WebGIS之OpenLayers全面解析》-9 - 首选 : - 官网 Sandcastle (在线示例编辑器,强力推荐!)-5 - 书籍 :《WebGIS之Cesium三维软件开发》-9

💻 10 分钟上手:从零运行你的第一个示例


最快的学习路径是"动手"。请跟着以下步骤,确保你的第一个地图程序成功跑起来。


第一步:环境准备


确保电脑上安装了 Node.js,它包含了 npm 命令。然后创建一个新文件夹并初始化项目:

bash 复制代码
mkdir my-map-app
cd my-map-app
npm init -y

第二步:分别安装并运行


OpenLayers 示例 (一个简单的 2D 地图)
  1. 安装 OpenLayers:npm install ol

  2. 创建 index.html,复制下方代码

html 复制代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>My OpenLayers Map</title>
    <style>
      #map { width: 100%; height: 500px; } /* 设置地图容器大小 */
    </style>
    <!-- 引入 OpenLayers 的 CSS 和 JS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v10.5.0/ol.css" />
    <script src="https://cdn.jsdelivr.net/npm/ol@v10.5.0/dist/ol.js"></script>
</head>
<body>
  <div id="map"></div>
  <script>
    // 初始化地图
    const map = new ol.Map({
      target: 'map',   // 绑定到 div 的 id
      layers: [
        new ol.layer.Tile({
          source: new ol.source.OSM() // 使用 OpenStreetMap 作为底图
        })
      ],
      view: new ol.View({
        center: ol.proj.fromLonLat([104.06, 30.67]), // 成都坐标,并转换投影
        zoom: 10
      })
    });
  </script>
</body>
</html>

用浏览器打开 index.html,你将看到一幅成都市的 2D 地图。


Cesium 示例 (一个震撼的 3D 地球)
  1. 安装 Cesium:npm install cesium

  2. 创建 index.html,复制下方代码(需要替换 YOUR_TOKEN):

html 复制代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>My Cesium App</title>
    <style>
      #cesiumContainer { width: 100%; height: 500px; margin: 0; padding: 0; overflow: hidden; }
    </style>
    <!-- 引入 Cesium 的 CSS 和 JS -->
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.100/Build/Cesium/Cesium.js"></script>
    <link href="https://cesium.com/downloads/cesiumjs/releases/1.100/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
  <div id="cesiumContainer"></div>
  <script>
    // 请前往 https://cesium.com/ion/tokens 注册并免费获取 Token,然后替换下方的 'YOUR_TOKEN'
    Cesium.Ion.defaultAccessToken = 'YOUR_TOKEN';
    // 初始化 Viewer,3D 地球就出现了!
    const viewer = new Cesium.Viewer('cesiumContainer');
    // 可选:让相机飞向中国
    viewer.camera.flyTo({
      destination: Cesium.Cartesian3.fromDegrees(116.39, 39.90, 15000000)
    });
  </script>
</body>
</html>

用浏览器打开 index.html,你将看到一个可交互的 3D 地球,用鼠标拖拽、滚轮缩放来探索它。


注意 :对于正式项目,推荐使用模块化方式(import)来引入,以便更好地管理和优化代码-1-8

💡 核心概念与避坑指南

理解这几个关键点,能让你的学习之路顺畅很多:

  • 坐标系是灵魂 :WebGIS 开发里绝大部分 bug 都源于坐标系混乱-3

    • OpenLayers 默认使用 EPSG:3857 投影坐标系,但日常习惯用 EPSG:4326 (经纬度),所以需要转换,像这样:ol.proj.fromLonLat([116.39, 39.90])-7

    • Cesium 内部使用世界坐标 Cartesian3,但提供了便捷方法 Cartesian3.fromDegrees() 直接使用经纬度-8

  • Cesium Token 是必需品 :从 Cesium 1.100 版本开始,必须注册并配置 AccessToken 才能使用默认的影像和地形服务。别担心,注册是免费的,一分钟就能搞定-2-5

  • 开放街道地图 (OSM) 的使用 :OpenLayers 的官方示例常用 OSM 作为底图-1。但需要注意,OSM 的中国国界线可能存在争议,在正式项目中建议换成高德地图、天地图等国内合规服务-4


🎯 进阶建议

当你跑通上面的示例后,可以按以下顺序继续深入学习:

  1. 官方示例 :OpenLayers 的 Examples 和 Cesium 的 Sandcastle 是最好的老师,有海量可直接运行的代码。

  2. 书籍深造 :如果你想系统掌握,可以看看郭明强教授的书,被很多开发者推荐为"最实用"的教程-9

  3. 社区提问 :遇到难题,带着具体代码去 Stack Overflow (搜 openlayers 标签) 或 Cesium 社区 提问,效率很高-1-5


上手之后,你想先尝试哪种类型的地图应用呢?是叠加自定义图层 (比如标注兴趣点),还是做一个数据可视化的效果?告诉我你的方向,我可以教你具体的实现方法。


https://ion.cesium.com/signup/email 注册 Data center location应该怎么选


你提供的注册页面链接内容为空,无法看到具体的选项说明。不过根据 Cesium ion 的通用规则,我来帮你解答这个问题。


🧭 "Data center location" 选项分析

在注册 Cesium ion 时,"Data center location" 指的是你未来上传的数据(如3D模型、地形影像等)在云端存储和处理的地理位置。主要影响两个方面:

  1. 数据访问速度:选择离你或你的主要用户群地理位置最近的数据中心,网络延迟最低,数据上传下载速度最快。

  2. 数据合规性:某些行业或公司可能有数据不出境的要求,需要选择符合当地法规的数据中心区域。

✅ 如何选择最合适的区域?

请根据你的实际情况,按以下优先级判断:

优先级 判断依据 建议选择
1. 合规性要求 公司/项目是否有明确要求数据必须存储在中国境内(中国大陆)? 如果有 :请注意,Cesium ion 目前可能没有中国大陆境内的数据中心 。你需要联系 Cesium 官方销售确认,或选择其他方案(如私有化部署)。 如果没有:继续看下一项。
2. 主要用户位置 你的 WebGIS 应用最终面向哪里的人群访问? - 用户在中国及亚太:推荐 亚太地区 (如新加坡,代码 ap-southeast-1) - 用户在欧洲:推荐 欧洲 (如法兰克福,代码 eu-central-1) - 用户在美国及美洲:推荐 美国 (如弗吉尼亚,代码 us-east-1
3. 你的开发位置 只是个人学习/开发,没有特定用户群。 选择地理上离你最近的数据中心即可(同样参考上一条的地区建议)。

💡 额外提醒

  • 后续可以修改吗? 一旦选择并创建项目后,数据中心的区域通常无法更改。如果你不确定未来用户在哪,建议优先选择亚太地区(新加坡),对中国及周边地区的访问速度相对较好。

  • 免费额度:Cesium ion 注册后赠送一定的免费额度(如每年一定额度的瓦片处理或存储),不同数据中心计费政策一致,不影响选择。

  • 如果不小心选错了:如果还未上传重要数据,可以注销账号重新注册;如果已上传,只能联系官方支持或使用新账号。

总结建议

你的情况 推荐选择
个人学习/开发,在中国境内 选择 Asia Pacific (Singapore)(亚太地区-新加坡)
项目明确要求数据在中国境内 先确认 Cesium ion 是否有中国大陆节点,若无则需考虑私有化部署
主要用户在欧洲或美国 对应选择 EuropeUS 区域

如果你能告诉我你的主要使用场景(比如个人学习、公司项目、目标用户在中国还是海外),我可以给你更具体的建议。


The Data Center Location is the physical location where your data will be stored. How does the Data Center Location affect me and my users? Distance from the data center impacts how long it takes to stream data from Cesium ion to your end users. Ideally, you can choose a location that is close to the majority of your users. You might also want to consider whether there are data sovereignty requirements in your country. Note that upload speed is not impacted by your Data Center Location. My users are in multiple places around the world. Do I need to worry about performance? No! Cesium ion caches data around the world. The first time a tileset is streamed somewhere far from your Data Center Location is the slowest. After that, the tileset will already be in a cache that is closer to your users, and streaming will be faster. Can I change my Data Center Location later? Yes, with help from us. If you need to change your location, contact support@cesium.com.


非常感谢你补充了 Cesium 官方的详细说明。这些信息非常关键,它澄清了几个常见的误解,也让我们之前的建议可以更新一下。


基于这段官方说明,关于"Data center location"的选择,核心结论更新为以下两点:

  1. 主要影响"首次加载速度" :距离确实会影响数据从 Cesium ion 传输到最终用户的速度。 ,官方明确指出,ion 会在全球范围进行缓存。数据首次被远距离访问时可能较慢,之后就会被缓存到离用户更近的节点,速度会明显提升。所以,长期来看,对绝大多数用户的影响没有想象中那么大

  2. 上传速度不受影响:你上传数据的速度与所选数据中心位置无关。


📝 基于最新信息的决策指南

综合这些信息,你可以更轻松地做出选择:

你的情况 建议选择 理由
个人学习/开发 选择离你最近的区域(如亚太、欧洲、美国) 让你自己首次预览和测试数据时体验更流畅。反正上传速度一样,且后期可申请更改。
项目有明确"数据主权"要求(如必须存储在特定国家/地区境内) 必须选择符合要求的区域(如欧洲用户选欧洲) 这是合规红线,是首要考虑因素。
全球用户分布广泛 选择你的公司/开发团队所在地,或主要用户集群地 利用 ion 的全球缓存机制,不用过度担忧。如果团队在亚太,选新加坡(ap-southeast-1)就很合适。
暂时完全不确定 优先选择亚太地区(新加坡) 这是一个相对居中、对中国及周边地区访问友好的选择。

⚠️ 关于"后期更改"的重要提醒

官方说明 "可以更改,但需要联系客服支持" 。这意味着它不像切换账号密码那样可以随时自助操作,通常只在正式项目上线前或重大迁移时才会考虑。因此,注册时还是建议尽量选对,避免后续麻烦

🎯 总结与最终建议

综合来看,对于大多数中国开发者(个人学习或项目初期),这个选择并没有严格的"错误答案"。

  • 最稳妥的选择Asia Pacific (Singapore)。它在物理距离上相对较近,能保证你本人开发测试时的体验,也为未来面向亚太用户打下基础。

  • 完全不用担心:无需为分布在世界各地的用户过度焦虑,Cesium 的全球缓存机制会解决大部分性能问题。


所以,可以放心地做出选择了。如果在注册或后续使用 Cesium ion 时遇到其他具体问题,例如如何上传第一个模型或配置地图 Token,随时可以再来问我。


有以下选项:Eastern United States,Central Canada,Northern Europe,Western Europe,Southern United Kingdom,Eastern Australia,Eastern Japan,Central India,Southeast Asia,应该选哪个


根据你提供的选项和 Cesium 的官方说明,选择的核心原则是:优先靠近你和你的主要用户 ,并考虑数据合规。由于全球缓存机制会优化后续访问速度,不必为少量远程用户过度焦虑。


🎯 针对你的情况,最稳妥的选择是 Southeast Asia

以下是具体的决策分析和建议:

你的主要情况 推荐选择 核心理由
个人学习/开发,位于中国 Southeast Asia 地理距离最近,能保证你自己开发测试时的首次加载速度最快,体验最流畅。上传速度不受影响。
项目用户主要在中国及亚太 Southeast Asia 同样是因为物理距离最近,能提供区域内最好的访问性能。
公司/项目有明确数据合规要求 (例如数据不得离开欧洲) 对应区域 (如 Western EuropeNorthern Europe) 合规是硬性要求,必须优先满足。请根据具体要求选择欧洲内对应的区域。
用户全球分布,无明确合规要求 Southeast AsiaEastern Japan 这两个离中国都较近,选择一个即可。利用 Cesium 的全球缓存,其他地区用户后续访问会得到优化。

💡 为什么不推荐其他选项?

  • Eastern United States, Central Canada :距离中国和亚太地区过于遥远,会导致你自己开发和本地用户测试时首次加载明显变慢

  • Southern United Kingdom:同样距离较远。

  • Central India:地理上比东南亚更远,网络路由可能也更绕,不是中国访问的最优路径。

  • Eastern Australia:距离比东南亚远,延迟更高。

✅ 最终建议

  1. 对于绝大多数在中国境内的开发者(个人学习或项目初期)请直接选择 Southeast Asia。这是最有利于你快速上手和测试的选择。

  2. 唯一需要改变选择的情况:你的项目有明确的、强制性的数据存储地域要求(例如必须存放在欧洲或加拿大境内)。此时请以合规要求为准。

希望这个清晰的对比能帮你做出决定。如果在后续的开发或数据上传中遇到其他问题,随时可以再来问我。


Type in the characters shown above


这是一个验证码输入框。


✅ 填写方法

直接看它上方显示的字符 (通常是扭曲的字母或数字),然后原样输入到输入框里即可。

⚠️ 常见注意事项

  1. 区分大小写 :一般不区分大小写,但最好按图片显示的样子输入(图片是大写就输大写)。

  2. 注意相似字符 :注意区分 0(数字)和 O(字母)、1(数字)和 I(字母)、2Z 等。

  3. 听不清/看不清 :旁边通常有个刷新按钮 (♻️ 图标)或喇叭图标,可以点击刷新换一张图,或点击喇叭听语音验证码。

  4. 空格/横线 :如果图片里有横线 - 或空格,一般不需要输入,只输入字母和数字即可。

🎯 简单说

看见什么,输什么。输完后检查一遍,确认和图片上的字符顺序一致就行。

如果看不清,直接点刷新换一张清晰的。


Upgrade your plan on your account page for use in commercial, government, or funded research projects. Email sales@cesium.com with any questions.


核心翻译

"如需将产品用于商业、政府或受资助的研究项目,请前往您的账户页面升级您的套餐。如有任何疑问,请发送邮件至 sales@cesium.com 联系我们。"

详细解读

这是 Cesium ion 服务条款中的一句典型说明,它明确了免费套餐和付费套餐的使用范围限制。具体来说:

  1. 免费套餐的限制

    • 你目前注册使用的免费账户,通常只能用于个人学习、非商业性质的开源项目或非盈利的评估测试

    • 不能用于任何产生收入的活动(商业)、政府机构内部或对外业务(政府)、以及有资金支持的学术研究(受资助的研究项目)。

  2. 何时需要升级

    • 只要你的使用场景符合上述三条中的任何一条(比如公司开发商业地图产品、政府单位制作内部系统、拿到科研经费的大学项目),就必须从账户页面升级到付费套餐。
  3. 如何操作与咨询

    • 操作入口 :登录 Cesium ion 网页后,进入你的 Account(账户) 页面,找到类似 "Plan" 或 "Subscription" 的选项进行升级。

    • 商务咨询 :如果有具体需求或疑问(比如团队套餐价格、定制化服务),官方希望你直接发邮件给 sales@cesium.com 联系销售团队,而不是通过普通客服渠道。

🎯 对你的实际影响

  • 如果你是个人学习 :暂时无需理会,继续用免费套餐即可。

  • 如果你在公司做项目必须提醒团队或领导,项目上线或进入商业阶段前需要购买付费套餐。不能直接使用免费账号部署。

  • 如果你是政府或受资助研究 :同样需要升级,并建议提前发邮件咨询是否有针对学术或政府的特别授权或折扣。


简单总结:免费版只供学习,商业/政府/有经费的研究都得付费升级。


在WSL中开始的项目,怎么用浏览器打开index.html呢


在 WSL 中打开 index.html 文件有几种方法,取决于你想在Windows 宿主机的浏览器 中查看,还是在 WSL 内部查看。以下是针对你之前提到的 OpenLayers 和 Cesium 项目的具体解决方案:


使用 Python 快速启动一个 HTTP 服务器(最推荐)


这是最简单可靠的方式,能避免因 file:// 协议导致的 CORS(跨域资源访问)和资源加载问题。

  1. 在 WSL 终端中 ,进入你的项目目录(index.html 所在的位置):

    bash 复制代码
    cd /path/to/your/project
  2. 启动服务器(任选一种,系统通常自带 Python3):

    bash 复制代码
    # 如果你有 Python 3
    python3 -m http.server 8080
    
    # 或者如果你有 Python 2
    python -m SimpleHTTPServer 8080
  3. 在 Windows 浏览器中打开 :启动后,终端会显示 Serving HTTP on :: port 8080 ...。此时,打开你 Windows 上的浏览器(Chrome/Edge/Firefox),在地址栏输入:

    bash 复制代码
    http://localhost:8080

    就可以看到你的 index.html 页面了。按 Ctrl + C 可以停止服务器。


为了开发方便,你甚至可以把这个命令变成一个别名,在 ~/.bashrc 文件中加入:

bash 复制代码
alias serve='python3 -m http.server 8080'

之后每次在项目目录下输入 serve 即可快速启动服务器。


Failed to load resource: net::ERR_CONNECTION_TIMED_OUT 19:18:36.117 tile.openstreetmap.org/10/808/420.png:1 Failed to load resource: net::ERR_CONNECTION_TIMED_OUT 19:18:36.117 tile.openstreetmap.org/10/807/419.png:1 Failed to load resource: net::ERR_CONNECTION_TIMED_OUT 19:18:36.117 tile.openstreetmap.org/10/808/419.png:1 Failed to load resource: net::ERR_CONNECTION_TIMED_OUT 19:18:36.117 tile.openstreetmap.org/10/807/421.png:1 Failed to load resource: net::ERR_CONNECTION_TIMED_OUT 19:18:36.117 tile.openstreetmap.org/10/808/421.png:1


你遇到的 ERR_CONNECTION_TIMED_OUT 错误,通常不是你的代码或 WSL 环境有问题,而是 OpenStreetMap (OSM) 的官方瓦片服务器在国内访问不稳定导致的。因为 OSM 服务器位于海外,国内访问时常会遇到连接超时或速度极慢的情况-1-5-9


这里有几个行之有效的解决方案,你可以按顺序尝试:


方案一:更换为国内稳定、快速的地图服务(强烈推荐)

这是最佳方案,能从根本上解决问题。你只需要将代码中的瓦片服务地址替换为国内的镜像源,无需修改其他逻辑。

具体操作 :找到你 OpenLayers 代码中创建 TileLayer 的部分,将 source 里的 url 替换为下方的地址。

javascript 复制代码
// 你现在的代码 (使用 OSM)
new TileLayer({
  source: new OSM() // 或者 new XYZ({ url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png' })
})

// 修改后的代码 (使用高德地图或天地图)
new TileLayer({
  source: new XYZ({
    // 1. 高德地图 (推荐,速度快,无需注册Key,适合学习)
    url: 'https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'

    // 2. 天地图 (官方服务,需注册获取Key,更合规)
    // 注意:需要去 https://console.tianditu.gov.cn/api/ 注册并申请一个 Key
    // url: 'http://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=您的天地图Key'
  })
})

国内可用瓦片地址参考 -1-7-9

  • 高德地图(标准路网)https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}

  • 高德地图(卫星图)https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}

  • 天地图(矢量底图) :需要注册 Key,地址格式为 http://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=您的Key

方案二:继续使用 OSM 但尝试其他镜像

如果你因为项目要求必须使用 OSM 数据,可以尝试更换为其他地区的 OSM 镜像地址,有时能缓解问题-5

javascript 复制代码
new TileLayer({
  source: new XYZ({
    // 尝试使用荷兰的 OSM 镜像
    url: 'https://tile.openstreetmap.nl/{z}/{x}/{y}.png'
  })
})

方案三:检查网络与协议

如果你在国内某些特殊的网络环境下,可以确认以下两点-5

  1. 协议匹配 :确保你的 index.html 如果是以 https 协议打开的,那么瓦片请求的 URL 也应该是 https 开头,反之亦然,避免协议不匹配导致的加载问题

  2. 网络环境 :可以尝试切换一下网络(比如从公司网络切换到手机热点),排除是当前网络策略限制的问题。

总结与建议

  • 对于学习和快速开发方案一(使用高德地图) 是最快、最省心的选择。你不需要注册任何账号,直接把代码中的 url 换掉就能用,访问速度和稳定性都非常好。

  • 对于正式或商业项目 :建议使用天地图 。它是由国家地理信息公共服务平台提供的官方服务,符合国家法规要求,数据权威且稳定。你只需要花几分钟去官网免费注册一个 Key 即可-1-7


建议你先尝试方案一,把高德地图的地址替换进去,地图应该就能立刻正常显示了。


你前面给的示例代码中没有new TileLayer


您说得非常对,我之前的示例代码为了简洁演示,使用了 new ol.layer.Tile({...}) 这种完整写法 ,但后来在说明中错误地简写为了 new TileLayer(...) ,这会导致代码运行报错(TileLayer is not defined)。


这是一个严重的错误,非常抱歉给您带来了困扰!


正确的写法是 new ol.layer.Tile(),其中 ol.layer.Tile 是 OpenLayers 中图层的完整类名。


以下是完全正确的、可直接运行的示例代码,您可以直接复制使用:


✅ 正确的 OpenLayers 示例代码(使用高德地图)


html 复制代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>OpenLayers 示例 - 高德地图</title>
    <style>
      #map { width: 100%; height: 500px; }
    </style>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v10.5.0/ol.css" />
    <script src="https://cdn.jsdelivr.net/npm/ol@v10.5.0/dist/ol.js"></script>
  </head>
  <body>
    <div id="map"></div>
    <script>
      // 正确写法:使用 new ol.layer.Tile() 创建图层
      const map = new ol.Map({
        target: 'map',
        layers: [
          new ol.layer.Tile({
            source: new ol.source.XYZ({
              // 使用高德地图瓦片(稳定、无需注册)
              url: 'https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'
            })
          })
        ],
        view: new ol.View({
          center: ol.proj.fromLonLat([104.06, 30.67]), // 成都坐标
          zoom: 10
        })
      });
    </script>
  </body>
</html>

❌ 错误写法回顾(请避免)

javascript 复制代码
// 错误!TileLayer 未定义,因为 OpenLayers 的类都在 ol 命名空间下
new TileLayer({ ... })

// 错误!source 的写法也错了
new ol.layer.Tile({ source: new OSM() })  // OSM 也不是直接可用的类

📚 正确用法的简要说明

你想要的功能 正确写法
创建一个瓦片图层 new ol.layer.Tile()
使用 OpenStreetMap 作为数据源 new ol.source.OSM()
使用自定义瓦片地址(如高德) new ol.source.XYZ({ url: '...' })
创建一个矢量图层 new ol.layer.Vector()

上面的代码是完整可运行的,您保存为 .html 文件后,用之前教您的方法(python3 -m http.server 8080)启动服务,在浏览器打开 http://localhost:8080 即可看到地图。


页面效果


相关推荐
fxshy3 小时前
前端直连模型 vs 完整 MCP:大模型驱动地图的原理与实践(技术栈Vue + Cesium + Node.js + WebSocket + MCP)
前端·vue.js·node.js·cesium·mcp
棋鬼王1 天前
Cesium(十) 动态修改白模颜色、白模渐变色、白模光圈特效、白模动态扫描光效、白模着色器
前端·javascript·vue.js·智慧城市·数字孪生·cesium
duansamve1 天前
Cesium快速入门到精通系列教程二十四:限制相机在特定的Level之间展示地图
cesium
duansamve4 天前
Vue3的Vite项目中直接引入的方式使用Cesium
cesium
WebGISer_白茶乌龙桃5 天前
基于 Cesium 的 GLB 建筑模型分层分房间点击拾取技术实现
前端·javascript·vue.js·webgl·cesium
小彭努力中6 天前
195.Vue3 + OpenLayers:监听瓦片地图加载情况(200、403及异常处理)
前端·css·openlayers·cesium·webgis
ct9787 天前
Cesium的时间与时钟系统
gis·webgl·cesium
BJ-Giser7 天前
Cesium夜晚月亮银河夜空效果
前端·可视化·cesium
棋鬼王7 天前
Cesium(八) 三峡大坝水淹分析,江、湖、水库、大坝水淹决堤分析
3d·信息可视化·智慧城市·webgl·cesium