如何减少 GPX 轨迹里的点数
减少 GPX 轨迹里的点数,通常叫「简化」轨迹,这活儿一般由专门的 GIS 或 GPS 工具来做,不是录制 App 自带的功能。用靠谱的简化工具处理过后,轨迹在地图上看起来基本没变,画出同样的线却用不了那么多点。要是用粗暴的办法——按固定间隔一个个删点——反而会把那些让这条路线之所以是这条路线的急转弯给磨平。
简单说
减少点数的标准做法是简化算法,大多数 GIS 和 GPS 工具实际用的是 Ramer–Douglas–Peucker 算法:线条转向的地方保留点,已经接近直线的路段就把点删掉。一段很陡的之字形弯道因为线条在那里拐得厉害,大部分点会留下来;一条很长很直的林道,哪怕原本有几百个点,用几个点就能画出同样的形状,所以大部分会被删掉。这种处理属于专门用来编辑地理数据的通用工具的活儿,不是记录这次徒步的那个 App 该做的事——因为这是对一条已经录完的轨迹做的一次性清理,不是录制过程中需要当场决定的事。
为什么会有人想这么做
文件体积其实很少是真正的原因。GPX 是纯文本格式,哪怕是一整天的长途徒步,轨迹本身跟同一次徒步留下的照片、视频片段比起来依然是个不大的文件,光靠点数本身很难把文件撑到发不了邮件、传不上去的地步。更常见的原因是接收方有限制:有些导入工具、比较老的专用 GPS 设备,或者某个工作流程里的某一步,对单条轨迹能接受多少个点设了上限,密度太高的文件直接就被拒收了。另一个原因是显示效果:点密度特别高的时候,在某些缩放级别下线条看起来会有点发毛、发抖,简化之后的版本在不改变实际路线的前提下,看着能干净不少。
认真简化和粗暴抽稀的区别
用哪种方法来减点很重要。靠谱的简化算法会看整条线的形状,只保留维持这个形状所必需的点,所以转弯的地方还是转弯,笔直的路段能缩到只剩两端两个点。相比之下,每隔三个、五个点机械地删一个,或者不管线条实际怎么走、每隔固定距离只留一个点,这种粗暴的办法会把轨迹的每一段都一视同仁。
- 按固定间隔删点,可能会把一个急转弯的角削掉,因为机械式的删除根本不知道正是那一个点撑住了这个弯。
- 一小段原路折返的路线,也可能被这么删到去程和回程两条线糊成一条模糊的线,因为固定间隔的删除完全没有机制去特别照顾掉头那个点。
靠谱的简化工具不会给所有点套用同一条机械规则,而是根据轨迹实际的形状来决定留哪些点,所以能避开这些问题。
随点数一起变薄的东西
GPX 里的一个点通常不只带着位置,一般还挂着时间戳和海拔值。删掉一个点,连带这些信息也一起没了,不只是地图上少了一个位置。简化得比较狠的轨迹,留下的时间戳也会变少,要是后续有什么地方要从文件重新算配速或者行进时间,而不是直接读已经存好的总数,这种影响就会更明显。海拔也是同样的道理:为了在地图上画出干净线条而做的简化,优化的是位置,不是海拔,原始记录里那些小起伏,只要恰好落在一段近似直线的路段中间,就可能被整段抹平。
TrailCam 在这里扮演什么角色
TrailCam 按实际走的密度记录路线,导出成标准 GPX 1.1 文件之前不会先替你抽稀,导出的就是记录下来的那次徒步本身,而不是已经被谁按自己的需求减过点的版本。如果要传去的地方需要的点数比这更少,那是导出之后另外找专门做简化的工具来处理的一步,不是 TrailCam 里的一个设置。GPX 导出是可选的 TrailCam Pro 里的功能,App 本身免费下载。
常见问题
- 减少点数会不会改变轨迹显示的距离?
- 认真简化过的轨迹形状基本没变,距离也几乎不会变,因为算法本来就是按保留线条形状的原则来挑点的。按固定间隔机械删点的粗暴办法,因为会削掉认真的方法本该留住的转角,距离的偏差往往会更明显一些。
- 导出之前,能不能让记录 App 先帮我简化轨迹?
- 这要看具体是哪款 App,但一般来说这不是记录 App 导出时会自动做的事,而是由专门做轨迹编辑的 GIS 或 GPS 软件另外处理的一步。按完整密度导出的 GPX 文件,之后随时都能交给专门的简化工具处理。
- GPX 轨迹有没有一个「点太多了」的明确标准?
- 没有统一标准,完全取决于文件最终要去的那个工具或设备的上限。同样密度的轨迹,某个导入工具能顺利接受,换成上限更低的老式 GPS 设备或者别的工作流程,就可能被判定为密度太高。
记录你自己的轨迹
TrailCam 是一款 iPhone 上的 GPS 轨迹记录 App,会把沿途拍的视频、照片和语音钉在你拍下它的那个位置,并支持导出成 GPX 1.1 或 CSV。免费下载。