GML是OGC制定的地理空间数据XML编码标准,作为ISO 19136,它用结构化文本描述地理要素的位置、类型、属性及关系,核心是提供跨GIS系统的语义一致互操作,而非渲染地图。

GML(Geography Markup Language)是一种专为地理空间数据设计的XML编码标准,由开放地理空间联盟(OGC)制定,也是ISO 19136国际标准。它不是一种绘图工具或地图样式语言,而是一套用文本描述“哪里有什么、是什么、怎么连”的规则——比如把“北京市中心的一个公交站”表达为带名称、类型、坐标和所属行政区的结构化数据,让不同GIS软件能一致理解、读取和交换。
核心定位:地理数据的“通用说明书”
GML本质是XML在地理信息领域的规范化应用。它不渲染地图,也不直接显示图形,而是用可验证、可扩展的标签明确声明:
- 一个地理对象是“要素(Feature)”,如一条道路、一座医院、一个行政边界;
- 该要素的空间位置由“几何体(Geometry)”描述,如点(gml:Point)、线(gml:LineString)、面(gml:Polygon);
- 所有坐标必须绑定参考系(如通过srsName="EPSG:4326"声明WGS84经纬度);
- 非空间属性(如名称、长度、分类代码)作为要素的子元素或属性存在,语义清晰可查。
基本结构长什么样?
一个合法GML文档以XML声明开头,引入GML命名空间,并组织为FeatureCollection(要素集合)。每个地理对象封装在featureMember中,内部包含自定义要素类型(如fme:point)和标准几何表达。关键特征包括:
本文档是python学习笔记与简明教程;为什么用Python作为编程入门语言?每种语言都会有它的支持者和反对者。去Google一下“why python”,你会得到很多结果,诸如应用范围广泛、开源、社区活跃、丰富的库、跨平台等等等等,也可能找到不少对它的批评,格式死板、效率低、国内用的人很少之类。不过这些优缺点的权衡都是程序员们的烦恼。作为一个想要学点编程入门的初学者来说,简单才是最重要的。当学C++的同学还在写链表,学Java的同学还在折腾运行环境的时候,学Pyt
- 用gml:pos或gml:posList写坐标,空格分隔(如116.4 39.9),顺序是经度+纬度(x y);
- 用gml:boundedBy + gml:Envelope声明整个数据集的空间范围;
- 支持2D/3D坐标(srsDimension="2"或"3"),也支持高程、时间等扩展维度;
- 所有几何都可嵌套在属性容器中(如gml:pointProperty),体现“几何是要素的一种属性”的建模思想。
为什么选GML而不是GeoJSON或Shapefile?
它解决的是系统级互操作问题,尤其适合需要强语义、多源集成与长期归档的场景:
- 比GeoJSON更严谨:强制声明坐标系、支持复杂拓扑(如带内环的面)、允许自定义应用模式(Application Schema);
- 比Shapefile更开放:纯文本、无二进制依赖、天然支持Web传输与XSLT转换,不绑定特定厂商;
- 是WFS服务的事实载体:Web要素服务(WFS)默认用GML收发查询结果,是GIS Web服务链路中的“标准信封”。
入门第一步:怎么看懂一个GML文件?
不必从头写Schema,先学会识别主干结构:
- 找
——这是整个数据包的根; - 看
里的lowerCorner/upperCorner——快速获知数据落在哪片区域; - 逐个查看
,定位其中的gml:Point、gml:LineString等几何标签及其srsName; - 注意自定义命名空间前缀(如fme:、app:),它们指向业务属性定义,通常在xsi:schemaLocation里声明对应XSD。









