KMZ格式详解,javascript写入读取KMZ示例

news2024/12/29 8:37:52

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。

No.内容链接
1Openlayers 【入门教程】 - 【源代码+示例300+】
2Leaflet 【入门教程】 - 【源代码+图文示例 150+】
3Cesium 【入门教程】 - 【源代码+图文示例200+】
4MapboxGL【入门教程】 - 【源代码+图文示例150+】
5前端就业宝典 【面试题+详细答案 1000+】

在这里插入图片描述

文章目录

    • 一、KMZ 格式的基本结构
    • 二、KMZ 格式GIS实战示例
      • 1、vue+leaflet 上传KMZ文件,并在map上显示
      • 2、vue+openlayers上传KMZ文件并在map上解析显示
      • 3、cesium加载kmz文件,显示图形
    • 三、javascript 创建和读取 KMZ 文件
      • 1、安装所需的库
      • 2、写入 KMZ 文件
      • 3、读取 KMZ 文件


KMZ 是一种压缩的 KML 文件格式,它使用 ZIP 压缩算法将一个或多个 KML 文件和相关的多媒体资源(如图像、图标等)打包到一个 ZIP 文件中。KMZ 文件可以在 Google Earth 和其他支持 KMZ 格式的地理信息系统软件中打开。

一、KMZ 格式的基本结构

KMZ 文件本质上是一个 ZIP 文件,其中包含一个或多个 KML 文件和可能的附加资源文件。KMZ 文件可以包含以下组件:

  1. kml文件:主 KML 文件,描述地理信息。
  2. 图像文件:与 KML 文件关联的图像文件,如地标图标。
  3. 其他资源:其他多媒体资源,如音频或视频文件。

二、KMZ 格式GIS实战示例

1、vue+leaflet 上传KMZ文件,并在map上显示

https://dajianshi.blog.csdn.net/article/details/129024175

在这里插入图片描述

2、vue+openlayers上传KMZ文件并在map上解析显示

https://dajianshi.blog.csdn.net/article/details/126280496

在这里插入图片描述

3、cesium加载kmz文件,显示图形

https://dajianshi.blog.csdn.net/article/details/130018250
在这里插入图片描述

三、javascript 创建和读取 KMZ 文件

为了创建和读取 KMZ 文件,我们需要使用 Node.js 并安装一些额外的库,例如 adm-zip 用于处理 ZIP 文件,以及 xml-jsxml2js 用于处理 KML 文件。

1、安装所需的库

首先确保你已经安装了 Node.js 和 npm,然后运行以下命令来安装必要的库:

npm install adm-zip xml-js xml2js

2、写入 KMZ 文件

下面是一个简单的示例,展示如何创建一个包含 KML 文件的 KMZ 文件。

const fs = require('fs');
const AdmZip = require('adm-zip');
const xmlBuilder = require('xml-js');

// 创建 KML 数据
const kmlData = {
  "kml": {
    "@_xmlns": "http://www.opengis.net/kml/2.2",
    "Document": {
      "name": "My KML Document",
      "Placemark": {
        "name": "Example Point",
        "description": "A simple point",
        "Point": {
          "coordinates": "-122.0822035,37.4222898,0"
        }
      }
    }
  }
};

// 将 KML 数据转换为 XML 字符串
const options = { compact: true, spaces: 4 };
const kmlXml = xmlBuilder.js2xml(kmlData, options);

// 创建 KMZ 文件
const zip = new AdmZip();

// 添加 KML 文件到 ZIP
zip.addFile('example.kml', Buffer.from(kmlXml));

// 可选:添加其他文件,如图像
// zip.addLocalFile('icon.png');

// 写入 KMZ 文件
zip.writeZip('example.kmz');

console.log('KMZ file has been written.');

3、读取 KMZ 文件

下面是一个简单的示例,展示如何从 KMZ 文件中读取 KML 文件,并解析其内容。

const fs = require('fs');
const AdmZip = require('adm-zip');
const xmlParser = require('xml2js');

// 读取 KMZ 文件
const zip = new AdmZip('example.kmz');

// 解压 KMZ 文件中的 KML 文件
const kmlEntries = zip.getEntries().filter(entry => entry.entryName.endsWith('.kml'));

if (kmlEntries.length > 0) {
  const kmlEntry = kmlEntries[0];
  const kmlContent = zip.readAsText(kmlEntry);

  // 解析 KML 文件
  xmlParser.parseString(kmlContent, (parseErr, result) => {
    if (parseErr) throw parseErr;

    // 获取第一个 Placemark 的 name 和 coordinates
    const placemark = result.kml.Document[0].Placemark[0];
    const name = placemark.name[0];
    const description = placemark.description ? placemark.description[0] : '';
    const coordinates = placemark.Point[0].coordinates[0];

    console.log(`Name: ${name}`);
    console.log(`Description: ${description}`);
    console.log(`Coordinates: ${coordinates}`);
  });
} else {
  console.log('No KML files found in the KMZ archive.');
}

示例输出
当运行上述读取代码时,控制台将输出:

Name: Example Point
Description: A simple point
Coordinates: -122.0822035,37.4222898,0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

myeclipse 2020 下载 安装 汉化

1,解压 myeclipse 2020 压缩包到当前目录下: 点击此处蓝色字体下载压缩包 提取码 k3x9 2,鼠标右键 点击 myeclipse 2020.exe 选择 以管理员身份运行 : 3,等待加载: 4,点击 Next : 5…

【数学建模】2024华数杯A题思路(已完成)

视频预览: 2024华数杯A题已完成 作品连接:https://mbd.pub/o/bread/ZpmWmJxu 文章目录 一、题目二、分析三、代码示例 一、题目 机器臂是一种自动化装置,广泛应用于工业生产、精密操作、危险环境作业和物流等领域。关节角路径的优化设计对于…

Transformer在生成细胞数据上的应用

来自:scTranslator: A pre-trained large generative model for translating single-cell transcriptome to proteome 工程地址:https://github.com/TencentAILabHealthcare/scTranslator 在scTranslator中,有3个阶段:paired bu…

【xilinx】XCZU1CG-1SBVA484I FPGA 的 VCC_PSBATT 引脚的正确电压范围是多少?

我正在做一个涉及 XCZU1Cg-1SBVA484I FPGA IC 的项目。对于 PSBATT 部分,根据 DS925 文档,提到 VCC_PSBATT 电压范围为 1.2V ~ 1.5V。但在同一文档中,注释部分规定:Vcc_psbatt 最高可接受 1.89V。 根据 UG1085 文档,使…

HarmonyOS 习题(二)

1、在类Web开发范式自定义组件创建后,加入到Page组件树时,会触发以下哪一项回调。 A)Onlnit B)OnAttached C)OnLayoutReady D)OnDetached 答案:B 分析: onlnit:自定义组件初始化生命周期回调&a…

HTML常用标签和CSS的运用

目录 1.HTML标签 1.1 文档结构标签 1.2 文本格式标签 1.3 列表标签 1.4 链接和媒体标签 1.5 表格标签 1.6 表单标签 1.7 分区和布局标签 1.8 元数据标签 2.css样式 2.1 字体样式 2.2 文本样式 2.3 背景样式 2.4 边框样式 2.5 间距样式 2.6 宽度和高度 2.7 显示…

NLP——Transfromer 架构详解

Transformer总体架构图 输入部分:源文本嵌入层及其位置编码器、目标文本嵌入层及其位置编码器 编码器部分 由N个编码器层堆叠而成 每个编码器层由两个子层连接结构组成 第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接 第二个子层连接结构包…

音质提升秘籍:专业音频剪辑软件汇总

现在欣赏传输音频文件比以前简单多了,这些音频的质量也影响了听众的体验与感受。所以使用一些靠谱的音频剪辑工具处理音频能让你的音频文件呈现更好的效果。 1.福昕音频剪辑 链接直达>>https://www.foxitsoftware.cn/audio-clip/ 这是一款电脑端软件。别看…

MySQL查询最近7天的分组数据,无则补零

需求是:有个查询最近7天的折线图,这个就要求没有数据就要补0 现在表名为:wo_work_order 时间字段为:create_time SQL如下: SELECTDATE_FORMAT( a.timeDay, %Y-%m-%d ) AS day,IFNULL( b.count, 0 ) AS count FROM(S…

5.怎么使用Element ui来做一个前端登录页面

找到Layout 布局 他通过基础的 24 分栏,迅速简便地创建布局。 找一个对齐方式 这个就不错,找到对应的代码 这个 复制进入idea 引入我们的图片和文字 我这里图片有点问题 然后我再添加一条分割线 加入表单校验 把里面的代码同上加入idea 结果 对表单内容进行调整 …

半导体设备SAP实施的主要特点有哪些?

在半导体这一高度技术密集且竞争激烈的行业中,企业的高效运营和精准管理成为了决胜市场的关键。SAP作为全球领先的企业管理软件提供商,其半导体设备解决方案以其独特的功能和特点,为半导体企业带来了显著的运营优化和竞争力提升。本文将跟大家…

C# 类型转换

隐式(implicit)类型转换 1.不丢失精度的转换 2.显示(explicit)类型的转换 有可能丢失精度的转换 使用convert转换 ToString方法:将数值类型转换成字符串型

【Deep-ML系列】Linear Regression Using Normal Equation(正规方程求解线性回归)

题目链接:Deep-ML import numpy as np def linear_regression_normal_equation(X: list[list[float]], y: list[float]) -> list[float]:X np.array(X)y np.array(y).reshape(-1, 1)x_transpose X.Ttheta np.linalg.inv(x_transpose.dot(X)).dot(x_transpose…

K8s部署篇之手动部署二进制高可用集群架构

一、系统环境初始化 一)架构设计 所有节点都操作:3个master(etcd集群三个节点)和2个node 1、K8s服务调用如图 2、各组件说明 1、API Server 供Kubernetes API接口,主要处理 REST操作以及更新ETCD中的对象所有资源增删…

virtualbox7安装centos7.9配置静态ip避坑方案

1.背景 我大概在一年之前安装virtualbox7centos7.9的环境,但看视频说用vagrant启动的窗口可以不用第三方工具(比如xshell、secure等)连接centos7.9,于是尝鲜试了下还可以,导致系统文件格式是vmdk了(网上有vmdk转vdi的方法&#xf…

LLaVAR: Enhanced Visual Instruction Tuning for Text-Rich Image Understanding

发表时间:2 Feb 2024 论文链接:https://arxiv.org/pdf/2306.17107 作者单位:Georgia Tech Motivation:指令调整增强了大型语言模型 (LLM) 与人类交互的能力。此外,最近的指令跟踪数据集包括图像作为视觉输入&#xf…

从古代驿站体系看软件安全管控@安全历史04

在古代,车、马都很慢,信息传递很不顺畅,中央的政令又是如何传达至地方的呢?实际上,很多朝代都有专门的驿站制度,可以保障全国各地的信息传递,对于维护统治和稳定有着关键作用。 若将国家比作一个…

jvm方法返回相关指令ireturn,areturn,return等分析

正文 看图: 做的事情如下: 1:弹出当前的方法栈帧 2:获取上一个方法 3:从当前方法的操作数栈中获取执行结果,并推送到上一个方法的操作数栈中对应的伪代码: Override public void execute(Frame frame) {Thread thread frame.thread();Frame curren…

使用Go语言实现基于泛型的Jaccard相似度算法

基本原理 跳表: jaccard相似度: jaccard相似度的代码实现: 时间复杂度分析: 快速jaccard算法: 代码实现,这个要求两个集合都是有序的: Jaccard相似度算法的基本实现 算法&#xf…

【Rabbitmq的消息模型】

消息队列的特性 durable:队列持久化。如果设置持久化,那么无论RabbitMQ在关闭时,就会将队列存储到本地磁盘,无论宕机还是重启,队列也不会删除;如果设置不持久化,那么在RabbitMQ关闭时&#xff…