GPX-GPS交换格式
司机简称
GPX
生成依赖项
(读取支持需要libexpat)
GPX(GPS交换格式)是一种轻量级XML数据格式,用于在Internet上的应用程序和Web服务之间交换GPS数据(航路点、路线和轨道)。
OGR支持GPX读取(如果GDAL是用 expat 类库支持)和写作。
支持的版本是用于读取的GPX 1.0和1.1,用于写入的GPX 1.1。
OGR驱动程序支持读取和写入所有GPX功能类型:
航点 :OGR类型wkbPoint的特征层
路线 :OGR类型wkbLineString的特征层
轨道 :OGR类型wkbMultiLineString的特征层
它还支持读取独立图层中的布线点和轨迹点( route_points 和 track_points ),以便OGR可以使用它们自己的属性。
如果环境变量GPX_ELE_AS_25D设置为“是”,则高程元素将用于设置航路点、航路点和航迹点的Z坐标。
OGR/GPX读取和写入航路点、航路和航迹的GPX属性。
默认情况下,最多2个 <link> 要素可以按要素考虑。可以使用GPX N_MAX_LINKS环境变量更改此默认数字。
驱动程序功能
Supports Create()
This driver supports the GDALDriver::Create()
operation
Supports Georeferencing
This driver supports georeferencing
Supports VirtualIO
This driver supports virtual I/O operations (/vsimem/, etc.)
编码问题
Expat库支持读取以下内置编码:
US-ASCII码
UTF-8
UTF-16型
ISO-859-1
Windows-1252
OGR返回的内容将在从文件头中提到的编码转换为后用UTF-8编码。
在编写GPX文件时,驱动程序希望传入UTF-8内容。
扩展元素读取
如果 <extensions> 在GPX文件中检测到元素,OGR将其子元素的内容公开为字段。子元素的复杂内容将作为XML blob公开。
以下序列GPX内容:
<extensions>
<navaid:name>TOTAL RF</navaid:name>
<navaid:address>BENSALEM</navaid:address>
<navaid:state>PA</navaid:state>
<navaid:country>US</navaid:country>
<navaid:frequencies>
<navaid:frequency type="CTAF" frequency="122.900" name="CTAF"/>
</navaid:frequencies>
<navaid:runways>
<navaid:runway designation="H1" length="80" width="80" surface="ASPH-G">
</navaid:runway>
</navaid:runways>
<navaid:magvar>12</navaid:magvar>
</extensions>
将在OGR SF模型中解释为:
navaid_name (String) = TOTAL RF
navaid_address (String) = BENSALEM
navaid_state (String) = PA
navaid_country (String) = US
navaid_frequencies (String) = <navaid:frequency type="CTAF" frequency="122.900" name="CTAF" ></navaid:frequency>
navaid_runways (String) = <navaid:runway designation="H1" length="80" width="80" surface="ASPH-G" ></navaid:runway>
navaid_magvar (Integer) = 12
GPX_USE_EXTENSIONS
configuration
option.创建问题
导出时,所有层都将写入一个GPX文件。当前不支持更新现有文件。
如果输出文件已经存在,则不会进行写入。必须先删除现有文件。
支持的几何图形:
wkbPoint/wkbPoint25D类型的特性写在 wpt 元素。
wkblienstring/wkblienstring25d类型的特性写在 rte 元素。
wkbMultiLineString/wkbMultiLineString25D类型的功能写入 trk 元素。
不支持其他类型的几何图形。
对于布线点和轨迹点,如果有Z坐标,则用于填充相应点的高程元素。
如果一个图层被命名为“tracku points”,带有wkbPoint/wkbPoint25D几何图形,那么GPX文件中的轨迹将根据该图层中的特征序列构建。除原始坐标外,这是为每个轨迹点设置GPX属性的方法。由于“tracku fid”字段的值相同,属于同一轨迹的点会被识别(并且会根据“tracku segu id”字段的值将其细分为轨迹段)。它们必须按顺序写入,以便正确地重建轨迹对象。可以在第一个轨迹点上设置“tracku name”字段,以填充轨迹的<name>元素。类似地,如果图层命名为“routeu points”,具有wkbPoint/wkbPoint25D几何图形,则GPX文件中的路由将从具有相同“routeu fid”字段值的点序列生成。“routeu name”字段可以设置在第一个轨迹点上,以填充route的<name>元素。
图层创建选项
FORCE_GPX_TRACK :默认情况下,当编写特性类型为wkblienstring的图层时,GPX驱动程序选择将其作为路由写入。如果指定FORCE_GPX_TRACK=YES,则它们将被写为磁道。
FORCE_GPX_ROUTE :默认情况下,当编写特性为wkbMultiLineString类型的图层时,GPX驱动程序选择将其作为轨迹写入。如果指定FORCE_GPX_ROUTE=YES,则如果多行仅由一条单行组成,则它们将作为路由写入。
数据集创建选项
GPX_USE_EXTENSIONS :默认情况下,GPX驱动程序将丢弃与GPX XML定义不匹配的属性字段(名称、cmt等)。如果指定了GPX_USE_EXTENSIONS=YES,则将在<extensions> 标签。
GPX_EXTENSIONS_NS :仅在设置了GPX_USE_EXTENSIONS=YES和GPX_EXTENSIONS_NS_URL时使用。用于扩展标记的命名空间值。默认为“ogr”。
GPX_EXTENSIONS_NS_URL :仅在设置了GPX_USE_EXTENSIONS=YES和GPX_EXTENSIONS_NS时使用。命名空间URI。默认情况下,“http://osgeo.org/gdal”。
LINEFORMAT :默认情况下,使用本地平台的行终止约定创建文件(在win32上为CR/LF,在所有其他系统上为LF)。这可以通过使用LINEFORMAT图层创建选项来覆盖,该选项的值可以为 CRLF (DOS格式)或 LF (Unix格式)。
航路点、航路和航迹必须写入该命令中,才能对XML模式有效。
从源数据集转换时,可能需要将源数据集中的字段名重命名为预期的GPX属性名,如<name>、<desc>等。。。这可以用 OGR VRT 数据集,或者使用ogr2ogr实用程序的“-sql”选项。
转换为Shapefile时的问题
当翻译 track_points 图层到形状文件,字段名“track_seg_id”和“track_seg_point_id”在.DBF文件中被截断为10个字符,从而导致名称重复。
To avoid this, you can define the
GPX_SHORT_NAMES
configuration option to TRUE to make them be reported respectively as "trksegid" and "trksegptid", which will allow them to be unique once translated to DBF. The "route_point_id" field of route_points layer will also be renamed to "rteptid". But note that no particular processing will be done for any extension field names.要将GPX文件的“轨迹点”层转换为一组形状文件,请执行以下操作:
ogr2ogr --config GPX_SHORT_NAMES YES out input.gpx track_points
Shapefile不支持DateTime类型的字段。它只支持日期类型的字段。因此,默认情况下,您将丢失 Time GPX文件的元素。
您可以使用OGR SQL CAST操作符来转换 time 字段到字符串:
ogr2ogr out input.gpx -sql "SELECT ele, CAST(time AS character(32)) FROM waypoints"
有一种更方便的方法可以选择所有字段并要求将给定类型的字段转换为字符串:
ogr2ogr out input.gpx -fieldTypeToString DateTime
VSI虚拟文件系统API支持
驱动程序支持读取和写入由VSI虚拟文件系统API管理的文件,这些文件包括“常规”文件以及/vsizip/(读写)、/vsigzip/(读写)、/vsicurl/(只读)域中的文件。
还支持写入/dev/stdout或/vsistdout/。
例子
ogrinfo实用程序可用于转储GPX数据文件的内容:
ogrinfo -ro -al input.gpx
ogr2ogr实用程序可用于进行GPX到GPX的转换:
ogr2ogr -f GPX output.gpx input.gpx waypoints routes tracks
使用 <extensions> 输出标签:
ogr2ogr -f GPX -dsco GPX_USE_EXTENSIONS=YES output.gpx input
输出如下:
<?xml version="1.0"?>
<gpx version="1.1" creator="GDAL 1.5dev"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ogr="http://osgeo.org/gdal"
xmlns="http://www.topografix.com/GPX/1/1"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<wpt lat="1" lon="2">
<extensions>
<ogr:Primary_ID>PID5</ogr:Primary_ID>
<ogr:Secondary_ID>SID5</ogr:Secondary_ID>
</extensions>
</wpt>
<wpt lat="3" lon="4">
<extensions>
<ogr:Primary_ID>PID4</ogr:Primary_ID>
<ogr:Secondary_ID>SID4</ogr:Secondary_ID>
</extensions>
</wpt>
</gpx>
使用-sql选项将字段名重新映射到GPX架构允许的字段名:
ogr2ogr -f GPX output.gpx input.shp -sql "SELECT field1 AS name, field2 AS desc FROM input"
FAQ
如何解决“错误6:无法创建几何类型未知的GPX层XXXXXX”?
当要创建的层不公开精确的几何体类型,而只公开泛型wkbUnknown类型时,会发生此错误。例如,将ogr2ogr与PostgreSQL数据源的SQL请求一起使用时就是这样。然后必须显式指定-nlt POINT(或LINESTRING或MULTILINESTRING)。