<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.0 20120330//EN" "JATS-journalpublishing1.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">INFORMATICA</journal-id>
<journal-title-group><journal-title>Informatica</journal-title></journal-title-group>
<issn pub-type="epub">1822-8844</issn><issn pub-type="ppub">0868-4952</issn><issn-l>0868-4952</issn-l>
<publisher>
<publisher-name>Vilnius University</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">INFO1209</article-id>
<article-id pub-id-type="doi">10.15388/Informatica.2019.196</article-id>
<article-categories><subj-group subj-group-type="heading">
<subject>Research Article</subject></subj-group></article-categories>
<title-group>
<article-title>A Heading Maintaining Oriented Compression Algorithm for GPS Trajectory Data</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Hao</surname><given-names>Pengfei</given-names></name><xref ref-type="aff" rid="j_info1209_aff_001"/><bio>
<p><bold>P. Hao</bold>, born in 1991, MS candidate. His research interests include data mining.</p></bio>
</contrib>
<contrib contrib-type="author">
<name><surname>Yao</surname><given-names>Chunlong</given-names></name><email xlink:href="yaocl@dlpu.edu.cn">yaocl@dlpu.edu.cn</email><xref ref-type="aff" rid="j_info1209_aff_001"/><xref ref-type="corresp" rid="cor1">∗</xref><bio>
<p><bold>C. Yao</bold>, born in 1971, PhD, professor. His research interests include database theory and application, data mining, intelligent transportation.</p></bio>
</contrib>
<contrib contrib-type="author">
<name><surname>Meng</surname><given-names>Qingbin</given-names></name><xref ref-type="aff" rid="j_info1209_aff_001"/><bio>
<p><bold>Q. Meng</bold>, born in 1991, MS, professor. His research interests include data mining.</p></bio>
</contrib>
<contrib contrib-type="author">
<name><surname>Yu</surname><given-names>Xiaoqiang</given-names></name><xref ref-type="aff" rid="j_info1209_aff_001"/><bio>
<p><bold>X. Yu</bold>, born in 1974, PhD, associate professor. His research interests include computer application.</p></bio>
</contrib>
<contrib contrib-type="author">
<name><surname>Li</surname><given-names>Xu</given-names></name><xref ref-type="aff" rid="j_info1209_aff_001"/><bio>
<p><bold>X. Li</bold>, born in 1981, PhD, associate professor. Her research interests include machine learning.</p></bio>
</contrib>
<aff id="j_info1209_aff_001">School of Information Science and Engineering, <institution>Dalian Polytechnic University</institution>, Dalian, <country>China</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>∗</label>Corresponding author.</corresp>
</author-notes>
<pub-date pub-type="ppub"><year>2019</year></pub-date>
<pub-date pub-type="epub"><day>1</day><month>1</month><year>2019</year></pub-date><volume>30</volume><issue>1</issue><fpage>33</fpage><lpage>52</lpage><history><date date-type="received"><month>10</month><year>2017</year></date><date date-type="accepted"><month>11</month><year>2018</year></date></history>
<permissions><copyright-statement>© 2019 Vilnius University</copyright-statement><copyright-year>2019</copyright-year>
<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
<license-p>Open access article under the <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/">CC BY</ext-link> license.</license-p></license></permissions>
<abstract>
<p>The raw trajectories contain large amounts of redundant data that bring challenges to storage, transmission and processing. Trajectory compression algorithms can reduce the number of positioning points while minimizing the loss of information. This paper proposes a heading maintaining oriented trajectory compression algorithm, which takes into account both position information and direction information. By setting an angle threshold, the algorithm can achieve a more accurate approximation of trajectories than traditional position-preserving trajectory compression algorithms. The experimental results show that the algorithm can ensure certain effect on the direction information and is more flexible.</p>
</abstract>
<kwd-group>
<label>Key words</label>
<kwd>trajectory compression</kwd>
<kwd>heading maintaining</kwd>
<kwd>flexible</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="j_info1209_s_001">
<label>1</label>
<title>Introduction</title>
<p>In recent years, with the popularization and application of GPS-enabled devices, massive volumes of GPS trajectory data are recorded. These data hide interesting and valuable knowledge patterns describing the behaviour of moving objects (Morzy and Rosikiewicz, <xref ref-type="bibr" rid="j_info1209_ref_012">2007</xref>). Individual trajectories can reflect professional characteristics of the user, trajectories with high degree of spatio-temporal regularities on weekdays imply the user has a fixed full-time job, trajectories with irregular spatio-temporal characteristics in a week imply work unit of the user is not fixed (Li <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_009">2014</xref>). Group trajectories contain a lot of valuable knowledge patterns. According to these patterns, people can find restaurants and travel routes that interest them. Urban function units (e.g. residential area, commercial area and industrial area) also can be distinguished by using these patterns (Li <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_009">2014</xref>).</p>
<p>Typically, the size of raw trajectory data recorded by GPS-enabled devices is very large. Consider Beijing with 67,000 taxis, suppose we collect trajectory data in every 2–3 seconds, the size of the trajectories generated by these taxis for just a single day is as high as 60TB (Yuan, <xref ref-type="bibr" rid="j_info1209_ref_022">2012</xref>). Such massive volumes of data will bring some problems for location-based applications. (1) It will take up a lot of storage spaces. (2) Sending a large amount of GPS trajectory data will cause network overhead. (3) It will bring a heavy burden for web browsers when rendering these trajectories on the client side. It takes approximately 1s for rendering 1000 points on the map (Chen <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_003">2012</xref>). (4) When the size of trajectory data gets larger, it becomes more difficult to find valuable patterns from the trajectory data. Reducing the size of trajectory data has the potential to make it more easily (Giannotti <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_005">2007</xref>).</p>
<sec id="j_info1209_s_002">
<label>1.1</label>
<title>Existing Trajectory Compression Algorithms</title>
<p>To solve the trajectory compression problem various algorithms are proposed, each offers a different method to compress trajectory data. In this section, we will briefly introduce the related algorithms of trajectory compression.</p>
<p>Douglas-Peucker (DP) algorithm (Douglas and Peucker, <xref ref-type="bibr" rid="j_info1209_ref_004">1973</xref>) is widely used in computer aided design (CAD) area, it can be employed to compress trajectory data. Given a trajectory <italic>T</italic> and a parameter of spatial error <italic>μ</italic>, DP algorithm constructs the approximate trajectory <inline-formula id="j_info1209_ineq_001"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> by repeatedly adding points from <italic>T</italic> until the maximum spatial error of <inline-formula id="j_info1209_ineq_002"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> becomes smaller than <italic>μ</italic>. DP algorithm can effectively compress trajectory data, but it only focuses on spatial information. TD–TR (Meratnia and de By, <xref ref-type="bibr" rid="j_info1209_ref_011">2004</xref>) is an improvement algorithm of DP, which uses SED error instead of spatial error. Compared to DP algorithm, TD–TR algorithm has the benefit of taking temporal information into account. Optimal algorithms (Perez and Vidal, <xref ref-type="bibr" rid="j_info1209_ref_015">1994</xref>; Salotti, <xref ref-type="bibr" rid="j_info1209_ref_018">2000</xref>, <xref ref-type="bibr" rid="j_info1209_ref_019">2001</xref>) aim at minimizing spatial error, by removing positioning points in searching process they can achieve a minimum spatial error compression. Due to the computational overhead of the optimal algorithms, near-optimal algorithms are proposed to reduce the time complexity. Near-optimal algorithms proposed in papers (Kolesnikov and Franti, <xref ref-type="bibr" rid="j_info1209_ref_007">2002</xref>, <xref ref-type="bibr" rid="j_info1209_ref_008">2003</xref>) can achieve a faster search by reducing the search space and using heuristic search. Paper (Tian and Xu, <xref ref-type="bibr" rid="j_info1209_ref_021">2011</xref>) proposes a trajectory compression method based on turning point judgment method, this algorithm uses turning points to delineate a trajectory, in which the advantages and disadvantages of point-by-point judgment method and combined judgment method are analysed. Trajectory simplification (TS) algorithm is proposed in paper (Chen <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_002">2009</xref>), which considers both the shape skeleton and the semantic meanings of a GPS trajectory. TS algorithm uses heading change degree of a point and distance between this point and its most adjacent neighbours to weight importance of the point, the points with high weight will be retained in final compressed trajectory. Open Window Time Ratio (OPW-TR) (Meratnia and de By, <xref ref-type="bibr" rid="j_info1209_ref_011">2004</xref>) is a compression algorithm for trajectory data, given a trajectory T and a parameter of SED error <italic>μ</italic>, OPW-TR algorithm starts by defining a segment between the first point P1 (the anchor point) and the third point P3 (the float point). Then the algorithm calculates all SED errors of the points between the anchor point and the float point. As long as all SED values are below <italic>μ</italic>, an attempt is made to move the float point one point forward in trajectory T. When the SED threshold <italic>μ</italic> is going to be exceeded, a new anchor point will be chosen out. The process will repeat until the entire trajectory has been transformed into a piecewise linear approximation. Based on the different anchor point select strategies, OPW-TR has two modes called Before-OPW-TR and Normal-OPW-TR. Threshold-guided algorithm (Potamias <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_016">2006</xref>) compresses trajectory by constructing a safe area using moving object’s speed and direction, if an incoming positioning point is in the safe area, then this point contributes little information and hence can be discarded without significant loss in accuracy. Spatial QUalIty Simplification Heuristic – Extended (SQUISH-E) algorithm (Muckell <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_014">2014</xref>) is an extended version of SQUISH algorithm (Muckell <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_013">2011</xref>). Compared to SQUISH algorithm, SQUISH-E algorithm has the capability of compressed trajectories while ensuring that SED error is within a user-specified bound. The main idea of SQUISH-E algorithm is to construct a priority queue of positioning points, this algorithm compresses trajectory by repeatedly removing the positioning point of the lowest priority until the termination condition is met. And based on parameters setting, SQUISH-E can be divided into SQUISH-E(<italic>μ</italic>) and SQUISH-E(<italic>λ</italic>). A hybrid trajectory compression algorithm based on multiple spatiotemporal characteristics is proposed in paper (Jiagao <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_006">2015</xref>), this algorithm uses characteristic points to delineate a trajectory, and the characteristic points are chosen by using both distance, direction and speed information. Articles (Qian and Lu, <xref ref-type="bibr" rid="j_info1209_ref_017">2017</xref>; Sun <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_020">2016</xref>) are a review of related algorithms and have certain reference value. Document (Cao and Li, <xref ref-type="bibr" rid="j_info1209_ref_001">2017</xref>) proposes DOTS (Directed acyclic graph based Online Trajectory Simplification) algorithm and constructs a directed acyclic graph on-line simplification.</p>
</sec>
<sec id="j_info1209_s_003">
<label>1.2</label>
<title>The Proposed Algorithm</title>
<p>The positioning points where an object changed moving direction contain rich semantic meanings, these points imply user’s behaviour, such as, staying, taking photos or watching something attractive, etc. Without these positioning points, we will know little about user’s behaviour. In this paper, we propose a heading maintaining oriented trajectory compression algorithm called HMOTC.</p>
<p>The HMOTC algorithm has the benefit of taking into account both the heading change degree of positioning points and the direction change degree between positioning points and trajectory segment. So, this algorithm can accurately capture the direction information of the trajectory. As shown in Fig. <xref rid="j_info1209_fig_001">1</xref>, a multi transportation mode (walk → bus → walk → bus → walk → train) GPS trajectory from north to south is compressed by DP, TD-TR and our HMOTC. For traditional position-preserving compression algorithms DP and TD-TR, we could know little about how the trajectory’s user walked on walk segment from the compressed trajectories, because they lose too much of the moving object’s heading information. For HMOTC algorithms, because the direction information of the trajectory is taken into account, we can know more details about user’s walking direction and walking route from the compressed trajectories.</p>
<fig id="j_info1209_fig_001">
<label>Fig. 1</label>
<caption>
<p>A multi transportation mode GPS trajectory and it’s compressed representations.</p>
</caption>
<graphic xlink:href="info1209_g001.jpg"/>
</fig>
<p>Another benefit of HMOTC algorithm is that the algorithm has the ability of controlling compression with respect to spatial error. Without spatial information control it may lead to an inaccuracy compression. To illustrate that, let us take DPTS-SP-Prac (Long <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_010">2013</xref>) algorithm as an example. DPTS-SP-Prac is a direction-preserving trajectory compression algorithm which focuses on capturing the direction change degree between positioning points and trajectory segment, the algorithm has a theoretical bounded position error, but it is uncontrollable. As shown in Fig. <xref rid="j_info1209_fig_002">2</xref>, the multi transportation mode trajectory is compressed under a <inline-formula id="j_info1209_ineq_003"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mn>40</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>∘</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${40^{\circ }}$]]></tex-math></alternatives></inline-formula> angle threshold. The DPTS-SP-Prac algorithm maintains a good trajectory contour in the walk segment and the bus segment. However, as the train segment has the characteristics of high speed and small direction change, a lot of spatial information is lost, the maximum perpendicular distance error of DPTS-SP-Prac in train segment is as high as 2.2 km (refer to Fig. <xref rid="j_info1209_fig_002">2</xref>, dashed box area). For the proposed algorithm, because it has the ability of spatial information control, the algorithm can maintain a good trajectory contour in walk, bus and train segments.</p>
<fig id="j_info1209_fig_002">
<label>Fig. 2</label>
<caption>
<p>The multi transportation mode trajectory after being compressed by DPTS-SP-Prac and HMOTC.</p>
</caption>
<graphic xlink:href="info1209_g002.jpg"/>
</fig>
<p>The HMOTC has the flexibility of controlling compression with respect to both spatial error and direction error, so the compression process can be precisely controlled according to users’ needs. If only the direction information of the trajectory is taken into account, the SED threshold of the algorithm can be set to positive infinity. If only the spatial information of the trajectory is taken into account, the angle threshold of the algorithm can be set to <inline-formula id="j_info1209_ineq_004"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mn>180</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>∘</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${180^{\circ }}$]]></tex-math></alternatives></inline-formula>. Because the algorithm can compress trajectory data while retrieving points from trajectory, it has the advantages of supporting both online and offline applications.</p>
<p>The remainder of this paper is organized as follows. In Section <xref rid="j_info1209_s_004">2</xref>, some related definitions about trajectory compression are reported. After that our HMOTC algorithm is described in Section <xref rid="j_info1209_s_006">3</xref>. An empirical evaluation of trajectory compression algorithms with different error measurements is given in Section <xref rid="j_info1209_s_009">4</xref>. Finally, paper conclusions are discussed in Section <xref rid="j_info1209_s_013">5</xref>.</p>
</sec>
</sec>
<sec id="j_info1209_s_004">
<label>2</label>
<title>Related Definitions</title>
<p>According to the loss of information, trajectory compression algorithms can be classified into two categories: lossless and lossy compression. Lossless compression algorithms enable reconstruction of the original trajectory data without information loss. Lossy compression will cause information loss, the trajectory data will be changed and can not be reconstructed. Usually, the compression efficiency of lossless compression algorithms is not obvious. For example, the compression efficiency of a lossless compression algorithm proposed in Zheng <italic>et al.</italic> (<xref ref-type="bibr" rid="j_info1209_ref_023">2005</xref>) is 25%. In contrast, lossy compression can significantly reduce the data size while maintaining an acceptable error tolerance. Due to the advantage of lossy compression, this paper focuses on lossy compression of trajectory data.</p>
<p>Generally, a GPS trajectory <italic>T</italic> is a temporally ordered sequence of positioning points <inline-formula id="j_info1209_ineq_005"><alternatives><mml:math>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$T={P_{1}},{P_{2}},{P_{3}},\dots ,{P_{n-1}},{P_{n}}$]]></tex-math></alternatives></inline-formula>, each point <inline-formula id="j_info1209_ineq_006"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> consists of three tuples <inline-formula id="j_info1209_ineq_007"><alternatives><mml:math>
<mml:mo fence="true" stretchy="false">⟨</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo fence="true" stretchy="false">⟩</mml:mo></mml:math><tex-math><![CDATA[$\langle {X_{i}},{Y_{i}},{t_{i}}\rangle $]]></tex-math></alternatives></inline-formula>, where <inline-formula id="j_info1209_ineq_008"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${X_{i}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1209_ineq_009"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${Y_{i}}$]]></tex-math></alternatives></inline-formula> represent the coordinate at time stamp <inline-formula id="j_info1209_ineq_010"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${t_{i}}$]]></tex-math></alternatives></inline-formula>. The problem of lossy trajectory compression is to seek a set of temporally ordered points <inline-formula id="j_info1209_ineq_011"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo fence="true" stretchy="false">[</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo fence="true" stretchy="false">]</mml:mo>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${T^{\prime }}={P_{i1}},{P_{i2}},{P_{i3}},\dots ,{P_{i[m-1]}},{P_{im}}$]]></tex-math></alternatives></inline-formula> (a subset of <italic>T</italic>) as an approximation of <italic>T</italic>, where <inline-formula id="j_info1209_ineq_012"><alternatives><mml:math>
<mml:mn>1</mml:mn>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">&lt;</mml:mo>
<mml:mo stretchy="false">⋯</mml:mo>
<mml:mo mathvariant="normal">&lt;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">n</mml:mi></mml:math><tex-math><![CDATA[$1={i_{1}}<\cdots <{i_{m}}=n$]]></tex-math></alternatives></inline-formula>. And the definition of compression ratio CR in this paper is defined as 
<disp-formula id="j_info1209_eq_001">
<label>(1)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">CR</mml:mi>
<mml:mo>=</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mo>⩾</mml:mo>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{CR}=\frac{n}{m},\hspace{1em}n\geqslant m.\]]]></tex-math></alternatives>
</disp-formula>
</p>
<sec id="j_info1209_s_005">
<label>2.1</label>
<title>Error Measures</title>
<p>There are many error measures to evaluate the accuracy of trajectory compression algorithms. In this section, we will introduce four error measures called spatial error, Synchronous Euclidean Distance (SED) (Potamias <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_016">2006</xref>) error, speed error and heading error.</p><statement id="j_info1209_stat_001"><label>Definition 1.</label>
<p>Spatial error: Given a trajectory <italic>T</italic> and its compressed representation <inline-formula id="j_info1209_ineq_013"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula>, the spatial error of <inline-formula id="j_info1209_ineq_014"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> with respect to a point <inline-formula id="j_info1209_ineq_015"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> in <italic>T</italic> is defined as the distance between <inline-formula id="j_info1209_ineq_016"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_017"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i}},{y_{i}},{t_{i}}$]]></tex-math></alternatives></inline-formula>) and its estimation <inline-formula id="j_info1209_ineq_018"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${P^{\prime }_{i}}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_019"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x^{\prime }_{i}},{y^{\prime }_{i}},{t_{i}}$]]></tex-math></alternatives></inline-formula>). If <inline-formula id="j_info1209_ineq_020"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> contains <inline-formula id="j_info1209_ineq_021"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>, then <inline-formula id="j_info1209_ineq_022"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P^{\prime }_{i}}={P_{i}}$]]></tex-math></alternatives></inline-formula>. Otherwise, the closest point to <inline-formula id="j_info1209_ineq_023"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> is defined as <inline-formula id="j_info1209_ineq_024"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${P^{\prime }_{i}}$]]></tex-math></alternatives></inline-formula> which is along the line between pred<inline-formula id="j_info1209_ineq_025"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_026"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>) and succT′ (<inline-formula id="j_info1209_ineq_027"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>), where predT′ (<inline-formula id="j_info1209_ineq_028"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>) and succT′ (<inline-formula id="j_info1209_ineq_029"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>) denote <inline-formula id="j_info1209_ineq_030"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>’s closest predecessor and successor among the points in <inline-formula id="j_info1209_ineq_031"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> (Muckell <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_014">2014</xref>).</p></statement><statement id="j_info1209_stat_002"><label>Definition 2.</label>
<p>SED error: Synchronous euclidean distance is an error measure which considers both spatial and temporal information. The definition of SED error is similar to spatial error, the SED error of <inline-formula id="j_info1209_ineq_032"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> with respect to a point <inline-formula id="j_info1209_ineq_033"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> in <italic>T</italic> is defined as the distance between <inline-formula id="j_info1209_ineq_034"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_035"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i}},{y_{i}},{t_{i}}$]]></tex-math></alternatives></inline-formula>) and its estimation <inline-formula id="j_info1209_ineq_036"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${P^{\prime }_{i}}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_037"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x^{\prime }_{i}},{y^{\prime }_{i}},{t_{i}}$]]></tex-math></alternatives></inline-formula>). The difference is the coordinate <inline-formula id="j_info1209_ineq_038"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${x^{\prime }_{i}},{y^{\prime }_{i}}$]]></tex-math></alternatives></inline-formula> of <inline-formula id="j_info1209_ineq_039"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${P^{\prime }_{i}}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_040"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x^{\prime }_{i}},{y^{\prime }_{i}},{t_{i}}$]]></tex-math></alternatives></inline-formula>) are defined using formulas (<xref rid="j_info1209_eq_004">4</xref>) and (<xref rid="j_info1209_eq_005">5</xref>), where <inline-formula id="j_info1209_ineq_041"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{s}}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_042"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{s}},{y_{s}},{t_{s}}$]]></tex-math></alternatives></inline-formula>) = predT′ (<inline-formula id="j_info1209_ineq_043"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>) and <inline-formula id="j_info1209_ineq_044"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{e}}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_045"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{e}},{y_{e}},{t_{e}}$]]></tex-math></alternatives></inline-formula>) = succ T′ (<inline-formula id="j_info1209_ineq_046"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>). <disp-formula-group id="j_info1209_dg_001">
<disp-formula id="j_info1209_eq_002">
<label>(2)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \Delta {t_{1}}={t_{e}}-{t_{s}},\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_003">
<label>(3)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \Delta {t_{2}}={t_{i}}-{t_{s}},\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_004">
<label>(4)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi mathvariant="italic">x</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mo maxsize="2.03em" minsize="2.03em" fence="true" mathvariant="normal">(</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mo>△</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mo>△</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo maxsize="2.03em" minsize="2.03em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \Delta x{\prime _{i}}={x_{s}}+\bigg(\frac{\triangle {t_{2}}}{\triangle {t_{1}}}\bigg)\cdot ({x_{e}}-{x_{s}}),\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_005">
<label>(5)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi mathvariant="italic">y</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mo maxsize="2.03em" minsize="2.03em" fence="true" mathvariant="normal">(</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mo>△</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mo>△</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:mo maxsize="2.03em" minsize="2.03em" fence="true" mathvariant="normal">)</mml:mo>
<mml:mo>·</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \Delta y{\prime _{i}}={y_{s}}+\bigg(\frac{\triangle {t_{2}}}{\triangle {t_{1}}}\bigg)\cdot ({y_{e}}-{y_{s}}).\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group></p></statement>
<p>For instance, in Fig. <xref rid="j_info1209_fig_003">3</xref>(a), spatial errors of <inline-formula id="j_info1209_ineq_047"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{1}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1209_ineq_048"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{4}}$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1209_ineq_049"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{6}}$]]></tex-math></alternatives></inline-formula> are zero and spatial error of <inline-formula id="j_info1209_ineq_050"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{2}}$]]></tex-math></alternatives></inline-formula> is the perpendicular distance from <inline-formula id="j_info1209_ineq_051"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{2}}$]]></tex-math></alternatives></inline-formula> to line <inline-formula id="j_info1209_ineq_052"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{1}}{P_{4}}$]]></tex-math></alternatives></inline-formula>. In Fig. <xref rid="j_info1209_fig_003">3</xref>(b), SED errors of <inline-formula id="j_info1209_ineq_053"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{1}},{P_{4}},{P_{6}}$]]></tex-math></alternatives></inline-formula> are zero and SED error of <inline-formula id="j_info1209_ineq_054"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{2}}$]]></tex-math></alternatives></inline-formula> is the distance between <inline-formula id="j_info1209_ineq_055"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{2}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_056"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup></mml:math><tex-math><![CDATA[${P^{\prime }_{2}}$]]></tex-math></alternatives></inline-formula>.</p>
<fig id="j_info1209_fig_003">
<label>Fig. 3</label>
<caption>
<p>Spatial and SED errors are illustrated by using <inline-formula id="j_info1209_ineq_057"><alternatives><mml:math>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$T={P_{1}},{P_{2}},{P_{3}},{P_{4}},{P_{5}},{P_{6}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_058"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${T^{\prime }}={P_{1}},{P_{4}},{P_{6}}$]]></tex-math></alternatives></inline-formula>.</p>
</caption>
<graphic xlink:href="info1209_g003.jpg"/>
</fig>
<statement id="j_info1209_stat_003"><label>Definition 3.</label>
<p>Speed error: Given a trajectory <italic>T</italic> and its compressed representation <inline-formula id="j_info1209_ineq_059"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula>, the speed error of <inline-formula id="j_info1209_ineq_060"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> with respect to a point <inline-formula id="j_info1209_ineq_061"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> (<inline-formula id="j_info1209_ineq_062"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${x_{i}},{y_{i}},{t_{i}}$]]></tex-math></alternatives></inline-formula>) in <italic>T</italic> is defined as the absolute difference value between Speed (<inline-formula id="j_info1209_ineq_063"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>) and AverageSpeed (<inline-formula id="j_info1209_ineq_064"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{s}}{P_{e}}$]]></tex-math></alternatives></inline-formula>), where <inline-formula id="j_info1209_ineq_065"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mtext>pred</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${P_{s}}({x_{s}},{y_{s}},{t_{s}})=\text{pred}{T^{\prime }}({P_{i+1}})$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1209_ineq_066"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mtext>succ</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${P_{e}}({x_{e}},{y_{e}},{t_{e}})=\text{succ}{T^{\prime }}({P_{i}})$]]></tex-math></alternatives></inline-formula>. <inline-formula id="j_info1209_ineq_067"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>’s speed and average speed of segment <inline-formula id="j_info1209_ineq_068"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{s}}{P_{e}}$]]></tex-math></alternatives></inline-formula> are defined as follows: <disp-formula-group id="j_info1209_dg_002">
<disp-formula id="j_info1209_eq_006">
<label>(6)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">Speed</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">Distance</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal" stretchy="false">/</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="normal">‡</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{Speed}({P_{i}})=\mathit{Distance}({P_{i}},{P_{i+1}})/({t_{i+1}}-{t_{i}}),{P_{i}}\mathrm{\ddagger }{P_{n}},\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_007">
<label>(7)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">AverageSpeed</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">Distance</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo mathvariant="normal" stretchy="false">/</mml:mo>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{AverageSpeed}({P_{s}}{P_{e}})=\mathit{Distance}({P_{s}},{P_{e}})/({t_{e}}-{t_{s}}).\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group></p></statement><statement id="j_info1209_stat_004"><label>Definition 4.</label>
<p>Heading error: given a trajectory <italic>T</italic> and its compressed representation <inline-formula id="j_info1209_ineq_069"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula>, the heading error of <inline-formula id="j_info1209_ineq_070"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> with respect to a point <inline-formula id="j_info1209_ineq_071"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> in <italic>T</italic> is defined as heading change between Heading (<inline-formula id="j_info1209_ineq_072"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>) and Heading (<inline-formula id="j_info1209_ineq_073"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{s}}{P_{e}}$]]></tex-math></alternatives></inline-formula>), where <inline-formula id="j_info1209_ineq_074"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mtext>pred</mml:mtext>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${P_{s}}=\text{pred}{T^{\prime }}({P_{i}}+1)$]]></tex-math></alternatives></inline-formula>, <inline-formula id="j_info1209_ineq_075"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">s</mml:mi>
<mml:mi mathvariant="italic">u</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:mi mathvariant="italic">c</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[${P_{e}}=succ{T^{\prime }}({P_{i}})$]]></tex-math></alternatives></inline-formula>. <inline-formula id="j_info1209_ineq_076"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula>’s heading, heading of segment <inline-formula id="j_info1209_ineq_077"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{s}}{P_{e}}$]]></tex-math></alternatives></inline-formula> and HeadingChange (<inline-formula id="j_info1209_ineq_078"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${h_{1}},{h_{2}}$]]></tex-math></alternatives></inline-formula>) are defined as follows: <disp-formula-group id="j_info1209_dg_003">
<disp-formula id="j_info1209_eq_008">
<label>(8)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">Heading</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo><mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="true">→</mml:mo></mml:mover>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="normal">‡</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{Heading}({P_{i}})=\overrightarrow{{P_{i}}{P_{i+1}}},{P_{i}}\mathrm{\ddagger }{P_{n}},\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_009">
<label>(9)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">Heading</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo><mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="true">→</mml:mo></mml:mover>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{Heading}({P_{s}}{P_{e}})=\overrightarrow{{P_{s}}{P_{e}}},\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_010">
<label>(10)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">HeadingChange</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfenced separators="" open="{" close="">
<mml:mrow>
<mml:mtable columnspacing="4.0pt" equalrows="false" columnlines="none" equalcolumns="false" columnalign="left left">
<mml:mtr>
<mml:mtd class="array">
<mml:msup>
<mml:mrow>
<mml:mn>360</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>∘</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>−</mml:mo>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:mo mathvariant="normal">&gt;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>180</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>∘</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd class="array">
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd class="array">
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:mo>⩽</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mn>180</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>∘</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{HeadingChange}({h_{1}},{h_{2}})=\left\{\begin{array}{l@{\hskip4.0pt}l}{360^{\circ }}-|{h_{1}}-{h_{2}}|,\hspace{1em}& |{h_{1}}-{h_{2}}|>{180^{\circ }},\\ {} |{h_{1}}-{h_{2}}|,\hspace{1em}& |{h_{1}}-{h_{2}}|\leqslant {180^{\circ }}.\end{array}\right.\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group></p></statement>
</sec>
</sec>
<sec id="j_info1209_s_006">
<label>3</label>
<title>HMOTC Algorithm</title>
<p>A key feature of our HMOTC algorithm is that it takes into account the direction information of GPS trajectories, the algorithm controls both the heading change degree of positioning points and the direction change degree between positioning points and trajectory segment.</p>
<sec id="j_info1209_s_007">
<label>3.1</label>
<title>Algorithm Description</title>
<p>Given a trajectory <italic>T</italic>, a SED threshold <italic>μ</italic> and an angle threshold <italic>θ</italic>, HMOTC algorithm starts by defining a segment between the first point <inline-formula id="j_info1209_ineq_079"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{1}}$]]></tex-math></alternatives></inline-formula> and the third point <inline-formula id="j_info1209_ineq_080"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{3}}$]]></tex-math></alternatives></inline-formula> in <italic>T</italic>, where <inline-formula id="j_info1209_ineq_081"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{1}}$]]></tex-math></alternatives></inline-formula> is called anchor point <inline-formula id="j_info1209_ineq_082"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_083"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{3}}$]]></tex-math></alternatives></inline-formula> is called float point <inline-formula id="j_info1209_ineq_084"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>. Then the following steps are applied in segment (window) <inline-formula id="j_info1209_ineq_085"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula>:</p>
<p>(1) Checking whether predT(<inline-formula id="j_info1209_ineq_086"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) is a turning point by calculating heading change <italic>α</italic> between points predT(<inline-formula id="j_info1209_ineq_087"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) and predT(predT(<inline-formula id="j_info1209_ineq_088"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>)). If <inline-formula id="j_info1209_ineq_089"><alternatives><mml:math>
<mml:mi mathvariant="italic">α</mml:mi>
<mml:mo mathvariant="normal">&gt;</mml:mo>
<mml:mi mathvariant="italic">θ</mml:mi></mml:math><tex-math><![CDATA[$\alpha >\theta $]]></tex-math></alternatives></inline-formula> (i.e. predT(<inline-formula id="j_info1209_ineq_090"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) is a turning point), then predT(<inline-formula id="j_info1209_ineq_091"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) becomes the new anchor point and the second point behind predT(<inline-formula id="j_info1209_ineq_092"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) becomes the new float point.</p>
<p>(2) It is not enough to capture the heading change of a moving object by calculating heading change of a single point, this policy is vulnerable to error propagation, as a moving object could change its heading gradually. In order to address this problem, the heading change of any two points in segment <inline-formula id="j_info1209_ineq_093"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula> (except point <inline-formula id="j_info1209_ineq_094"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) and the heading change between segment <inline-formula id="j_info1209_ineq_095"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula> and each point in segment <inline-formula id="j_info1209_ineq_096"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula> (except point <inline-formula id="j_info1209_ineq_097"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) are calculated. If there is a heading change value greater than the given angle threshold <italic>θ</italic>, then the point (between <inline-formula id="j_info1209_ineq_098"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_099"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) of the minimum Accumulated Synchronous Euclidean Distance (ASED) error becomes the new anchor point and the second point behind it becomes the new float point.</p>
<p>(3) For maintaining shape skeleton of the trajectory and minimizing the loss of spatiotemporal information, SED errors of the points between <inline-formula id="j_info1209_ineq_100"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_101"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula> are calculated. If there is a SED error value greater than the given SED threshold <italic>μ</italic>, then the point (between <inline-formula id="j_info1209_ineq_102"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_103"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) of the minimum ASED error becomes the new anchor point and the second point behind it becomes the new float point.</p>
<p>As long as the anchor point <inline-formula id="j_info1209_ineq_104"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> is not changed, an attempt is made to move the float point <inline-formula id="j_info1209_ineq_105"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula> one point forward in trajectory <italic>T</italic>, and then apply the above steps in segment <inline-formula id="j_info1209_ineq_106"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula>. When there is a new anchor point, the above steps can be applied in segment <inline-formula id="j_info1209_ineq_107"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{a+2}}$]]></tex-math></alternatives></inline-formula> (i.e. <inline-formula id="j_info1209_ineq_108"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula>), where <inline-formula id="j_info1209_ineq_109"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> is the new anchor point and <inline-formula id="j_info1209_ineq_110"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a+2}}$]]></tex-math></alternatives></inline-formula> is the new float point. The above process will be repeated until the entire trajectory <italic>T</italic> has been transformed into a piecewise linear approximation <inline-formula id="j_info1209_ineq_111"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula>.</p>
<p>For compressing trajectories more accurate, ASED error measure is used for anchor point selection. Given anchor point <inline-formula id="j_info1209_ineq_112"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> and float point <inline-formula id="j_info1209_ineq_113"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>, the ASED of <inline-formula id="j_info1209_ineq_114"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{i}}$]]></tex-math></alternatives></inline-formula> <inline-formula id="j_info1209_ineq_115"><alternatives><mml:math>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal">&gt;</mml:mo>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo mathvariant="normal">&gt;</mml:mo>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$(f>i>a)$]]></tex-math></alternatives></inline-formula> is defined as 
<disp-formula id="j_info1209_eq_011">
<label>(11)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="right">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">ASED</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∑</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:mi mathvariant="italic">SEDError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{ASED}({P_{i}})={\sum \limits_{i=a}^{f}}\mathit{SEDError}\big({T_{a}}f,{T^{\prime }_{a}}f,{P_{i}}\big),\]]]></tex-math></alternatives>
</disp-formula> 
where <inline-formula id="j_info1209_ineq_116"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${T_{a}}f={P_{a}},{P_{a+1}},\dots ,{P_{f}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_117"><alternatives><mml:math>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${T^{\prime }_{a}}f={P_{a}},{P_{i}},{P_{f}}$]]></tex-math></alternatives></inline-formula>. By using ASED the most appropriate anchor point can be selected. For example, as shown in Fig. <xref rid="j_info1209_fig_004">4</xref>, <inline-formula id="j_info1209_ineq_118"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="italic">f</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>7</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>9</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${T_{a}}f={P_{1}},{P_{2}},{P_{3}},{P_{4}},{P_{5}},{P_{6}},{P_{7}},{P_{8}},{P_{9}}$]]></tex-math></alternatives></inline-formula>, where <inline-formula id="j_info1209_ineq_119"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{1}}$]]></tex-math></alternatives></inline-formula> is the anchor point and <inline-formula id="j_info1209_ineq_120"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>9</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{9}}$]]></tex-math></alternatives></inline-formula> is the float point. For selecting a new anchor point between <inline-formula id="j_info1209_ineq_121"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_122"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>, the ASED errors of <inline-formula id="j_info1209_ineq_123"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>7</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{2}},{P_{3}},{P_{4}},{P_{5}},{P_{6}},{P_{7}},{P_{8}}$]]></tex-math></alternatives></inline-formula> are calculated. Due to <inline-formula id="j_info1209_ineq_124"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{6}}$]]></tex-math></alternatives></inline-formula> has the minimum ASED error, <inline-formula id="j_info1209_ineq_125"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{6}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_126"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>8</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{8}}$]]></tex-math></alternatives></inline-formula> become new anchor point and new float point. And as seen in Fig. <xref rid="j_info1209_fig_004">4</xref>, the <inline-formula id="j_info1209_ineq_127"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{6}}$]]></tex-math></alternatives></inline-formula> is the appropriate anchor point. Given a trajectory <italic>T</italic> of length <italic>n</italic>, HMOTC algorithm has <inline-formula id="j_info1209_ineq_128"><alternatives><mml:math>
<mml:mi mathvariant="italic">O</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$O({n^{2}})$]]></tex-math></alternatives></inline-formula> worst-case running time.</p>
<fig id="j_info1209_fig_004">
<label>Fig. 4</label>
<caption>
<p>An example of anchor point selecting.</p>
</caption>
<graphic xlink:href="info1209_g004.jpg"/>
</fig>
</sec>
<sec id="j_info1209_s_008">
<label>3.2</label>
<title>Pseudo-Code of HMOTC Algorithm</title>
<fig id="j_info1209_fig_005">
<label>Fig. 5</label>
<caption>
<p>HMOTC algorithm.</p>
</caption>
<graphic xlink:href="info1209_g005.jpg"/>
</fig>
<p>Figure <xref rid="j_info1209_fig_005">5</xref> describes the details of HMOTC algorithm. First <inline-formula id="j_info1209_ineq_129"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{1}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_info1209_ineq_130"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{3}}$]]></tex-math></alternatives></inline-formula> are selected as anchor point <inline-formula id="j_info1209_ineq_131"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> and float point <inline-formula id="j_info1209_ineq_132"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula> (lines 2 and 3). Then the algorithm will do some checks in segment <inline-formula id="j_info1209_ineq_133"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula> (line 7), as long as the anchor point <inline-formula id="j_info1209_ineq_134"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}$]]></tex-math></alternatives></inline-formula> is not changed (i.e. index = −1), then move the float point <inline-formula id="j_info1209_ineq_135"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula> one point forward (line 13). Otherwise, <inline-formula id="j_info1209_ineq_136"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">index</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{\mathit{index}}}$]]></tex-math></alternatives></inline-formula> becomes the new anchor point and <inline-formula id="j_info1209_ineq_137"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">index</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn></mml:math><tex-math><![CDATA[${P_{\mathit{index}}}+2$]]></tex-math></alternatives></inline-formula> becomes the new float point (lines 10 and 11). When the entire trajectory <italic>T</italic> has been transformed into a piecewise linear approximation <inline-formula id="j_info1209_ineq_138"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula>, the compressed trajectory <inline-formula id="j_info1209_ineq_139"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${T^{\prime }}$]]></tex-math></alternatives></inline-formula> will be returned (line 20).</p>
<p>Figure <xref rid="j_info1209_fig_006">6</xref> provides a detailed description of findNewAnchorIndex algorithm. This algorithm is used to find the new anchor point according to SED error and heading error, if there is no new anchor point found, then the value −1 will be returned (value −1 means that the segment <inline-formula id="j_info1209_ineq_140"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula> can represent the sub-trajectory <inline-formula id="j_info1209_ineq_141"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">sub</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${T_{\mathit{sub}}}={P_{a}},{P_{a}}+1,\dots ,{P_{f}}$]]></tex-math></alternatives></inline-formula> without too much loss of information). First, this algorithm calculates the heading change of predT(<inline-formula id="j_info1209_ineq_142"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) (line 3). Then, the algorithm checks whether predT(<inline-formula id="j_info1209_ineq_143"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) is a turning point (line 4), if predT(<inline-formula id="j_info1209_ineq_144"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) is a turning point then predT(<inline-formula id="j_info1209_ineq_145"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) becomes the new anchor point (line 5). After that, the algorithm will calculate three errors. (1) calculate each point’s SED error (line 8). (2) calculate heading changes between segment <inline-formula id="j_info1209_ineq_146"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula> and each point (line 9). (3) calculate heading changes of any two points (line 12). If any errors are greater than the given parameters (line 13), then findNewAnchorIndex algorithm seeking the point which has the minimum ASED error (line 15) and return the point’s index (line 16). When all points in segment <inline-formula id="j_info1209_ineq_147"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">a</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{a}}{P_{f}}$]]></tex-math></alternatives></inline-formula> (expect <inline-formula id="j_info1209_ineq_148"><alternatives><mml:math>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">f</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${P_{f}}$]]></tex-math></alternatives></inline-formula>) are processed, value −1 will be returned (line 19).</p>
<fig id="j_info1209_fig_006">
<label>Fig. 6</label>
<caption>
<p>findNewAnchorIndex algorithm.</p>
</caption>
<graphic xlink:href="info1209_g006.jpg"/>
</fig>
</sec>
</sec>
<sec id="j_info1209_s_009">
<label>4</label>
<title>Evaluations</title>
<p>In order to verify the performance of the proposed algorithm, we implemented HMOTC algorithm and other algorithms by using Scala language. And Geolife dataset (Zheng <italic>et al.</italic>, <xref ref-type="bibr" rid="j_info1209_ref_025">2009</xref>, <xref ref-type="bibr" rid="j_info1209_ref_024">2008</xref>, <xref ref-type="bibr" rid="j_info1209_ref_026">2010</xref>) was used for algorithms evaluating. The Microsoft Geolife dataset was obtained from 182 users over a period of five years (from April 2007 to August 2012), it contains 17,621 trajectories with a total distance of 1,292,951 kilometers and a total duration of 50,176 hours. 91.5 percent of the trajectories are logged in a dense representation, e.g. every 1–5 seconds or every 5–10 meters per point. This dataset can support transportation mode learning, 73 users have labelled their trajectories with transportation mode, such as driving, taking a bus, riding a bike and walking. In our evaluations, three labelled trajectories were used. Trajectory one is a multi-modal trajectory, it contains three transportation modes (walk, bus, train), 5911 positioning points, and a total duration of 3 hours 49 minutes (from 2008-06-18, 12:10:33 to 2008-06-18, 15:59:59). Trajectory two is a bus track, it contains 2045 positioning points, and a total duration of 50 minutes (from 2008-06-18, 12:33:34 to 2008-06-18, 13:23:02). Trajectory three is a taxi track in motorway, it contains 2167 positioning points, and a total duration of 37 minutes (from 2008-04-04, 07:16:50 to 2008-04-04, 07:53:00).</p>
<p>Our evaluation did not include algorithms which do not consider temporal information, because these algorithms will introduce larger temporal errors. And the direction-preserving algorithm DPTS-SP-Prac is also not included, because the algorithm lacks the control ability of the spatial error, the algorithm will introduce a larger spatial error. And the algorithms which use speed as a parameter are also not included, because it is hard to find an appropriate speed value as the parameter for a trajectory which contains multiple transportation modes. Various error metrics including average SED error, average spatial error, average speed error and average heading error were used in our evaluation. Given a trajectory <inline-formula id="j_info1209_ineq_149"><alternatives><mml:math>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[$T={P_{1}},{P_{2}},{P_{3}},\dots ,{P_{n-1}},{P_{n}}$]]></tex-math></alternatives></inline-formula> and its compressed representation <inline-formula id="j_info1209_ineq_150"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:mo>…</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">m</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mi mathvariant="italic">m</mml:mi>
</mml:mrow>
</mml:msub></mml:math><tex-math><![CDATA[${T^{\prime }}={P_{i1}},{P_{i2}},{P_{i3}},\dots ,{P_{im-1}},{P_{im}}$]]></tex-math></alternatives></inline-formula>, these error metrics are defined as follows: <disp-formula-group id="j_info1209_dg_004">
<disp-formula id="j_info1209_eq_012">
<label>(12)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">AverageSpatialError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo>=</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∑</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:mi mathvariant="italic">SpatialError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{AverageSpatialError}\big(T,{T^{\prime }}\big)=\frac{1}{n}{\sum \limits_{i=1}^{n}}\mathit{SpatialError}\big(T,{T^{\prime }},{P_{i}}\big),\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_013">
<label>(13)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">AverageSEDError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo>=</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∑</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:mi mathvariant="italic">SEDError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{AverageSEDError}\big(T,{T^{\prime }}\big)=\frac{1}{n}{\sum \limits_{i=1}^{n}}\mathit{SEDError}\big(T,{T^{\prime }},{P_{i}}\big),\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_014">
<label>(14)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">AverageSpeedError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo>=</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∑</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:mi mathvariant="italic">SpeedError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo mathvariant="normal">,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{AverageSpeedError}\big(T,{T^{\prime }}\big)=\frac{1}{n}{\sum \limits_{i=1}^{n}}\mathit{SpeedError}\big(T,{T^{\prime }},{P_{i}}\big),\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_info1209_eq_015">
<label>(15)</label><alternatives><mml:math display="block">
<mml:mtable displaystyle="true" columnalign="left">
<mml:mtr>
<mml:mtd class="align-odd">
<mml:mi mathvariant="italic">AverageHeadingError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo>=</mml:mo><mml:mstyle displaystyle="true">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mstyle>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mstyle displaystyle="true">
<mml:mo largeop="true" movablelimits="false">∑</mml:mo></mml:mstyle>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">n</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:mi mathvariant="italic">HeadingError</mml:mi>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">(</mml:mo>
<mml:mi mathvariant="italic">T</mml:mi>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="italic">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo mathvariant="normal">,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="italic">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo mathvariant="normal" fence="true" maxsize="1.19em" minsize="1.19em">)</mml:mo>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable></mml:math><tex-math><![CDATA[\[ \mathit{AverageHeadingError}\big(T,{T^{\prime }}\big)=\frac{1}{n}{\sum \limits_{i=1}^{n}}\mathit{HeadingError}\big(T,{T^{\prime }},{P_{i}}\big).\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group></p>
<sec id="j_info1209_s_010">
<label>4.1</label>
<title>The Effect of Parameters on Compression Ratio</title>
<fig id="j_info1209_fig_007">
<label>Fig. 7</label>
<caption>
<p>The values of compression ratio under different parameters.</p>
</caption>
<graphic xlink:href="info1209_g007.jpg"/>
</fig>
<fig id="j_info1209_fig_008">
<label>Fig. 8</label>
<caption>
<p>Comparison of trajectory compression in various situations.</p>
</caption>
<graphic xlink:href="info1209_g008.jpg"/>
</fig>
<p>Since the proposed algorithm is a heading oriented algorithm, this algorithm can accurately capture the direction information of the trajectory, and all turning points whose moving direction change degree are greater than the given angle threshold will be retained in compressed trajectory. So the compression rate of this algorithm is greatly influenced by trajectory’s heading. The places where a user stayed, walked or took photos always cause a large heading change (because of the GPS positioning error, even if the user is stationary, it will produce a larger direction change). As shown in Fig. <xref rid="j_info1209_fig_007">7</xref>, due to the bus stopping at each bus station, the trajectory two has a lot of points whose direction change degree is greater than the given angle threshold at bus stations, thus the compression rate of trajectory two is mainly influenced by angle threshold. Similarly to trajectory two, the compression rate of trajectory one is also mainly influenced by angle threshold, because trajectory one contains both walk and bus transportation modes. Trajectory three is a taxi track in motorway, it contains few points whose direction change degree is greater than the given angle threshold, so the compression rate of trajectory three is influenced by both angle threshold and SED threshold.</p>
<p>When the zoom = 19 is shown in Fig. <xref rid="j_info1209_fig_008">8</xref>, the image effects under different conditions of the algorithm are used for compression. In order to facilitate the comparison, this paper intercepts a section of track with obvious effect. Figure <xref rid="j_info1209_fig_008">8</xref>(a) is the original trajectory. In Fig. <xref rid="j_info1209_fig_008">8</xref>(b) the SED threshold value of 30 is taken and the angle threshold is <inline-formula id="j_info1209_ineq_151"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mn>60</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>∘</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${60^{\circ }}$]]></tex-math></alternatives></inline-formula>. It can be seen that keeping the contour works well and approaches the original trajectory. Figure <xref rid="j_info1209_fig_008">8</xref>(c) is a case where no angle threshold is set, and the trajectory compression rate is improved, but the profile is distorted, and there is a large difference to the original trajectory. In Fig. <xref rid="j_info1209_fig_008">8</xref>(d), the SED threshold is set to the maximum, which is the case considering only the angle threshold, and the effect is good. However, if the SED threshold is too large, trajectory distortion will be caused in other trajectory segments. Figure <xref rid="j_info1209_fig_008">8</xref>(e) is used to show that if you want to mention the compression ratio, you must increase the angle threshold and the effect of keeping the contour decreases.</p>
<fig id="j_info1209_fig_009">
<label>Fig. 9</label>
<caption>
<p>Average spatial errors under different SED thresholds.</p>
</caption>
<graphic xlink:href="info1209_g009.jpg"/>
</fig>
</sec>
<sec id="j_info1209_s_011">
<label>4.2</label>
<title>The Effect of Parameters on Compression Ratio</title>
<p>The proposed algorithm has the benefit of taking into account heading information of the trajectory, it can have direction error under control. In the following evaluations, the angle threshold of the proposed algorithm was set to <inline-formula id="j_info1209_ineq_152"><alternatives><mml:math>
<mml:msup>
<mml:mrow>
<mml:mn>60</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>∘</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${60^{\circ }}$]]></tex-math></alternatives></inline-formula> for trajectory one, trajectory two and trajectory three. And compared to the traditional position-preserving compression algorithms which cannot control the direction error, from the experimental results, it can be seen that the proposed algorithms have smaller loss of heading information, while other algorithms will lose a lot of direction information.</p>
<p>Figures <xref rid="j_info1209_fig_009">9</xref> and <xref rid="j_info1209_fig_010">10</xref> contrast the trajectory compression algorithms in terms of average spatial error and average SED error. The experimental results of the two figures are basically the same, and they are introduced together. For trajectory one, the proposed algorithm outperforms other algorithms in terms of both average spatial error and average SED error. For trajectory two and trajectory three, the error of HMOTC is smaller than Before-OPW-TR and TD-TR, and slightly greater than SQUISH-E (<italic>μ</italic>).</p>
<fig id="j_info1209_fig_010">
<label>Fig. 10</label>
<caption>
<p>Average SED errors under different SED thresholds.</p>
</caption>
<graphic xlink:href="info1209_g010.jpg"/>
</fig>
<p>Figure <xref rid="j_info1209_fig_011">11</xref> provides a comparison in terms of average heading error. The result shows that the proposed algorithm is more accurate than other position-preserving compression algorithms. This is because HMOTC algorithm can compress trajectories while ensuring that heading error is within a user-specified bound. In contrast, other algorithms lack the capability of heading error control, so these algorithms will lose a lot of heading information.</p>
<fig id="j_info1209_fig_011">
<label>Fig. 11</label>
<caption>
<p>Average speed errors under different SED thresholds.</p>
</caption>
<graphic xlink:href="info1209_g011.jpg"/>
</fig>
<p>Due to the proposed algorithm has the capability of heading error control. So, a lot of turning points are retained in compressed trajectory. Although these points are important in describing semantic meanings of a trajectory, they will cause a low compression ratio. As seen in Fig. <xref rid="j_info1209_fig_012">12</xref>, the compression ratio of HMOTC algorithm is lower than other algorithms. A high compression ratio can be achieved by setting a 180<inline-formula id="j_info1209_ineq_153"><alternatives><mml:math>
<mml:msup>
<mml:mrow/>
<mml:mrow>
<mml:mo>∘</mml:mo>
</mml:mrow>
</mml:msup></mml:math><tex-math><![CDATA[${^{\circ }}$]]></tex-math></alternatives></inline-formula> angle threshold, if these turning points are not taken into account. In the next section, evaluations are given under the condition of same compression ratio.</p>
<fig id="j_info1209_fig_012">
<label>Fig. 12</label>
<caption>
<p>Average heading errors under different SED thresholds.</p>
</caption>
<graphic xlink:href="info1209_g012.jpg"/>
</fig>
</sec>
<sec id="j_info1209_s_012">
<label>4.3</label>
<title>Evaluations Under the Condition of Same Compression Ratio</title>
<p>In this section, we evaluated algorithms under the condition of same compression ratio. In order to achieve the given compression ratio, the value of HMOTC algorithm’s angle threshold parameter may be set to obtuse angle or straight angle. In this case, HMOTC algorithm will lose the advantage of heading maintaining. From the experimental results, it can be seen that even under the condition of the same compression ratio, information loss of the proposed algorithm is not too large. And in terms of average SED error, the proposed algorithm has a better performance than other algorithms.</p>
<p>In Fig. <xref rid="j_info1209_fig_013">13</xref>, algorithms are evaluated in terms of average spatial error. The average spatial error of the Normal-OPW-TR algorithm in the three trajectory modes is the largest, and the HMOTC algorithm is the smallest in the trajectory 1, but is equivalent to other algorithms in the trajectory 2 and the trajectory 3. The results show that Normal-OPW-TR algorithm introduced larger spatial error than other algorithms, and the spatial error of HMOTC algorithm is smaller than most algorithms.</p>
<fig id="j_info1209_fig_013">
<label>Fig. 13</label>
<caption>
<p>Compression ratio under different SED thresholds.</p>
</caption>
<graphic xlink:href="info1209_g013.jpg"/>
</fig>
<p>In Fig. <xref rid="j_info1209_fig_014">14</xref>, average SED errors are shown for each algorithm over various compression ratios. The track 1 and track 2 can clearly show that the average SED error of the HMOTC algorithm is smaller than that of other algorithms, and the track 3 is not obvious, but it is equivalent to other algorithms. Experiments show that HMOTC and TD-TR are the most accurate algorithms in terms of SED error. Compared to TD-TR algorithm, HMOTC algorithm has the advantage of supporting both offline and online applications.</p>
<fig id="j_info1209_fig_014">
<label>Fig. 14</label>
<caption>
<p>Average spatial errors.</p>
</caption>
<graphic xlink:href="info1209_g014.jpg"/>
</fig>
<p>Figure <xref rid="j_info1209_fig_015">15</xref> provides a comparison in terms of average speed error. The three models in the figure show that the average speed error of this algorithm is not very obvious, but the effect is basically the same, no uncontrollable or greater error loss occurs. As shown in the figure, SQUISH-E(<italic>μ</italic>), HMOTC and TD-TR are the most accurate algorithms in terms of speed error. Compared to HMOTC, SQUISH-E(<italic>μ</italic>) and TD-TR have the limitation that they only support offline applications.</p>
<p>Figure <xref rid="j_info1209_fig_016">16</xref> shows the average heading errors for each algorithm over various compression ratios. The results show that with the increase of compression ratio, HMOTC algorithm gradually lost its advantage of heading maintaining. The reason behind this is that in order to achieve the given compression ratio, the value of HMOTC algorithm’s angle threshold parameter is set to obtuse angle or straight angle. As seen in Fig. <xref rid="j_info1209_fig_016">16</xref>, the proposed algorithm has better performance in case of low compression ratio (compression ratio <inline-formula id="j_info1209_ineq_154"><alternatives><mml:math>
<mml:mi mathvariant="italic">CR</mml:mi>
<mml:mo>⩾</mml:mo>
<mml:mn>15</mml:mn></mml:math><tex-math><![CDATA[$\mathit{CR}\geqslant 15$]]></tex-math></alternatives></inline-formula>).</p>
<fig id="j_info1209_fig_015">
<label>Fig. 15</label>
<caption>
<p>Average SED errors.</p>
</caption>
<graphic xlink:href="info1209_g015.jpg"/>
</fig>
<fig id="j_info1209_fig_016">
<label>Fig. 16</label>
<caption>
<p>Average speed errors.</p>
</caption>
<graphic xlink:href="info1209_g016.jpg"/>
</fig>
</sec>
</sec>
<sec id="j_info1209_s_013">
<label>5</label>
<title>Conclusions</title>
<p>In this paper, we proposed a heading maintaining oriented trajectory compression algorithm, called HMOTC. The algorithm can maintain both shape skeleton and semantic meanings of the trajectory, all turning points whose moving direction change degree is greater than the given angle threshold will be retained in compressed trajectory. Compared to traditional position-preserving compression algorithms, the HMOTC algorithm has the benefit of taking into account heading information of the trajectory, so this algorithm can support wider range of applications. The HMOTC has the flexibility of controlling compression with respect to both spatial error and direction error, so the compression process can be precisely controlled according to users’ needs. If only the direction information of the trajectory is taken into account, the SED threshold of the algorithm can be set to positive infinity. If only the spatial information of the trajectory is taken into account, the angle threshold of the algorithm can be set to 180. Because the algorithm can compress trajectory data while retrieving points from trajectory, it has the advantage of supporting both online and offline applications. The results show that the proposed algorithm can achieve more accurate approximation than other algorithms under the condition of same SED threshold, especially in the heading maintaining aspect. And it also has the good performance under the condition of same compression ratio.</p>
</sec>
</body>
<back>
<ack id="j_info1209_ack_001">
<title>Acknowledgements</title>
<p>This work is partially supported by Scientific Research Fund of Liaoning Provincial Education Department (No. 2017J049). The authors also gratefully acknowledge the helpful comments and suggestions of the reviewers, which have improved the presentation.</p></ack>
<ref-list id="j_info1209_reflist_001">
<title>References</title>
<ref id="j_info1209_ref_001">
<mixed-citation publication-type="journal"><string-name><surname>Cao</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Li</surname>, <given-names>Y.</given-names></string-name> (<year>2017</year>). <article-title>Dots: an online and near-optimal trajectory simplification algorithm</article-title>. <source>Journal of Systems Software</source>, <volume>126</volume>, <fpage>34</fpage>–<lpage>44</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_002">
<mixed-citation publication-type="chapter"><string-name><surname>Chen</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Jiang</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Zheng</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Li</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Yu</surname>, <given-names>N.</given-names></string-name> (<year>2009</year>). <chapter-title>Trajectory simplification method for location-based social networking services</chapter-title>. In: <source>Proceedings of the 2009 International Workshop on Location Based Social Networks</source>, <conf-loc>Seattle, USA</conf-loc>, pp. <fpage>33</fpage>–<lpage>40</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_003">
<mixed-citation publication-type="journal"><string-name><surname>Chen</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Xu</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Franti</surname>, <given-names>P.</given-names></string-name> (<year>2012</year>). <article-title>A fast <inline-formula id="j_info1209_ineq_155"><alternatives><mml:math>
<mml:mi mathvariant="italic">O</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">N</mml:mi>
<mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math><tex-math><![CDATA[$O(N)$]]></tex-math></alternatives></inline-formula> multiresolution polygonal approximation algorithm for GPS trajectory simplification</article-title>. <source>IEEE Transactions on Image Processing</source>, <volume>21</volume>(<issue>5</issue>), <fpage>2770</fpage>–<lpage>2785</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_004">
<mixed-citation publication-type="journal"><string-name><surname>Douglas</surname>, <given-names>D.H.</given-names></string-name>, <string-name><surname>Peucker</surname>, <given-names>T.K.</given-names></string-name> (<year>1973</year>). <article-title>Algorithms for the reduction of the number of points required to represent a line or its caricature</article-title>. <source>The International Journal for Geographic Information and Geovisualization</source>, <volume>10</volume>(<issue>2</issue>), <fpage>112</fpage>–<lpage>122</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_005">
<mixed-citation publication-type="chapter"><string-name><surname>Giannotti</surname>, <given-names>F.</given-names></string-name>, <string-name><surname>Nanni</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Pinelli</surname>, <given-names>F.</given-names></string-name>, <string-name><surname>Pedreschi</surname>, <given-names>D.</given-names></string-name> (<year>2007</year>). <chapter-title>Trajectory pattern mining</chapter-title>. In: <source>Proceedings of the 13th ACM SIGKDD international conference on Knowledge Discovery and Data Mining</source>, <conf-loc>San Jose, USA</conf-loc>, pp. <fpage>330</fpage>–<lpage>339</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_006">
<mixed-citation publication-type="journal"><string-name><surname>Jiagao</surname>, <given-names>W.U.</given-names></string-name>, <string-name><surname>Qian</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Liu</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Liu</surname>, <given-names>L.</given-names></string-name> (<year>2015</year>). <article-title>Improvement of perez and vidal algorithm for the decomposition of digitized curves into line segments</article-title>. <source>Journal of Computer Applications</source>, <volume>35</volume>(<issue>5</issue>), <fpage>1209</fpage>–<lpage>1212</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_007">
<mixed-citation publication-type="chapter"><string-name><surname>Kolesnikov</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Franti</surname>, <given-names>P.</given-names></string-name> (<year>2002</year>). <chapter-title>A fast near-optimal min-# polygonal approximation of digitized curves</chapter-title>. In: <source>IASTED Internatioal. Conference on Automation, Control and Information Technology (ACIT 2002)</source>, <conf-loc>Novosibirsk, Russia</conf-loc>, pp. <fpage>418</fpage>–<lpage>422</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_008">
<mixed-citation publication-type="journal"><string-name><surname>Kolesnikov</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Franti</surname>, <given-names>P.</given-names></string-name> (<year>2003</year>). <article-title>Reduced-search dynamic programming for approximation of polygonal curves</article-title>. <source>Pattern Recognition Letters</source>, <volume>24</volume>(<issue>14</issue>), <fpage>2243</fpage>–<lpage>2254</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_009">
<mixed-citation publication-type="journal"><string-name><surname>Li</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Pei</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Yuan</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Song</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Wang</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Yang</surname>, <given-names>G.</given-names></string-name> (<year>2014</year>). <article-title>A review on the classification, patterns and applied research of human mobility trajectory</article-title>. <source>Progress in Geography</source>, <volume>33</volume>(<issue>7</issue>), <fpage>938</fpage>–<lpage>948</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_010">
<mixed-citation publication-type="journal"><string-name><surname>Long</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Wong</surname></string-name>, <string-name><surname>C.-W. Jagadish H. V</surname>, <given-names>R.</given-names></string-name> (<year>2013</year>). <article-title>Direction-preserving trajectory simplification</article-title>. <source>Proceedings of the VLDB Endowment</source>, <volume>6</volume>(<issue>10</issue>), <fpage>949</fpage>–<lpage>960</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_011">
<mixed-citation publication-type="chapter"><string-name><surname>Meratnia</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>de By</surname>, <given-names>R.</given-names></string-name> (<year>2004</year>). <chapter-title>Spatiotemporal compression techniques for moving point objects</chapter-title>. In: <source>Advances in Database Technology – EDBT 2004, 9th International Conference on Extending Database Technology</source>, <conf-loc>Heraklion, Crete, Greece</conf-loc>, pp. <fpage>765</fpage>–<lpage>782</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_012">
<mixed-citation publication-type="chapter"><string-name><surname>Morzy</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Rosikiewicz</surname>, <given-names>L.</given-names></string-name> (<year>2007</year>). <chapter-title>Mining frequent trajectories of moving objects for location prediction</chapter-title>. In: <source>Machine Learning and Data Mining in Pattern Recognition, 5th International Conference, MLDM 2007</source>, <conf-loc>Leipzig, Germany</conf-loc>, pp. <fpage>667</fpage>–<lpage>680</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_013">
<mixed-citation publication-type="chapter"><string-name><surname>Muckell</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Hwang</surname>, <given-names>J.-H.</given-names></string-name>, <string-name><surname>Patil</surname>, <given-names>V.</given-names></string-name>, <string-name><surname>Lawson</surname>, <given-names>C.T.</given-names></string-name>, <string-name><surname>Ping</surname>, <given-names>F.</given-names></string-name>, <string-name><surname>Ravi</surname>, <given-names>S.S.</given-names></string-name> (<year>2011</year>). <chapter-title>SQUISH: an online approach for GPS trajectory compression</chapter-title>. In: <source>Proceedings of the 2nd International Conference and Exhibition on Computing for Geospatial Research &amp; Application, COM.Geo 2011</source>, <conf-loc>Washington, DC, USA, May</conf-loc>, pp. <fpage>23</fpage>–<lpage>25</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_014">
<mixed-citation publication-type="journal"><string-name><surname>Muckell</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Olsen</surname>, <given-names>P.W.</given-names></string-name>, <string-name><surname>Hwang</surname>, <given-names>J.H.</given-names></string-name>, <string-name><surname>Lawson</surname>, <given-names>C.T.</given-names></string-name>, <string-name><surname>Ravi</surname>, <given-names>S.S.</given-names></string-name> (<year>2014</year>). <article-title>Compression of trajectory data: a comprehensive evaluation and new approach</article-title>. <source>GeoInformatica</source>, <volume>18</volume>(<issue>3</issue>), <fpage>435</fpage>–<lpage>460</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_015">
<mixed-citation publication-type="journal"><string-name><surname>Perez</surname>, <given-names>J.C.</given-names></string-name>, <string-name><surname>Vidal</surname>, <given-names>E.</given-names></string-name> (<year>1994</year>). <article-title>Optimum polygonal approximation of digitized curves</article-title>. <source>Pattem Recognition Letters</source>, <volume>15</volume>(<issue>8</issue>), <fpage>743</fpage>–<lpage>750</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_016">
<mixed-citation publication-type="chapter"><string-name><surname>Potamias</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Patroumpas</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>Sellis</surname>, <given-names>T.</given-names></string-name> (<year>2006</year>). <chapter-title>Sampling trajectory streams with spatiotemporal criteria</chapter-title>. In: <source>Proceedings of the 18th International Conference on Scientific and Statistical Database Management (SSDBM ’06)</source>, <conf-loc>Vienna, Austria</conf-loc>, <conf-date>3–5 July 2006</conf-date>, pp. <fpage>275</fpage>–<lpage>284</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_017">
<mixed-citation publication-type="journal"><string-name><surname>Qian</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Lu</surname>, <given-names>Y.</given-names></string-name> (<year>2017</year>). <article-title>Simplifying gps trajectory data with enhanced spatial-temporal constraints</article-title>. <source>International Journal of Geo-Information</source>, <volume>6</volume>(<issue>11</issue>), <fpage>329</fpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_018">
<mixed-citation publication-type="chapter"><string-name><surname>Salotti</surname>, <given-names>M.</given-names></string-name> (<year>2000</year>). <chapter-title>Improvement of Perez and Vidal algorithm for the decomposition of digitized curves into line segments</chapter-title>. In: <source>Proceedings International Conference on Pattern Recognition ICPR’00</source>, <conf-loc>Barcelona, Spain</conf-loc>, pp. <fpage>882</fpage>–<lpage>886</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_019">
<mixed-citation publication-type="journal"><string-name><surname>Salotti</surname>, <given-names>M.</given-names></string-name> (<year>2001</year>). <article-title>An efficient algorithm for the optimal polygonal approximation of digitized curves</article-title>. <source>Pattern Recognition Letters</source>, <volume>22</volume>(<issue>2</issue>), <fpage>215</fpage>–<lpage>221</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_020">
<mixed-citation publication-type="journal"><string-name><surname>Sun</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Xia</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Yuan</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Li</surname>, <given-names>D.</given-names></string-name> (<year>2016</year>). <article-title>An overview of moving object trajectory compression algorithms</article-title>. <source>Mathematical Problems in Engineering</source>, <volume>2016</volume>(<issue>3</issue>), <fpage>1</fpage>–<lpage>13</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_021">
<mixed-citation publication-type="chapter"><string-name><surname>Tian</surname>, <given-names>S.L.</given-names></string-name>, <string-name><surname>Xu</surname>, <given-names>J.</given-names></string-name> (<year>2011</year>). <chapter-title>GPS location data reducing based on turning point judgment method</chapter-title>. In: <source>Second International Conference on Mechanic Automation and Control Engineering (MACE)</source>, <conf-loc>Hohhot, China</conf-loc>, pp. <fpage>7395</fpage>–<lpage>7398</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_022">
<mixed-citation publication-type="book"><string-name><surname>Yuan</surname>, <given-names>J.</given-names></string-name> (<year>2012</year>). <source>Querying, Mining with Applications on Large-Scale Trajectory Data</source>. <publisher-name>HeFei University of Science and Technology of China</publisher-name>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_023">
<mixed-citation publication-type="journal"><string-name><surname>Zheng</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Da-Ke</surname>, <given-names>H.E.</given-names></string-name>, <string-name><surname>Zhang</surname>, <given-names>W.F.</given-names></string-name> <etal>et al.</etal> (<year>2005</year>). <article-title>An efficient scheme for GPS data compression</article-title>. <source>China Railway Science</source>, <volume>26</volume>(<issue>3</issue>), <fpage>134</fpage>–<lpage>138</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_024">
<mixed-citation publication-type="chapter"><string-name><surname>Zheng</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Li</surname>, <given-names>Q.</given-names></string-name>, <string-name><surname>Chen</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Xie</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Ma</surname>, <given-names>W.-Y.</given-names></string-name> (<year>2008</year>). <chapter-title>Understanding mobility based on GPS data</chapter-title>. In: <source>Proceedings of the 10th ACM Conference on Ubiquitous Computing (Ubicomp 2008)</source>, <conf-loc>Seoul, Korea</conf-loc>, pp. <fpage>312</fpage>–<lpage>321</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_025">
<mixed-citation publication-type="chapter"><string-name><surname>Zheng</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Zhang</surname>, <given-names>L.</given-names></string-name>, <string-name><surname>Xie</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Ma</surname>, <given-names>W.-Y.</given-names></string-name> (<year>2009</year>). <chapter-title>Mining interesting locations and travel sequences from GPS trajectories</chapter-title>. In: <source>Proceedings of International Conference on World Wild Web (WWW 2009)</source>. <publisher-name>ACM Press</publisher-name>, <publisher-loc>Madrid, Spain</publisher-loc>, pp. <fpage>791</fpage>–<lpage>800</lpage>.</mixed-citation>
</ref>
<ref id="j_info1209_ref_026">
<mixed-citation publication-type="journal"><string-name><surname>Zheng</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Xie</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Ma</surname>, <given-names>W.-Y.</given-names></string-name> (<year>2010</year>). <article-title>GeoLife: a collaborative social networking service among user, location and trajectory</article-title>. <source>Bulletin of the Technical Committee on Data Engineering</source>, <volume>33</volume>(<issue>2</issue>), <fpage>32</fpage>–<lpage>40</lpage>.</mixed-citation>
</ref>
</ref-list>
</back>
</article>