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

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;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 和 coordinatesconst 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.rhkb.cn/news/392683.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP中检质操作原因导致的WM和MM库存状态不一致实例分析处理

近期遇到一个问题描述如下: 某个物料通过MM的库存查询MMBE,结果是没有质检库存的。但通过WM的库存查询事务LS24,结果是有Q状态(即质检库存)的。 不明原因的用户可能会认为这是系统的BUG,但作为一个多年经验…

浅谈 Mybatis 框架

文章目录 一、什么是MyBatis?1.2、JDBC 二、使用Mybatis2.1、配置MyBatis开发环境2.1.1、配置连接字符串2.1.2、配置MyBatis中的XML路径 2.2、使用MyBatis模式和语法操作数据库 三、使用 Mybatis 进行增删改查操作的要点3.1、ResultMap的用法 四、Mybatis操作难点4.1、#{ } 和…

JavaWeb基础1:HTML/CSS/JS/HTTP

JavaWeb基础1:HTML/CSS/JS/HTTP (qq.com)

FPGA知识基础之--clocking wizard ip核的使用以及modelsim与vivado联合仿真

目录 前言一、ip核是什么?1.1 定义1.2 分类 二、为什么使用ip核2.1 ip核的优点2.2 ip核的缺点 三、如何使用ip核(vivado)四、举例(clocking wizard ip核)4.1 简介4.2 实验任务4.3 程序设计4.3.1 系统模块4.3.2 波形绘制…

连接数据库报错bad handshake

堡垒机账号没有授权访问权限

2024最新最全面的Selenium 3.0 + Python自动化测试框架

文档说明 Selenium是一个用于Web应用程序自动化测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 Selenium测试的主要功能包括: 测试与浏览器的兼容性:测试应用程序是否能很好的工作在不同的浏览器和操作系统之上。…

云计算学习——5G网络技术

系列文章目录 提示:仅用于个人学习,进行查漏补缺使用。 Day1 网络参考模型 Day2 网络综合布线与应用 Day3 IP地址 Day4 华为eNSP网络设备模拟器的基础安装及简单使用 Day5 交换机的基本原理与配置 Day6 路由器的原理与配置 Day7 网络层协议介绍一 Day8 …

Jpa-多表关联-OneToOne

Jpa-多表关联-OneToOne 准备JoinColumnOneToOne属性targetEntitycascade*PERSISTMERGEREMOVEREFRESH orphanRemovalfetchoptionalMappedBy* OneToOne在 hibernate中用于对表与表之间进行维护关联 准备 import com.alibaba.fastjson.JSON; import jakarta.persistence.*; impor…

AI8-文本检测

文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要 解决目标分类问题。 文本在图像中的表现形式可以视为一种‘目标‘,通用的目标检测的方法也适用于文本检测,从任务本身上来 看: • 目标检测:给定图像或者视频,找出目…

本地部署 faster-whisper

本地部署 faster-whisper 1. 创建虚拟环境2. 安装依赖模块3. 创建 Web UI4. 启动 Web UI5. 访问 Web UI 1. 创建虚拟环境 conda create -n faster-whisper python3.11 -y conda activate faster-whisper2. 安装依赖模块 pip install torch2.2.2 torchvision0.17.2 torchaudio…

bilibili实习生一面0625

OSI七层模型 物理层:将帧中的比特传送到下一个节点(比特) 数据链路层:将数据包装成帧并传送到路径上下一个节点,将相邻节点间不可靠的物理链路变成可靠的逻辑链路(帧) 网络层:路由寻…

Qt 5.14安装(配置MSVC 2017)

Qt 5.14安装(配置MSVC 2017) 记录一下自己安装配置Qt的步骤。 我需要安装Qt,并使用MSVC编译,所以才写了这篇文章。 一、环境 操作系统:windows 11 (64位) Qt:Qt 5.14.2 vs&…

怎么读取FRM、MYD、MYI数据文件

一、介绍frm、MYD、MYI文件 在MySQL中,使用MyISAM存储引擎时,数据库表会被分割成几个不同的文件文件描述功能扩展名FRM 文件表结构定义文件存储表的结构信息,字段、索引等.FRMMYD 文件数据文件包含表的实际数据.MYD(MYData&#x…

[米联客-安路飞龙DR1-FPSOC] UDP通信篇连载-04 IP层程序设计

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

学习笔记-MYSQL 事务

目录 一、什么是事务? 二、事务的四个特征(ACID)【面试常考项】 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability&#x…

Linux-理解shell

文章目录 5. 理解shell5.1 shell的类型5.2 交互shell和系统默认shell5.3 安装zsh shell程序5.4 shell的父子关系5.5 命令列表5.6 命令分组5.7 使用命令分组创建子shell5.8 子shell用法5.9 shell的非内建命令和内建命令5.9.1 非内建命令5.9.2 内建命令5.9.3 history和alias命令介…

AI9-文本识别

本章主要介绍文本识别算法的理论知识,包括背景介绍、算法分类和部分经典论文思路。 通过本章的学习,你可以掌握: 1. 文本识别的目标 2. 文本识别算法的分类 3. 各类算法的典型思想 1 背景介绍 文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为识别一个…

基于 Redis 的分布式信号量 Spring Boot 集成 Redisson 使用 Semaphore 控制并发访问数量

目录 前言 pom yml Controller 演示 注意 前言 工作中开发过一个服务,这里记作A服务,主要功能是配置,部署以及调用云函数。其中配置云函数的功能里,有一个配置项是并发数,意思是同一时间最多能有多少个请求调用…

【MATLAB源码】数学建模基础教程(2)--层次分析法(评价类算法)

系列文章目录在最后面,各位同仁感兴趣可以看看! 层次分析法 引言一、层次分析法的特点二、模型的建立求解过程 (1)问题的提出:实际问题的转化(2)建立层次结构模型(3)构造判断(成对比较)矩阵(4)一致性检验:三、层次分析法的优点与…

Codeforces Round 871 (Div. 4)(A~H)

比赛链接 Dashboard - Codeforces Round 871 (Div. 4) - Codeforces A. Love Story 找到与codeforces 有多少个不同的字符。 #include<bits/stdc.h> #define int long long #define TEST int T; cin >> T; while (T--) #define ios ios::sync_with_stdio(fals…