KML文件是什么 KML地理数据XML格式详解

来源:Nodejs社区作者:新井头衔:网络博主
导读:本期聚焦于小伙伴创作的《KML文件是什么 KML地理数据XML格式详解》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《KML文件是什么 KML地理数据XML格式详解》有用,将其分享出去将是对创作者最好的鼓励。

KML全称为Keyhole Markup Language,是一种基于XML的标记语言,最初由Keyhole公司开发,后被Google收购并广泛应用于Google Earth、Google Maps等地理信息产品中,目前已经成为开放地理空间联盟的官方标准之一,主要用于描述地理空间要素的位置、样式和附属信息。

KML文件是什么 KML地理数据XML格式详解

KML文件的基础结构

KML文件严格遵循XML的语法规则,所有标签必须正确闭合,且区分大小写。一个最简单的KML文件包含文档声明、根标签<kml>、命名空间声明以及核心内容标签<Document>或<Placemark>。

下面是一个最基础的KML文件示例,其中定义了一个位于北京的标注点:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <name>示例KML文档</name>
    <Placemark>
      <name>北京天安门</name>
      <description>中华人民共和国首都核心地标</description>
      <Point>
        <coordinates>116.3974,39.9093,0</coordinates>
      </Point>
    <Placemark>
  </Document>
</kml>

核心标签含义说明

KML的标签体系围绕地理要素的描述展开,以下是几个最常用的核心标签:

  • <kml>:根标签,所有KML内容都必须包裹在这个标签内部,同时需要声明对应的命名空间。
  • <Document>:用于组织多个地理要素,可以包含样式定义、文件夹分组等内容,是常用的内容容器。
  • <Placemark>
  • <Point>:定义点要素,内部通过<coordinates>标签存储经纬度坐标。
  • <LineString>:定义线要素,<coordinates>标签中可以存储多个坐标点,按顺序连接形成线段。
  • <Polygon>:定义多边形要素,需要指定外边界坐标和内边界坐标(可选),用于描述面状区域。
  • <coordinates>:坐标存储标签,格式为经度,纬度,海拔,多个坐标之间用空格分隔,海拔参数可选,默认值为0。

坐标数据解析规则

KML中的坐标采用WGS84坐标系,也就是我们常说的GPS坐标系,坐标顺序和常见的经纬度顺序一致,先写经度再写纬度,最后可选海拔值。如果需要解析KML文件中的坐标数据,可以按照XML解析的逻辑读取对应标签的内容,再按规则拆分字符串即可。

下面是一个使用Python解析KML文件中所有点要素坐标的示例代码:

import xml.etree.ElementTree as ET

def parse_kml_points(kml_path):
    # 定义KML命名空间,避免解析时标签匹配失败
    namespaces = {'kml': 'http://www.opengis.net/kml/2.2'}
    # 解析KML文件
    tree = ET.parse(kml_path)
    root = tree.getroot()
    points = []
    # 查找所有Placemark标签
    for placemark in root.findall('.//kml:Placemark', namespaces):
        name_tag = placemark.find('kml:name', namespaces)
        point_tag = placemark.find('.//kml:Point', namespaces)
        if point_tag is not None:
            coord_tag = point_tag.find('kml:coordinates', namespaces)
            if coord_tag is not None:
                coord_str = coord_tag.text.strip()
                # 拆分坐标字符串,格式为经度,纬度,海拔
                lon, lat, alt = coord_str.split(',')
                point_info = {
                    'name': name_tag.text if name_tag is not None else '未命名点',
                    'longitude': float(lon),
                    'latitude': float(lat),
                    'altitude': float(alt) if alt else 0.0
                }
                points.append(point_info)
    return points

# 调用示例,假设kml文件名为test.kml
if __name__ == '__main__':
    result = parse_kml_points('test.kml')
    for item in result:
        print(f"名称:{item['name']},经度:{item['longitude']},纬度:{item['latitude']}")

KML与其他地理格式的差异

常见的地理数据格式还有Shapefile、GeoJSON等,和KML相比各有特点:

格式名称文件结构适用场景样式支持
KML单XML文件Google Earth、地图标注展示原生支持样式、动画等扩展配置
Shapefile多文件组合(.shp/.dbf/.shx等)专业GIS软件数据处理样式需要额外配置,不支持原生存储
GeoJSON单JSON文件Web前端地图开发样式需要在前端代码中单独定义

常见问题说明

KML文件可以用什么软件打开

主流的地理信息软件都支持KML文件打开,比如Google Earth、QGIS、ArcGIS等,普通用户也可以直接把KML文件拖入浏览器版本的Google Maps中查看内容。

KML文件的编码要求

KML文件推荐使用UTF-8编码,避免出现中文乱码问题,文档声明中需要明确标注encoding="UTF-8",如果文件中包含非英文字符,必须保证文件实际编码和声明编码一致。

如何给KML要素添加自定义样式

KML支持通过<Style>标签定义要素的显示样式,比如标注点的图标、线的颜色宽度、面的填充色等,定义的样式可以通过id关联到对应的<Placemark>标签上,实现自定义显示效果。

下面是一个带自定义样式的KML标注点示例,标注点会显示为红色图标:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <name>带样式的KML示例</name>
    <Style id="redIcon">
      <IconStyle>
        <color>ff0000ff</color>
        <Icon>
          <href>http://ipipp.com/icon.png</href>
        </Icon>
      </IconStyle>
    </Style>
    <Placemark>
      <name>红色标注点</name>
      <styleUrl>#redIcon</styleUrl>
      <Point>
        <coordinates>121.4737,31.2304,0</coordinates>
      </Point>
    </Placemark>
  </Document>
</kml>

KMLXML地理数据坐标解析修改时间:2026-06-17 00:39:40

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。