行政区划边界数据库
深度教程 · 持续更新

GeoJSON 转 KML 指南

KML 是 Google Earth 与三维地理展示的通用格式,GeoJSON 转 KML 最常用两种方式:QGIS 右键导出或命令行 ogr2ogr。转换时注意三点——KML 标准坐标就是经纬度、XML 编码用 UTF-8、样式与字段会按映射规则带入。本文给出完整步骤与命令。

格式差异

KML 与 GeoJSON 的区别

两者都能表示边界,但用途与生态不同。

KML

基于 XML 的标记语言,是 Google Earth、Google 地图的通用格式,支持图标样式、着色与描述气泡,也用于无人机航迹、三维软件的图层交换。

GeoJSON

基于 JSON 的开放标准,Web 地图(Leaflet、Mapbox、ECharts)与数据分析生态更友好,是后端与前端处理的首选。

转换关系

二者可无损互转:坐标都是经纬度,字段映射到 KML 的属性描述中。需要 Google Earth 展示或三维软件时转 KML,做 Web 可视化时保留 GeoJSON 即可。

方法一

用 QGIS 导出 KML

图形化操作,适合单文件与临时转换。

① 打开文件

打开 QGIS,「图层」→「添加图层」→「添加矢量图层」,选择 .geojson 文件加载边界。

② 右键导出

图层面板右键该图层 →「导出」→「另存为」,格式选择 Keyhole Markup Language [KML],选择保存路径后确定。

③ 打开验证

导出的 .kml 可直接用 Google Earth 打开,或在 QGIS 重新加载确认边界与属性无异常。

方法二

用 ogr2ogr 命令行转换(可批量)

一条命令完成转换,适合批量与自动化流程。

# 基础转换:GeoJSON → KML
ogr2ogr -f "KML" out.kml in.geojson

# 指定用哪个属性做 KML 名称标签(如行政名称字段)
ogr2ogr -f "KML" -dsco NameField=name out.kml in.geojson

# 若需先转换坐标系再输出(KML 标准为经纬度)
ogr2ogr -f "KML" -t_srs EPSG:4326 out.kml in.geojson

参数说明:-f "KML" 指定输出格式;-dsco NameField 指定名称字段(影响 Google Earth 中显示的区域名);-t_srs 确保输出为经纬度。安装 GDAL 后即可使用(Windows 可用 OSGeo4W 或 conda 安装)。

避坑清单

转换常见问题

大多数 KML 异常都出在坐标、编码与字段映射上。

① 坐标系

KML 标准坐标是经纬度(WGS84 体系)。若源数据是投影坐标或 GCJ-02,需先转 WGS84 经纬度再输出,否则在 Google Earth 中错位或不可见。

② 编码

含中文名称的 KML 建议保持 UTF-8 编码;个别软件按本地编码读取会乱码,用文本编辑器另存为 UTF-8 即可。

③ 字段映射

KML 的属性会写入描述的扩展标签中,字段名建议简短;NameField 选错时区域名会显示为 Feature 编号,转换时显式指定即可。

④ 复杂几何

含岛屿、飞地等多块区域的 MultiPolygon 会转为多个 Placemark,属正常现象;确认所有区块都在即可。

数据来源

需要现成的行政区划边界?

先有边界数据,才有转换;省、市、区县、乡镇、村五级边界均可直接获取。

统一 WGS84 的边界数据

省、市、区县边界可 地图分区下载省市区县边界;乡镇边界与全国整级打包请在 整级打包页 选购;村界数据请在 村级边界页 按省获取。数据统一 WGS84 坐标,转 KML 无需再处理坐标偏移。若需要的是 shp 而不是 KML,可参考 GeoJSON 转 shp 指南

常见问题

常见问题

KML 和 GeoJSON 有什么区别?
KML 是基于 XML 的标记语言,是 Google Earth、Google 地图与三维地理软件的通用格式,支持样式与描述气泡;GeoJSON 是基于 JSON 的开放标准,Web 地图与数据分析生态更友好。两者坐标都是经纬度,可无损互转,按使用场景选择。
怎么把 GeoJSON 转成 KML?
两种常用方式:QGIS 打开 GeoJSON 后右键图层→导出→另存为,格式选 Keyhole Markup Language [KML];或用命令行 ogr2ogr -f "KML" out.kml in.geojson,可加 -dsco NameField 指定名称字段、-t_srs 保证输出为经纬度。
转出的 KML 在 Google Earth 打不开或显示异常?
多数是坐标系问题:KML 标准是经纬度,若源数据是投影坐标或 GCJ-02,需先转 WGS84 经纬度再导出。其次检查编码(中文建议 UTF-8)与 NameField 字段设置。
KML 转换会丢字段吗?
KML 的属性会写入描述的扩展标签(ExtendedData)中,字段名建议简短以确保兼容;GeoJSON 与 KML 的几何与属性转换本身无损,但样式、图标需在 KML 中另行配置。
需要先转 shp 再转 KML 吗?
不需要。GeoJSON 可直接转 KML;同样也无需先转 KML 再转 shp。若最终目标是 ArcGIS 等桌面软件的 shp,直接用 ogr2ogr 或 QGIS 从 GeoJSON 转 shp 即可,详见 GeoJSON 转 shp 指南。

需要可直接使用的边界数据?

省、市、区县边界可 地图分区下载省市区县边界;乡镇边界与全国整级打包请在 整级打包页 选购;村界数据请在 村级边界页 按省获取。