{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d88f9072",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "source": [
    "# Map-match a track on a network\n",
    "\n",
    "<div style='text-align:justify'>\n",
    "In the context of the <b>Tracklib</b> library, the map-matching technique aims to relate GPS track observations with edges in a reference network by applying the Hidden Markov Model (HMM) algorithm proposed by Newson and Krumm (2009) [1].\n",
    "<br/>\n",
    "The algorithm, for each point to be map-matched, takes into account both the preceding and succeeding points, thereby ensuring overall trajectory consistency. This approach is particularly well suited for matching tracks on dense networks.\n",
    "<br/>\n",
    "However, it can also be highly valuable in mountain environments. For instance, when two trails run alongside a stream, the algorithm prevents crossings if no infrastructure (such as a bridge) is present.\n",
    "</div>\n",
    "\n",
    "<figure style='text-align:center;padding:1em 1em 0em 1em'>\n",
    "<img src=\"mapmatching_process1.png\"  width=\"650\" />\n",
    "<figcaption><br/>Fig1: Map-matching process of GPS observations to the road network (img adapted from [2])</figcaption>\n",
    "</figure>\n",
    "\n",
    "<div style='text-align:justify'>\n",
    "Figure 1 illustrates: <ul>\n",
    "    <li>on left: the input data (GPS points on a road network), </li>\n",
    "    <li>in the middle: the concept of the map-matching process to a network (using the Viterbi algorithm), </li>\n",
    "    <li>and the resulting output (the geometric projection of the points onto the road segments to which they have been assigned).</li>\n",
    "</ul></div>\n",
    "\n",
    "<br/><br/>\n",
    "\n",
    "In Tracklib, the function to map-match a track on a network is:\n",
    "<div class=\"alert alert-block alert-warning\" style=\"padding:1em\"><b><i style='padding-left:4em'>mapOnNetwork (tracks, network, search_radius)</i></b>\n",
    "</div>\n",
    "With:<ul>\n",
    "<li> tracks (TrackCollection): collection of Tracks</li>\n",
    "<li> network (Network): the road network</li>\n",
    "<li> search_radius (float): the search radius in meter</li>\n",
    "</ul>\n",
    "\n",
    "<br/>\n",
    "\n",
    "Results are stored in Analytical Features (AF) for each track point <i>k</i>:\n",
    "<ul>\n",
    "    <li>trace[\"hmm_inference\", k][0]: geometric projection (*ENUCoords*) </li>\n",
    "    <li>trace[\"hmm_inference\", k][1]: index of the edge onto which the point is projected (*int*), -1 if the point is not map-matched</li>\n",
    "    <li>trace[\"hmm_inference\", k][2]: distance between the map-matched point and the start vertex</li>\n",
    "    <li>trace[\"hmm_inference\", k][3]: distance between the map-matched point and the end vertex</li>\n",
    "    <li>trace[\"obs_noise\", k] (type int)</li>\n",
    "    <li>trace[\"hmm_cost\", k] (type float)</li>\n",
    "</ul>\n",
    "\n",
    "<br/>\n",
    "\n",
    "<div class=\"alert alert-block alert-info\" style='text-align:justify'>\n",
    "    <b>Reference:</b>\n",
    "    <ul>\n",
    "        <li>[1] - Newson, P., & Krumm, J. (2009). <i>Hidden Markov map matching through noise and sparseness.</i> Proceedings of the 17th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems, GIS ‘09, ACM, New York, NY, USA, pp. 336–343. <a href='https://doi.org/10.1145/1653771.1653818'>https://doi.org/10.1145/1653771.1653818</a></li>\n",
    "    <li>[2] - Yann Méneroux. Méthodes d'apprentissage statistique pour la détection de la signalisation routière à partir de véhicules traceurs. Technologies Émergeantes [cs.ET]. Université Paris-Est, 2019. Français. ⟨NNT : 2019PESC2061⟩. <a href='https://theses.hal.science/tel-02493936v1/file/TH2019PESC2061.pdf'>PDF</a></li>\n",
    "    </ul></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06fc9e46",
   "metadata": {},
   "source": [
    "## Let's start by importing tracklib library"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "b0e5059a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import math\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "import sys\n",
    "\n",
    "#-------------------------------------------------------\n",
    "# 1. [if tracklib is not installed using pip] add tracklib's local path in the python path\n",
    "module_path = os.path.abspath(os.path.join('../../..'))\n",
    "if module_path not in sys.path:\n",
    "    sys.path.append(module_path)\n",
    "\n",
    "# 2. Import\n",
    "import tracklib as trk"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09ce4248",
   "metadata": {},
   "source": [
    "## Loading GPS points\n",
    "\n",
    "In this tutorial, data points are stored in a csv file. The first line contained header with names of columns:  \n",
    "<div style='margin-left:4em'><i>X,Y,track_fid,track_seg_id,track_seg_point_id,ele,time</i></div>\n",
    "\n",
    "Coordinates is provided in Geographic system reference and separtor caracter is the comma. The time's format is: <i>“4Y/2M/2D 2h:2m:2s”</i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1d5a502f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------------------------------------\n",
      "GPS track #22245 of user 0:\n",
      "-------------------------------------\n",
      "  Nb of pt(s):   52\n",
      "  Ref sys id   : ENU\n",
      "  Starting at  : 12/07/2019 15:42:35\n",
      "  Ending at    : 12/07/2019 16:48:16\n",
      "  Duration     : 3941.000 s\n",
      "  Length       : 1380.857 m\n",
      "-------------------------------------\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Specify time format\n",
    "trk.ObsTime.setReadFormat(\"4Y/2M/2D 2h:2m:2s\")\n",
    "\n",
    "# local file path\n",
    "trackpath = '../../../data/csv/22245.csv'\n",
    "\n",
    "# Loading GPS points\n",
    "param = trk.TrackFormat({'ext': 'CSV', 'id_E':0, 'id_N':1, 'id_U':2, 'id_T':3, 'srid': \"Geo\", 'header': 1, 'separator': ','})\n",
    "trace = trk.TrackReader.readFromFile(trackpath, param, verbose=False)\n",
    "\n",
    "# Transform geographic coordinates in local projection\n",
    "trace.toENUCoordsIfNeeded()\n",
    "\n",
    "# Point 37 is forced to be outlier, so it will not to be map-matched\n",
    "trace[37].position.setX(trace[37].position.getX() - 45)\n",
    "trace[37].position.setY(trace[37].position.getY() - 15)\n",
    "\n",
    "# Display a little summary of information of the GPS track:\n",
    "trace.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1816722c",
   "metadata": {},
   "source": [
    "## Loading the road network\n",
    "\n",
    "Data network are stored in a csv file. The first line contained header with names of columns:  \n",
    "<div style='margin-left:4em'><i>WKT,link_id,source,target,direction</i></div>\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "261dcd7a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of edges =  288\n",
      "Number of nodes =  216\n",
      "Total length of all edges =  19386.544826479814\n"
     ]
    }
   ],
   "source": [
    "netpath = '../../../data/network/network-utgtrack-22245.csv'\n",
    "network = trk.NetworkReader.readFromFile(netpath, formatfile='VTT', verbose=False)\n",
    "\n",
    "# Transform geographic coordinates in local projection\n",
    "network.toENUCoords(trace.base)\n",
    "\n",
    "# Print number of edges and nodes of the network\n",
    "print ('Number of edges = ', len(network.EDGES))\n",
    "print ('Number of nodes = ', len(network.NODES))\n",
    "print ('Total length of all edges = ', network.totalLength())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ebd3da8-9191-4f81-8f35-96aee1d57cd9",
   "metadata": {},
   "source": [
    "## Display GPS points on the road network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a3b01d66-16c7-46d5-b4f2-114d0fb2a566",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 576x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (8, 5))\n",
    "\n",
    "trace.plotAsMarkers(append=True, label='raw positions')\n",
    "network.plot('b-', '', '', '', 1.5, plt)\n",
    "\n",
    "plt.xlim([-580, 50]) \n",
    "plt.ylim([-20, 180])\n",
    "plt.legend(loc=7)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "576c2b91",
   "metadata": {},
   "source": [
    "## Prepare, launch the map matching process and compute few stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "ecdceac9",
   "metadata": {},
   "outputs": [],
   "source": [
    "si = trk.SpatialIndex(network, verbose=False)\n",
    "network.spatial_index = si\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b173ea65",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\u001b[38;2;255;0;0m  0%\u001b[39m \u001b[38;2;255;0;0m(0 of 216)\u001b[39m |                        | Elapsed Time: 0:00:00 ETA:  --:--:--"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Map-matching preparation...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\u001b[38;2;0;255;0m100%\u001b[39m \u001b[38;2;0;255;0m(216 of 216)\u001b[39m |######################| Elapsed Time: 0:00:00 Time:  0:00:000000\n"
     ]
    }
   ],
   "source": [
    "# computes all distances between pairs of nodes\n",
    "network.prepare()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dc22a720",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Launching Map-matching\n"
     ]
    }
   ],
   "source": [
    "print ('Launching Map-matching')\n",
    "# Map track on network\n",
    "trk.mapOnNetwork(trace, network, search_radius=25, debug=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4bc88a31-adc6-41e7-a513-b443d16b6fea",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Few statistics results:\n",
      "    Number of points =  52\n",
      "    Number of map-matched points = 51 (98.08 %)\n",
      "    Number of off-road = 1 (1.92 %)\n",
      "    GPS standard error = 0.2 m\n"
     ]
    }
   ],
   "source": [
    "# Few statistics:\n",
    "print ('')\n",
    "print ('Few statistics results:')\n",
    "\n",
    "print ('    Number of points = ', trace.size())\n",
    "# Nombre de points map-matchés:\n",
    "nbmm = 0\n",
    "nbhp = 0\n",
    "cumuldist = 0\n",
    "for k in range(len(trace)):\n",
    "    ide = trace[\"hmm_inference\", k][1]\n",
    "    if ide == -1:\n",
    "        nbhp += 1\n",
    "    else:\n",
    "        nbmm += 1\n",
    "        pmm = trace[\"hmm_inference\", k][0]\n",
    "        pi = trace[k].position\n",
    "        d = pi.distance2DTo(pmm)\n",
    "        cumuldist += d\n",
    "\n",
    "percentMM = (nbmm / trace.size() * 100)\n",
    "print ('    Number of map-matched points = ' + str(nbmm) + ' (' + str(round(percentMM, 2)) + ' %)')\n",
    "percentHP = (nbhp / trace.size() * 100)\n",
    "print ('    Number of off-road = '+ str(nbhp) + ' (' + str(round(percentHP, 2)) + ' %)') \n",
    "\n",
    "# Calcul du RMSE\n",
    "rmse = round(math.sqrt(d/nbmm),2)\n",
    "print ('    GPS standard error = ' + str(rmse) + ' m')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "068b8e7a",
   "metadata": {},
   "source": [
    "## Display results "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "3c91f16c",
   "metadata": {
    "editable": true,
    "slideshow": {
     "slide_type": ""
    },
    "tags": [
     "nbsphinx-thumbnail"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7439b56cf8b0>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmQAAAGbCAYAAABqPYztAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABw9ElEQVR4nO3deVwV1f/H8dcBRRTMfbdCc01AFFQyM83cykyz0kpTs1+pLZZlZaWILVpa2uLSKpYtWmaZppWaX7VyQ9E0d6PcF1zBjWV+f8wFN9zgwtwL7+fjMY9775m5M587A5cPZ85iLMtCRERERJzj43QAIiIiIvmdEjIRERERhykhExEREXGYEjIRERERhykhExEREXFYAacDAChdurQVFBTkdBhXLCEhAYBSpUo5HIn307l0D51H99G5dJ+EhATSgGI6l5ctYR/s/A8qVIbS5eyyw66fSZ3H7DuckIAPWf/9jo2N3W9ZVhl3xuQRCVlQUBDLly93OowrFhMTA0CPHj0cjSMv0Ll0D51H99G5dJ+YmBhOAG11Li/L5nXQLhyatoaYn8DHdS9rlutnUucx+2bFxOBP1n+/jTH/ujUgdMtSRETEY5w8CU/eD0UCYOSE08mY5H0eUUMmIiIi8NbL8HccfDwdylZwOhrJTcq9RUREPMCiOfDhSOjaB269w+loJLd5bA1ZcnIy27dv58SJE06HckF16tQBYN26dQ5H4v3OPJf+/v5UrlyZggULOhyViEjuOJgA/R+EarXhpZFORyNOMJ4wl2WVKlWsqKios8qqVq1K5cqVKVq0KMYYhyK7uOTkZAAlDm6Qfi4LFCjA0aNH2b59O1u3bnU4Ku+ze/duAMqXL+9wJN5P59J9du/eTRpQUufygjauhUMJEFwfigRmvs0B18+kzmP2Hdi9Gx+y/vvds2fPWMuyItwZk8fWkBUuXNijkzHJGcYYihYtSuHChZ0ORUQkV+zdBQf3wzVVL5yMpfMB/HMlqrzNE9treUQNWUREhHXusBfr1q2jdu3aDkV0efbv3w9A6dKlHY7E+517Lr3h+nsiDdXgPjqX7qNhLy5sywZoVx/CG8NnP1+8V2V2h2qQ07L7+22McXsNmScmiSIiInneqVPw1APgXxjemqghLvI7XX4v1bhxYwDi4+P58ssvM8qXL1/Ok08+6VRYIiJymd4eDH/FwvCPoVxFp6MRp+W5hGzIkCFu36dlWaSlpbl9v9nxxx9/AOcnZBEREbz77rtOhSUiIpfhj9/ggzfhvkegdQenoxFPkOcSsujoaLfsJz4+ntq1a9O3b1/q16/Ptm3b6NOnDxEREdSpU4f0XqErVqzgrrvuAuCHH36gcOHCnDp1ihMnTlC1atXz9tujRw969+7NTTfdRI0aNZgxYwYAJ06coGfPnoSEhFCvXj1+++03ANauXUvDhg0JCwsjNDSUTZs2ARAYaLf8fOGFF1i4cCFhYWGMGjWK+fPn065dOwAOHDhAhw4dCA0NJTIyktWrVwN20vrQQw/RrFkzqlatmpHAJSUlcfvtt1O3bl2Cg4OZPHmyW86liIicdugA9O8GVWrAoLedjkY8hcf2svQEGzZsYMKECYwdOxaA1157jZIlS5KamkqLFi245ZZbCA0NZeXKlQAsXLiQ4OBgli1bRkpKCo0aNcp0v/Hx8fzvf/9jy5YtNG/enM2bNzNmzBgA/vrrL9avX0+rVq3YuHEj48ePp1+/fjzwwAOcOnWK1NTUs/Y1fPhwRo4cmZHYzZ8/P2NdVFQU9erV4/vvv2fevHk8+OCDxMXFAbB+/Xp+++03jh49Ss2aNenTpw+zZ8+mYsWKzJw5E4DDhw+77VyKiAhYFgx8BBL22qPxFwlwOiLxFHmihmzIkCEYYzKGyEh/nt3bl9deey2RkZEZr6dMmUL9+vWpV68ea9euZePGjRQoUIBq1aqxbt06li5dSv/+/VmwYAELFy7kpptuynS/9957Lz4+PlSvXp2qVauyfv16Fi1aRLdu3QCoVasW1157LRs3buSGG27g9ddf54033uDff/+9ouEgztznLbfcQkJCQkaSdfvtt1OoUCFKly5N2bJl2bNnDyEhIcyZM4fnn3+ehQsXUqxYsayeOhERycQ3E2DWVHjmVXvMMZF0eSYhsyyL9CE80p9nNyELCDj9r8s///zDyJEjmTt3LqtXr+b222/PmEXgpptuYtasWRQsWJBbb72VRYsWsWjRIpo2bZrpfs8dW80Yw4WGH7n//vuZPn06hQsXpnXr1sybN++y489sn+nHLlSoUEaZr68vKSkp1KhRg9jYWEJCQhg4cCBDhw697GOJiMjF/bMJhjwJjW+BR551OhrxNHkiIcsNR44cISAggGLFirFnzx5mzZqVsa5p06aMHj2aG264gTJlypCQkMD69eszpgM61zfffENaWhpbtmxh69at1KxZk6ZNm/LFF18AsHHjRv777z9q1qzJ1q1bqVq1Kk8++STt27fPaAeWrmjRohw9ejTT45y5z/nz51O6dGmuuuqqC37GnTt3UqRIEbp27cqzzz7LihUrrugciYhI5pKT7SEuCvppiAvJXJ5rQ3buFEzuUrduXerVq0edOnWoWrUqN954Y8a6Ro0asWfPnowasdDQUMqWLXvBWQZq1qzJzTffzJ49exg/fjz+/v707duX3r17ExISQoECBYiJiaFQoUJMnjyZSZMmUbBgQcqXL8/gwYPP2ldoaCgFChSgbt269OjRg3r16mWsGzJkCD179iQ0NJQiRYowceLEi37Gv/76iwEDBuDj40PBggUZN25cVk+XiIicYfQQWLUMxn0LFSo7HY14ojyXkLlr2IugoCDWrFlzVln6yL7p0keXL1y4MCdPnswo//DDDy+67xtvvJFRo0adVebv73/e/gEGDhzIwIEDzytPTEwE7Hk0586de9a6Zs2aAVCyZEl++OGH89577jlK/5xBQUG0bt36orGLiMiVWfw/GDsMOveCtp2cjkY8lSpNRUREcsjhg/YQF0HVYPBop6MRT3bJhMwY86kxZq8xZs0ZZfcYY9YaY9KMMRHnbD/QGLPZGLPBGKPqlnPExMRw9913Ox2GiIjkMMuCF3vbk4eP/gICLjFxuORvl1NDFgO0OadsDXAXsODMQmPM9UAXoI7rPWONMb7ZD1NERMS7TP0MZk6Bp4dC3QZORyOe7pIJmWVZC4AD55StsyxrQyab3wl8bVnWScuy/gE2Aw3dEqmIiIiX+HcLRD0OjW6G3s85HY14A3e3IasEbDvj9XZX2XmMMY8YY5YbY5bv27fPzWGIiIg4IzkZ+j0AvgVg1Ofgq/tEchncnZBlNs5DpiOeWpb1oWVZEZZlRZQpU8bNYYiIiDjjvVcgbgm8/gFUvNrpaMRbuDsh2w6c+eNXGdjp5mM4YsiQIYwcOTJL742JieHxxx/PdF36JOEiedWJEydo2LAhdevWpU6dOhljBXbu3JmwsDDCwsIICgoiLCzM2UBF3GDpQnj/Nbi7B7S71+loxJu4exyy6cCXxpi3gYpAdWCpm48hIl6kUKFCzJs3j8DAQJKTk2nSpAlt27Zl8uTJGds888wzmjtVvN7hQ/B0V7i6Cgx51+loxNtczrAXXwF/AjWNMduNMb2MMR2NMduBG4CZxpifASzLWgtMAf4GZgOPWZaVmnPh56zXXnuNmjVrcuutt7Jhw+k+DHFxcURGRnLzzTfTvXt3Dh48CNgDsi5fvhywB40NCgrKeM+2bdto06YNNWvWJDo6OtPjjRgxggYNGhAaGprpjAOpqan06NGD4OBgQkJCMgaX3bJlC23atCE8PJybbrqJ9evXA9CjRw+efPJJGjduTNWqVfn2228B2LVrF02bNiUsLIzg4GAWLlyY/ZMlcgHGmIya4OTkZJKTk8+axcKyLKZMmcJ9993nVIgi2WZZMKgv7N5hD3ERWNTpiMTbXLKGzLKsC31LTrvA9q8Br2UnqHM99RTExblzjxAWBqNHX3h9bGwsX3/9NStXriQlJYX69esTHh4OwIMPPsh7771HnTp1GD58ONHR0Yy+2M6ApUuXsmbNGooUKUKDBg24/fbbiYg4PYTbL7/8wqZNm1i6dCmWZdG+fXsWLFhw1gTlcXFx7NixI2Nk/UOHDgHwyCOPMH78eKpXr86SJUvo27dvxiTku3btYtGiRaxfv5727dtz99138+WXX9K6dWteeuklUlNTOXbs2BWfP5ErkZqaSnh4OJs3b+axxx6jUaNGGesWLlxIuXLlqF69uoMRimTP91/A9K/gmVegXqNLby9yrjw3dZK7LFy4kI4dO1KkSBEA2rdvD8Dhw4c5dOgQN998M/v376dz5848+uijl9xfy5YtKVWqFAB33XUXixYtOi8h++WXXzLmokxMTGTTpk1nJWRVq1Zl69atPPHEE9x+++20atWKxMRE/vjjD+65556M7c6cxqlDhw74+Phw/fXXs2fPHgAaNGjAQw89RHJyMh06dFDbHclxvr6+xMXFcejQITp27MiaNWsIDg4G4KuvvlLtmHi1bf/YtWMNmkDf82e6E7ksXpGQXaLyKcdcaHLwCylQoABpaWmA3ZD5Yvs697VlWQwcOPCiyV2JEiVYtWoVP//8M2PGjGHKlCmMHj2a4sWLE3eBKsRChQqddQyApk2bsmDBAmbOnEm3bt0YMGAADz744GV/TpGsKl68OM2aNWP27NkEBweTkpLCd999R2xsrNOhiWRJSoo9xIUxMGqShriQrNNclhfQtGlTpk2bxvHjxzl69Cg//vgjAMWKFaNEiRIZ7a6++eYbbr75ZsCenDv9D0t6e610v/76KwcOHOD48eN8//333HjjjWetb926NZ9++mnGpOE7duxg7969Z22zf/9+0tLS6NSpE6+88gorVqzgqquuokqVKnzzzTeAnXStWrXqop/t33//pWzZsvzf//0fvXr1YsWKFVk5RSKXZd++fRm3148fP86cOXOoVasWQMbzypUrOxihSNa9/xqs+BNeHQ+Vr3U6GvFmXlFD5oT69etndMu/9tpruemmmzLWTZw4kd69e3P06FGuvfZavvjiCwCeffZZ7r33Xj7//HNuueWWs/bXpEkTunXrxubNm7n//vvPul0J0KpVK9atW8cNN9wA2MNhTJo0ibJly2Zss2PHDnr27JlRCzds2DAAvvjiC/r06cOrr75KcnIyXbp0oW7duhf8bPPnz2fEiBEULFiQwMBAPvvss2ycKZGL27VrF927dyc1NZW0tDTuvfde2rVrB8DXX3+t25XitWL/gHeHwl3d4E79GEs2mfTbWE6KiIiw0nsnplu3bh21a9d2KKLLs3//fgBKly7tcCTe79xz6Q3X3xPFxMQAdg9byR6dS/eJiYnhBNA2D53Lo0egbV37VuVPcVD0qpw/5qyYGPzRz6Q7ZPf32xgTa1lWxKW3vHy6ZSkiInKFBj8Gu7bZQ1xkJRk7ceIEdzZsSJu6dWlZpw5vu4Y6WhsXR4fISNqGhXFHRARxSzWUZ36hW5YiIiJX4IcvYdokeGoIhN+QtX0UKlSIL+fNI8A1YPLdTZrQrG1bRg0eTL+oKJq3bctvP/3EsOeeY/L8+e4MXzyUashEREQu07Z4eLkPhDeGx1/K+n6MMQS4BkxOSU4mJX3AZGNIPHIEgCOHD1OuYkU3RC3eQAmZiFxSYmIiUVFRlClTBh8fH8qUKUNUVFRGr2CR/CAlBfp3s0flHz0JCmTzHlNqaiptw8IIL1uWJi1bUq9RI6JGj2bYgAHccPXVvP7sszzn6rwleZ8SMhG5qMTERCIjI9kav5Xh3w3n5kE3M/y74WyN30pkZKSSMsk3xg2HZYvglbH2fJXZ5evry6y4OP7cvp1VS5eyYc0aJo0bx6BRo/hz2zYGjRrF8716Zf9A4hWUkInIRY0YMYJ64fXY3mw7Ty16ivnM56lFT7G92XbqhddjxIgRTocokuNWLIbRQ+DO+6FjV/fuu1jx4kQ2a8b/Zs9m6sSJtLnrLgBuv+ceVqlRf76hhCyHxMXF8dNPP11yu/RJl7MqKCgoY8gId5s+fTrDhw8H4Pvvv+fvv//OWDd48GDmzJmTI8cVzzJ27FiaPdyM5buXk3gqEXwg8VQiy3cvp9nDzRg3bpzTIYrkqMSj8NQDUL6yXTvmDgn79nHYNWDyiePH+X3OHK6rVYuyFSuy+H//A+CPefMI0hyv+Uae6WWZmpbKrM2zWLlrJfUq1KNttbb4+jg3h0VcXBzLly/ntttucyyG7Grfvn3GHJ7ff/897dq14/rrrwdg6NChToYmuSghIYFJcyaRSOJZ/8Ilnkhk0pxJJCQkOBecSC6IegK2x8Pk/8FVxdyzz727dvFM9+6kuQZMvv3ee2nRrh1XFS9OdL9+pKSkUMjfn2EffuieA4rHyxM1ZKlpqbSe1Jr7pt5H1Pwo7pt6H60ntSY1LTXL+4yPj6dWrVo8/PDDBAcH88ADDzBnzhxuvPFGqlevzlJXNfKKFSto3Lgx9erVo3HjxmzYsIFTp04xePBgJk+eTFhYGJMnTyYxMZGePXsSEhJCaGgoU6dOzTjWSy+9RN26dYmMjMyYAHzfvn106tSJBg0a0KBBA37//XfA/uPYqlUr6tWrx6OPPsqFBvYNDAzkmWeeoX79+rRo0YJ9+/YBdqIYGRlJaGgoHTt25ODBgwC8++67XH/99YSGhtKlSxfAHjjv8ccf548//mD69OkMGDCAsLAwtmzZQo8ePTKmh5o7dy716tUjJCSEhx56KGNy86CgIKKioqhfvz4hISGsX78egP/973+EhYURFhZGvXr1OHr0aJavk+S8UqVK0fXWrgT6n12bG+gfSNdbu1KqVCmHIhPJeT9OhqkT7R6VDZq4b7+1Q0P5aeVKZq9ezS9r1tBv8GAAGjRpwozYWGavWsUPS5YQEh7uvoOKR8sTCdmszbNYsmMJiacSsbBIPJXIkh1LmLV5Vrb2u3nzZvr168fq1atZv349X375JYsWLWLkyJG8/vrrAFSvXp0FCxawcuVKhg4dyosvvoifnx9Dhw6lc+fOxMXF0blzZ1555RWKFSvGX3/9xerVqzOmVkpKSiIyMpJVq1bRtGlTPvroIwD69evH008/zbJly5g6dSoPP/wwANHR0TRp0oSVK1fSvn17/vvvv0xjT0pKon79+qxYsYKbb76Z6OhoAB588EHeeOMNVq9eTUhISEb58OHDWblyJatXr2b8+PFn7atx48a0b9+eESNGEBcXx3XXXZex7sSJE/To0YPJkyfz119/kZKSctYtrNKlS7NixQr69OnDyJEjARg5ciRjxowhLi6OhQsXUrhw4WxdJ8lZffv2Zf7H84koH0GgXyCkQaBfIBHlI5j/8Xz69OnjdIgiOWLHf/BSbwhrBE8McjoayevyREK2ctdKkk4lnVWWdCqJuN1x2dpvlSpVCAkJwcfHhzp16tCiRQuMMYSEhBAfHw/AkSNHuOeeewgODubpp59m7dq1me5rzpw5PPbYYxmvS5QoAYCfn1/GvH7h4eEZ+50zZw6PP/44YWFhtG/fniNHjnD06FEWLFhA1652i9Lbb789Yz/n8vHxoXPnzgB07dqVRYsWcfjwYQ4dOpQxGXr37t1ZsGABAKGhoTzwwANMmjSJAlfQl3vDhg1UqVKFGjVqnLdPgLtcjVPP/Gw33ngj/fv359133+XQoUNXdDzJfQMGDGBl7Eoqz6/M6CajaUYzRjcZTeX5lVkZu5IBAwY4HaKI26WmwtPdIDUF3vkCChZ0OiLJ6/JEQlavQj0C/ALOKgvwCyCsfFi29luoUKGM5z4+PhmvfXx8SElJAewJvps3b86aNWv48ccfOXHiRKb7sizLHvTvHAULFswo9/X1zdhvWloaf/75J3FxccTFxbFjxw6KFi0KkOl+LuVS75k5cyaPPfYYsbGxhIeHZ8RxKZeaCzX9nJ352V544QU+/vhjjh8/TmRkZMatTPFMgYGBLF68mKpBVRnYaSALXl3AwE4DqRpUlcWLF2e7Y4qIJxr/JixdANHvw7XXXXp7kezKEwlZ22ptaVSpEYF+gRgMgX6BNKrUiLbV2ub4sY8ePUqlSpWA05OVAhQtWvSstlGtWrXi/fffz3id3nbrQs7dPi4uDoCmTZvyxRdfADBr1qwL7ictLS2jjdeXX35JkyZNKFasGCVKlGDhwoUAfP7559x8882kpaWxbds2mjdvzptvvsmhQ4fOG1vq3M+TrlatWsTHx7N58+az9nkxW7ZsISQkhOeff56IiAglZF4gMDCQ6Oho9u7dS2pqKnv37iU6OlrJmORJq5bBqMHQrjN0evDi2yYlJvJ2VBT1y5Shio8P9cuU4e2oKJI0Pp9coTyRkPn6+PJz15/5qtNXDG0+lK86fcXPXX/OlV6Wjz/+OAMHDuTGG28kNfV0J4LmzZvz999/ZzTqf/nllzl48CDBwcHUrVuX33777aL7fffdd1m+fDmhoaFcf/31Ge26oqKiWLBgAfXr1+eXX37hmmuuyfT9AQEBrF27lvDwcObNm8dgV4PRiRMnMmDAAEJDQ4mLi2Pw4MGkpqbStWtXQkJCqFevHk8//TTFixc/a39dunSxx6OqV48tW7ZklPv7+zNhwgTuueeejNu7vXv3vuhnGz16dMZ5KFy4MG3b5nziLCJyOZISod/9ULYCvDYOLnZzISkxkY6RkRyKjyd22TIGDRpE7LJlHIqPp2NkpJIyuSLmUrecckNERIS1fPnys8rWrVtH7dq1HYro8qSP/1W6dGmHIzlfYGCgV42gfu659Ibr74nSa2l79OjhaBx5gc6l+8TExHACaOsF5/K5XvDNBPjqN4i8eGU/b0dFcSg+nrFjxxIQEIAxBsuySEpKom/fvhQPCqK/q+OUO8yKicEf/Uy6Q3Z/v40xsZZlRbgvojw0DpmIiEh2/PQtTPkUHnvx0skYwKSxY4ldtoyAAwfA1WkJ7DsU0dHRhDds6NaETPK2PHHLUs7nTbVjIiJO27UdBj4CdRvAU0Mu7z0HExL44a23iL/mGpYEBwN2BypjDBMmTOCgBk2WK6CETERE8rXUVOj/ICSfgtFXMMTFDcWK8djkyQRVr06jf/8F7J7nlmXRs2dPSmjQZLkCumUpIiL52kdvwZ+/wZufQJXLnDrSb/lyfjl5kl1AqdmzKXJGB6ukpCSioqLoqkGT5QqohkxERPKtv2Jh5EvQthPc0/Py3+dz4ADUq0encuXoEx1NfHw8gwcPJj4+nr59+7I4NpZHNWiyXAElZCIiki8dS7KHuChdDoZ9ePEhLtIVXL0a0tI40aoV+xctImb5cooHBRHesCGvvPoq4Q0bUjwoiGmLFxOgcfrkCighyyFxcXH89NNPl9zuQgNrjh8/ns8++8wtsTRr1oz0YUVuu+02Dh06dNnbi4jkVa88Df9sgrc/h+IlL719kalTqRARQeAnn9gFxhAQGEj/6GhW7N3LP6mprNi7l/7R0UrG5IqpDVkOiYuLY/ny5dx2221Zev+lBlfNqstJEkVE8rrZ0+Crj6D389C4+aW3D5g4kVIPPcSxTp1I7N495wOUfEc1ZBcQHx9PrVq1ePjhhwkODuaBBx5gzpw53HjjjVSvXp2lS5cCsGLFCho3bky9evVo3LgxGzZs4NSpUwwePJjJkydnjNSfmJhIz549CQkJITQ0lKlTp2Yc66WXXqJu3bpERkayZ88eAIYMGcLIkSMBu8bq+eefp2HDhtSoUSNj6qNjx45x7733EhoaSufOnWnUqNEla7aCgoLYv38/8fHx1K5dm//7v/+jTp06tGrViuPHj5+1bVpaGt27d+fll18mNTWVHj16EBwcTEhICKNGjXLbuRYRyU3rVkPfuyEkHPoPvfT2Rd9/n9I9epDUvTv7v/oK/PxyPkjJd7ynhmznTti16+yy4sXhuusgJQVWrTr/PSEh9i/O1q1w7pyPFSpAxYoXPeTmzZv55ptv+PDDD2nQoAFffvklixYtYvr06bz++ut8/PHHVK9enQULFlCgQAHmzJnDiy++yNSpUxk6dCjLly/PmI/y+eefp1ixYvz111/A6bksk5KSiIyM5LXXXuO5557jo48+4uWXXz4vlpSUFJYuXcpPP/1EdHQ0c+bMYezYsZQoUYLVq1ezZs0awsLCLutUptu0aRNfffUVH330Effeey9Tp06la9euGcd74IEHCA4O5qWXXiI2NpYdO3awZs0agEve9hQR8UQpKdC2rv387c8uI7dKS6PwTz9x5MknOThqFPioHkNyhvckZB9+COeOeNyxI3z3HRw6BBGZzGCwY4eddA0cCFOmnL0uKgqGDLnoIatUqUJISAgAderUoUWLFhhjCAkJId41KvORI0e455572LRpE8YYkpOTM93XnDlz+PrrrzNelyhRAgA/Pz/atWsHQHh4OL/++mum77/rrrsytkk/9qJFi+jXrx8AwcHBhIaGXvTzZPb50pO4M/cL8Oijj3Lvvffy0ksvAVC1alW2bt3KE088we23306rVq2u6FgiIp5g2HP24y23Q/XrL7KhZeG7cyeplSqx9/vv7cHJLqfVv0gWeU9C9sgjcMcdZ5elT4BdvDhkdqsufY7JYcPguefOXlehwiUPWahQoYznPj4+Ga99fHxISUlx7XoYzZs3Z9q0acTHx9OsWbNM92VZFiaTX+aCBQtmlPv6+mbs90KxnLlNduchPfPz+fr6nnXLsnHjxvz2228888wz+Pv7U6JECVatWsXPP//MmDFjmDJlCp9++mm2ji8ikpt++BI+GQU9noAh715k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",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (10, 7))\n",
    "\n",
    "xmin = -320\n",
    "xmax = -220 \n",
    "plt.xlim([xmin, xmax]) \n",
    "ymin = 30\n",
    "ymax = 115\n",
    "plt.ylim([ymin, ymax])\n",
    "\n",
    "trace.plotAsMarkers(append=True, label='raw positions')\n",
    "network.plot('b-', '', '', '', 1.5, plt)\n",
    "si.plot(base=False, append=True)\n",
    "\n",
    "for k in range(len(trace)):\n",
    "    xp = trace[k].position.getX()\n",
    "    yp = trace[k].position.getY()\n",
    "    if xp >= xmin and xp <= xmax and yp >= ymin and yp <= 115:\n",
    "        plt.text(xp+2, yp+2, str(k))\n",
    "    \n",
    "    xmm = trace[\"hmm_inference\", k][0].getX()\n",
    "    ymm = trace[\"hmm_inference\", k][0].getY()\n",
    "    plt.plot(xmm, ymm, 'go', markersize=5, label='matched positions' if k == 0 else \"\")\n",
    "    \n",
    "    X = [xp, xmm]\n",
    "    Y = [yp, ymm]\n",
    "    plt.plot(X, Y, \"r--\", linewidth=1.4, label='matching links' if k == 0 else \"\")\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8116266b-0962-4693-9f59-7e2032c467a9",
   "metadata": {},
   "source": [
    "<br/>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "39cd99c3-5757-4254-bfbb-a74e6e712418",
   "metadata": {},
   "source": [
    "As expected, **observation 37** is not map-matched: the index of the edge onto which the point is projected has value **\"-1\"**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "80d388c4-5c02-4938-b6d8-4b33a6a36b9b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Index of the edge onto which the point is projected:  -1\n",
      "Distance to the raw observation =  0.0\n"
     ]
    }
   ],
   "source": [
    "print ('')\n",
    "print ('Index of the edge onto which the point is projected: ', \n",
    "               trace[\"hmm_inference\", 37][1])\n",
    "\n",
    "# Distance to the raw observation is 0\n",
    "p = trace[\"hmm_inference\", 37][0]\n",
    "d = trace[37].position.distance2DTo(p)\n",
    "print ('Distance to the raw observation = ', d)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4336018e-1d54-4183-8bf4-d6193bd8c1c9",
   "metadata": {},
   "source": [
    "<br/>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d14d0113-0cb0-4d9c-a496-40455cf79f28",
   "metadata": {},
   "source": [
    "Note that **observation 40** is map-matched on a node and not on an edge of the network. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "6ed8bc41-bcb8-4ca2-b1a3-47982477b4a5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Distance between the map-matched point and the start vertex:  0.0  m\n",
      "Distance between the map-matched point and the end vertex:  245.84  m\n"
     ]
    }
   ],
   "source": [
    "print ('')\n",
    "print ('Distance between the map-matched point and the start vertex: ', \n",
    "              trace[\"hmm_inference\", 40][2], ' m')\n",
    "print ('Distance between the map-matched point and the end vertex: ', \n",
    "              round(trace[\"hmm_inference\", 40][3], 2), ' m')"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
