当前位置: 首页 > news >正文

@giszhc/kml-to-geojson:kml转换GeoJSON,这才是更优解

kml-to-geojson

一个简单、轻量的 JavaScript / TypeScript 工具库,用于将KMLGPXOVKML(奥维 KML)或OVJSN(奥维 JSON)文件转换为GeoJSON格式。

支持以下特性:

  • 支持 KML 格式- Point, LineString, Polygon, MultiGeometry, Track 等
  • 支持 GPX 格式- Track, Route, Waypoint 等
  • 支持 OVKML 格式- OpenVector KML 格式(奥维 KML)
  • 支持 OVJSN 格式- OpenVector JSON 格式(奥维 JSON),包括标准 GeoJSON 和特殊层级格式
  • 支持本地文件和网络 URL- 可直接传入 Document 对象或 HTTP(S) URL
  • 保留样式和属性信息- name, address, description, styleUrl 等
  • KML 颜色转换- 自动将 KML 的 AABBGGRR 颜色格式转换为 RGBA
  • 异步处理- 支持 Promise,方便现代 JavaScript 开发
  • Tree Shaking 友好- 支持按需引入

在线示例

我们提供了一个功能完整的在线演示页面,您可以直接在浏览器中体验所有功能:

🌐 立即体验:点击访问在线演示

在线示例支持:

  • ✨ KML、GPX、OVKML、OVJSN 格式转换
  • 📁 本地文件上传
  • 🌐 URL 地址加载
  • 💾 结果下载和复制

安装

你可以通过 npm 或 pnpm 安装该库:

pnpminstall@giszhc/kml-to-geojson# 或npminstall@giszhc/kml-to-geojson

API

kmlToGeoJSON(input: Document | string): Promise

将 KML 文档或 URL 转换为 GeoJSON FeatureCollection

参数:

  • input- 可以是:
    • DOM Document 对象
    • KML 文件的 URL 字符串(以http://https://开头)
    • KML 文件内容的字符串

返回:

  • Promise<FeatureCollection>- GeoJSON FeatureCollection 对象

输出示例:

{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[120.5,30.2]},"properties":{"name":"示例地点","address":"测试地址","description":"描述信息"}}]}

示例:

import{kmlToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 1:从本地文件读取constfileInput=document.getElementById('file');constfile=fileInput.files[0];consttext=awaitfile.text();constgeojson=awaitkmlToGeoJSON(text);console.log(geojson);// FeatureCollection
import{kmlToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 2:从网络 URL 加载constgeojson=awaitkmlToGeoJSON('https://example.com/data.kml');console.log(geojson);// FeatureCollection
import{kmlToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 3:直接传入 XML 字符串constkmlContent=`<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <Point> <coordinates>120.5,30.2</coordinates> </Point> </Placemark> </Document> </kml>`;constgeojson=awaitkmlToGeoJSON(kmlContent);console.log(geojson);// FeatureCollection

gpxToGeoJSON(input: Document | string): Promise

将 GPX 文档或 URL 转换为 GeoJSON FeatureCollection

参数:

  • input- 可以是:
    • DOM Document 对象
    • GPX 文件的 URL 字符串(以http://https://开头)
    • GPX 文件内容的字符串

返回:

  • Promise<FeatureCollection>- GeoJSON FeatureCollection 对象

示例:

import{gpxToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 1:从本地文件读取constfileInput=document.getElementById('file');constfile=fileInput.files[0];consttext=awaitfile.text();constgeojson=awaitgpxToGeoJSON(text);console.log(geojson);// FeatureCollection
import{gpxToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 2:从网络 URL 加载constgeojson=awaitgpxToGeoJSON('https://example.com/track.gpx');console.log(geojson);// FeatureCollection
import{gpxToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 3:直接传入 XML 字符串constgpxContent=`<?xml version="1.0" encoding="UTF-8"?> <gpx version="1.1" creator="Example"> <trk> <name>轨迹</name> <trkseg> <trkpt lat="30.1" lon="120.2"></trkpt> <trkpt lat="30.2" lon="120.3"></trkpt> </trkseg> </trk> </gpx>`;constgeojson=awaitgpxToGeoJSON(gpxContent);console.log(geojson);// FeatureCollection

ovjsnToGeoJSON(input: FeatureCollection | Record<string, any> | string): Promise

将 OVJSN 文档或 URL 转换为 GeoJSON FeatureCollection。支持两种格式:

  • 标准 GeoJSON 格式- 直接返回 FeatureCollection
  • OVJSN 特有格式- 包含 Version, Type, ObjItems 等字段的层级结构数据(奥维 JSON 特有格式)

参数:

  • input- 可以是:
    • GeoJSON FeatureCollection 对象
    • OVJSN 对象(包含 Version, Type, ObjItems 等字段的奥维 JSON 对象)
    • OVJSN 文件的 URL 字符串(以http://https://开头)
    • OVJSN 文件内容的字符串

返回:

  • Promise<FeatureCollection>- GeoJSON FeatureCollection 对象

示例:

import{ovjsnToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 1:从本地文件读取(标准 GeoJSON 格式)constfileInput=document.getElementById('file');constfile=fileInput.files[0];consttext=awaitfile.text();constgeojson=awaitovjsnToGeoJSON(text);console.log(geojson);// FeatureCollection
import{ovjsnToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 2:从网络 URL 加载constgeojson=awaitovjsnToGeoJSON('https://example.com/data.ovjsn');console.log(geojson);// FeatureCollection
import{ovjsnToGeoJSON}from'@giszhc/kml-to-geojson';// 方式 3:OVJSN 特有格式(奥维 JSON 层级结构)constovjsnData={"Version":"V10.1.6","Type":1,"ObjItems":[{"Type":30,"Object":{"Name":"分组名称","ObjectDetail":{"ObjChildren":[{"Type":7,"Object":{"Name":"名称","ObjectDetail":{"Lat":31.4048,"Lng":120.8616}}}]}}}]};constgeojson=awaitovjsnToGeoJSON(ovjsnData);console.log(geojson);// 输出:// {// "type": "FeatureCollection",// "features": [// {// "type": "Feature",// "geometry": {// "type": "Point",// "coordinates": [120.816, 31.40152048]// },// "properties": {// "name": "名称",// "group": ["分组名称"]// }// }// ]// }

使用示例

基本使用示例

从本地文件转换
<inputtype="file"id="fileInput"accept=".kml,.gpx"><buttononclick="convert()">转换</button><scripttype="module">import{kmlToGeoJSON,gpxToGeoJSON}from'@giszhc/kml-to-geojson';asyncfunctionconvert(){constfileInput=document.getElementById('fileInput');constfile=fileInput.files[0];if(!file)return;consttext=awaitfile.text();constparser=newDOMParser();constdoc=parser.parseFromString(text,'text/xml');letgeojson;if(file.name.endsWith('.kml')){geojson=awaitkmlToGeoJSON(doc);}elseif(file.name.endsWith('.gpx')){geojson=awaitgpxToGeoJSON(doc);}console.log(JSON.stringify(geojson,null,2));}</script>
从网络 URL 转换
import{kmlToGeoJSON,gpxToGeoJSON}from'@giszhc/kml-to-geojson';// 转换 KMLconstkmlGeoJSON=awaitkmlToGeoJSON('https://example.com/regions.kml');console.log(kmlGeoJSON);// 转换 GPXconstgpxGeoJSON=awaitgpxToGeoJSON('https://example.com/hiking-track.gpx');console.log(gpxGeoJSON);
结合地图库使用(Leaflet)
import{kmlToGeoJSON}from'@giszhc/kml-to-geojson';importLfrom'leaflet';constmap=L.map('map').setView([30,120],10);L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);// 加载 KML 并显示在地图上constgeojson=awaitkmlToGeoJSON('https://example.com/data.kml');L.geoJSON(geojson).addTo(map);

支持的几何类型

KML:

  • Point
  • LineString
  • Polygon
  • MultiGeometry
  • Track / gx:Track

GPX:

  • Track (trk)
  • Route (rte)
  • Waypoint (wpt)

注意事项

  1. 浏览器环境- 需要在浏览器环境中运行,依赖DOMParserXMLSerializerfetchAPI
  2. CORS- 从网络 URL 加载文件时,需要确保目标服务器支持跨域请求
  3. 异步处理- 所有转换方法都是异步的,需要使用await.then()
  4. 错误处理- 建议添加 try-catch 块来处理可能的解析错误
try{constgeojson=awaitkmlToGeoJSON('https://example.com/data.kml');console.log(geojson);}catch(error){console.error('转换失败:',error);}

如果这篇文章对你有帮助,欢迎点赞 👍 收藏 ⭐ 关注 👀

完结,撒花✿✿ヽ(°▽°)ノ✿

http://www.jsqmd.com/news/541284/

相关文章:

  • 效率直接起飞!盘点2026年全民喜爱的的AI论文写作工具
  • 别再只调采样了!Blender渲染模糊?这4个参数(分辨率、AO、体积光)才是清晰度的关键
  • BM12O2321-A高集成H桥模块的9位UART驱动原理与Arduino库实践
  • OpenClaw多模态实践:Qwen3-VL:30B图片识别+飞书对话
  • OpenCV实战:5分钟搞定Harris角点检测(附完整代码示例)
  • OpenClaw监控方案:Qwen3.5-4B-Claude模型异常任务预警系统
  • OpenClaw内容创作流:nanobot辅助生成技术文章草稿
  • 3步打造专属游戏体验:面向MOD爱好者的整合包使用指南
  • CasioSerial库:嵌入式MCU与图形计算器串行通信实现
  • 第一批“首席龙虾官”,月薪6万
  • OpenClaw备份方案:GLM-4-7-Flash自动加密重要文件并上传网盘
  • DanKoe 视频笔记:生活是一场电子游戏:理解游戏框架
  • 从外卖配送看算法实战:Python+NetworkX解决简化版VRP问题
  • 这份榜单够用!AI论文写作软件深度测评与推荐2026最新版
  • Frida实战:如何用lua_pushlstring通杀cocos2d-lua游戏日志打印(附完整脚本)
  • 别再死记硬背了!一张图搞懂曼彻斯特码、HDB3码等8种线路编码的区别与应用场景
  • @giszhc/tree-line-style:Element Plus的ElTree组件连接线,看这里
  • 2026最权威AI论文网站榜单:这些平台被高校和导师悄悄推荐
  • 大型原木开料锯选购指南:如何避开性能陷阱,实现稳定高效生产? - 2026年企业推荐榜
  • Python WASM部署避坑手册(27个真实故障现场还原)
  • Windows 10/11 下如何用 AsrTools 3分钟搞定视频字幕生成(附格式转换避坑指南)
  • Java开发者必备:Orekit空间动力学库从下载到配置的完整指南(含Hipparchus依赖处理)
  • 从Prompt到Workflow:手把手教你用Spec Kit为Claude/Sonnet模型设计结构化AI编码模板
  • MCCI LMIC LoRaWAN协议栈深度解析与嵌入式实践
  • DFW库:面向教学的嵌入式机器人模式切换框架
  • 电赛小车避坑指南:从2011到2024,那些年我们踩过的传感器和通信模块的‘坑’
  • Unity Canvas适配全攻略:从UI错位到完美适配的5个实战技巧
  • QQ空间历史说说备份解决方案:从配置到导出的实战指南
  • 2026年开年采购指南:五大高性价比全自动多片锯品牌深度测评与选型推荐 - 2026年企业推荐榜
  • RSA宣布与Microsoft扩大合作,进一步巩固公司在无密码身份安全领域的领导地位