news 2026/8/2 8:45:53

cesium 中的 KmlDataSource

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cesium 中的 KmlDataSource

KmlDataSource

简介

KmlDataSource是 Cesium 中用于解析 KML / KMZ 文件的数据源类,它实现了DataSource接口。KML(Keyhole Markup Language 2.2)是 Google Earth 常用的地理标注格式,Cesium 解析后会把每一个要素转成Entity(线、点、面、图标等),统一放到entities集合中管理。

它同时支持:

  • kml/ovkml:纯文本的 KML 文件;
  • kmz/ovkmz:zip 压缩包形式的 KML,Cesium 内部会自动解压,包内的图片、图标等相对资源也能一并解析。

基本使用

加载文件(URL)

最简单的方式是直接传一个文件地址,load返回一个 Promise:

viewer.dataSources.add(Cesium.KmlDataSource.load("../../SampleData/facilities.kmz",{camera:viewer.scene.camera,canvas:viewer.scene.canvas,}));

三种数据形态(重点)

load的第一个参数支持三种类型,它们的含义完全不同:

传入类型含义注意事项
stringURL 地址(不是文件内容)传字符串会被当成 URL 去请求,这是最常见报错的原因
Blob二进制文件数据KMZ / ovkmz 压缩包可直接传 Blob,Cesium 会自动判断 zip 并解压
Document已经解析好的 XML 文档适合先用DOMParser校验完 XML 再交给 Cesium
// 1. 字符串(URL)awaitCesium.KmlDataSource.load("/data/xxx.ovkml");// 2. Blob(KMZ / ovkmz)constblob=awaitfetch("/data/xxx.ovkmz").then((r)=>r.blob());constds=awaitCesium.KmlDataSource.load(blob,{sourceUri:"/data/xxx.ovkmz",});// 3. XML Document(ovkml)consttext=await(awaitfetch("/data/xxx.ovkml")).text();constdoc=newDOMParser().parseFromString(text,"application/xml");constds=awaitCesium.KmlDataSource.load(doc,{sourceUri:"/data/xxx.ovkml",});

注意:把 KML 文本字符串直接传给load,会被当成 URL 请求,导致加载失败甚至抛RuntimeError

加载选项 LoadOptions

  • sourceUri:解析 KML 内相对路径(图片、图标等)的基准 URL;
  • clampToGround:几何要素(线、面)是否贴地,默认false
  • screenOverlayContainer:屏幕叠加层(ScreenOverlay)挂载的容器;
  • camera/canvas:KML 的 NetworkLink 等特性需要相机参数时传入viewer.scene.cameraviewer.scene.canvas

挂载到地图

viewer.dataSources.add(ds);// 显示图层viewer.dataSources.remove(ds,false);// 移除显示,false 表示不销毁,可重新加回viewer.dataSources.contains(ds);// 判断图层是否已挂载

解析结果

解析完成后,数据源上可以拿到所有要素和相关信息:

  • ds.entities/ds.entities.values:要素集合,每个要素是一个Entity
  • entity.name:Placemark 的名称(如 YL_58);
  • entity.polyline/entity.polygon/entity.point/entity.billboard:对应的图形对象;
  • entity.parent<MultiGeometry>拆出来的多个 entity 共享同一个 parent(即原 Placemark),可用于把同一条线的高亮整组处理;
  • entity.kmlKmlFeatureData,包含 author、link 等 KML 元数据。

数据源本身还提供事件:

  • errorEvent:解析过程中出错时触发;
  • loadingEvent:开始/结束加载时触发;
  • changedEvent:底层数据变化时触发;
  • unsupportedNodeEvent:遇到不支持的 KML 节点时触发。

修改样式

Cesium 里所有样式字段都是 Property,修改时要用属性类包装:

constnow=Cesium.JulianDate.now();// 读取当前线宽constwidth=entity.polyline.width?.getValue(now);// 修改线宽和颜色entity.polyline.width=newCesium.ConstantProperty(8);entity.polyline.material=newCesium.ColorMaterialProperty(Cesium.Color.fromCssColorString("#ffd400"));// 面的填充 / 描边entity.polygon.material=newCesium.ColorMaterialProperty(Cesium.Color.fromCssColorString("#ffd400").withAlpha(0.45));entity.polygon.outline=newCesium.ConstantProperty(true);entity.polygon.outlineColor=newCesium.ConstantProperty(Cesium.Color.fromCssColorString("#ffd400"));

常见问题

  1. 传字符串报错 / RuntimeError:字符串被当成 URL,而不是文件内容;改为传 Blob 或 Document。
  2. 一条长线显示成一段一段:源数据里<MultiGeometry>把折线拆成了多段<LineString>,每段是一个 entity;可以用entity.parent分组,把同一 Placemark 的段一起高亮。
  3. KMZ 内的图标不显示:要把整个 KMZ Blob 交给 Cesium 解析,而不是手动解压只取doc.kml文本,否则包内相对资源无法解析。

参考资料:

  • KmlDataSource

  • KmlDataSource

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/2 8:45:11

Java Base64图片字符串转File对象:原理、实现与性能优化

1. 项目概述&#xff1a;从Base64字符串到File对象的实战转换 在前后端数据交互、图片上传优化以及本地缓存处理等场景中&#xff0c;我们经常会遇到一个经典需求&#xff1a;如何将前端传来的一串看似天书的Base64图片编码&#xff0c;在Java后端服务中&#xff0c;还原成一个…

作者头像 李华
网站建设 2026/8/2 8:44:22

从传统百数表到数字化练习:一款数学启蒙 App 的设计思考

作为一名教育工作者&#xff0c;同时也关注软件开发技术&#xff0c;我一直在思考一个问题&#xff1a;技术如何真正服务教育场景&#xff1f;过去几年&#xff0c;各类教育工具不断发展。从纸质练习册&#xff0c;到在线课程&#xff0c;再到各种学习 App&#xff0c;学习方式…

作者头像 李华
网站建设 2026/8/2 8:38:26

ScanTailor Advanced:专业文档扫描处理的终极解决方案

ScanTailor Advanced&#xff1a;专业文档扫描处理的终极解决方案 【免费下载链接】scantailor-advanced ScanTailor Advanced is the version that merges the features of the ScanTailor Featured and ScanTailor Enhanced versions, brings new ones and fixes. 项目地址…

作者头像 李华
网站建设 2026/8/2 8:37:05

基于微信小程序的心理咨询预约系统(源码+LW+部署讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/8/2 8:35:04

Zabbix、Prometheus、Open-Falcon三大监控框架深度对比与实战选型指南

1. 监控系统&#xff1a;从“看”到“管”的演进之路 干了这么多年运维和架构&#xff0c;我越来越觉得&#xff0c;监控系统这玩意儿&#xff0c;它早就不是机房角落里那个只会亮红灯的“看门大爷”了。以前我们装个Nagios&#xff0c;配几个Ping和端口检查&#xff0c;收到邮…

作者头像 李华
网站建设 2026/8/2 8:33:33

从MiniQMT到标准化交易系统:个人量化策略升级实战指南

在个人量化交易实践中&#xff0c;MiniQMT 因其轻量、与券商客户端集成度高等特点&#xff0c;一度成为许多开发者快速验证策略的工具。然而&#xff0c;随着其权限的逐步收窄&#xff0c;许多原本依赖其进行自动化交易的个人策略面临失效或功能受限的困境。这并非意味着个人量…

作者头像 李华