Giter Site home page Giter Site logo

opentraffic / reporter-quality-testing-rig Goto Github PK

View Code? Open in Web Editor NEW
8.0 8.0 7.0 36.46 MB

OTv2: Docker containers and Jupyter Notebooks for testing Open Traffic Reporter quality using synthesized GPS data

Home Page: https://mapzen.com/tag/data-driven/

License: GNU Lesser General Public License v3.0

Jupyter Notebook 99.24% Python 0.76%

reporter-quality-testing-rig's People

Contributors

drewda avatar mxndrwgrdnr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

reporter-quality-testing-rig's Issues

QA match scoring by segment type

  • ensure "roundabout", "turn channel", etc. segment types are exposed by trace_attributes requests
  • add route type to match DataFrames and csv's
  • export match scores by segment type

analysing samples with an without timestamp rejection

So we recently merged some work that dealt with rejecting paths from the search space that arent possible given the time stamps on each input gps point. See: valhalla/valhalla#840

To do so @mxndrwgrdnr gave me 7 generated test cases to throw at the new algorithm, they were in a csv file that looks like this:

route,noise,sample_rate,route_url,trace_attr_url,reporter_url
Quinn Notary Svc_to_Harvest Printing Svc,60.0,20.0,http://valhalla:8002/route?json=%7B%22locations%22%3A%5B%7B%22lat%22%3A37.794447%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.404719%7D%2C%7B%22lat%22%3A37.789319%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.401486%7D%5D%2C%22costing%22%3A%22auto%22%2C%22id%22%3A%22my_work_route%22%7D,http://valhalla:8002/trace_attributes?json=%7B%22trace_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A5%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22encoded_polyline%22%3A%22eixagAhv~mhFuJo%7BAm%40gDb%5BwDlZwD%7Cw%40mJd%40%3Fl%40Mj%5BwDzUwCtEm%40dy%40mJly%40%7DJ~b%40cFzPyBvC_%40~C%5DjA%5Dt%40O%60C%3FxBNz%40NcFaHuTuZ%22%2C%22costing%22%3A%22auto%22%7D,http://reporter:8003/report?json=%7B%22match_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A98.69%2C%22mode%22%3A%22auto%22%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22uuid%22%3A%22999999%22%2C%22trace%22%3A%5B%7B%22lat%22%3A37.794749%2C%22lon%22%3A-122.405067%2C%22time%22%3A1500830321%7D%2C%7B%22lat%22%3A37.793797%2C%22lon%22%3A-122.403793%2C%22time%22%3A1500830341%7D%2C%7B%22lat%22%3A37.791173%2C%22lon%22%3A-122.403579%2C%22time%22%3A1500830361%7D%2C%7B%22lat%22%3A37.789243%2C%22lon%22%3A-122.402859%2C%22time%22%3A1500830381%7D%2C%7B%22lat%22%3A37.7898%2C%22lon%22%3A-122.401827%2C%22time%22%3A1500830389%7D%5D%7D
Silver Universal_to_Diane Lavin Accounting,40.0,10.0,http://valhalla:8002/route?json=%7B%22locations%22%3A%5B%7B%22lat%22%3A37.772337%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.40449%7D%2C%7B%22lat%22%3A37.775332%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.397206%7D%5D%2C%22costing%22%3A%22auto%22%2C%22id%22%3A%22my_work_route%22%7D,http://valhalla:8002/trace_attributes?json=%7B%22trace_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A5%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22encoded_polyline%22%3A%22iyl%60gAp%7C%7DmhFiMcQsKgOwYy%60%40pb%40kk%40fNaRvSgY~CuEoCeDePoTkBgCoCgDiH%7DJse%40so%40qa%40%7Bj%40sAkBaa%40%7Bi%40qaAmsA_DeE%22%2C%22costing%22%3A%22auto%22%7D,http://reporter:8003/report?json=%7B%22match_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A65.79%2C%22mode%22%3A%22auto%22%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22uuid%22%3A%22999999%22%2C%22trace%22%3A%5B%7B%22lat%22%3A37.772886%2C%22lon%22%3A-122.404412%2C%22time%22%3A1500830370%7D%2C%7B%22lat%22%3A37.773418%2C%22lon%22%3A-122.40361%2C%22time%22%3A1500830380%7D%2C%7B%22lat%22%3A37.773024%2C%22lon%22%3A-122.402899%2C%22time%22%3A1500830390%7D%2C%7B%22lat%22%3A37.772252%2C%22lon%22%3A-122.402221%2C%22time%22%3A1500830400%7D%2C%7B%22lat%22%3A37.772388%2C%22lon%22%3A-122.401573%2C%22time%22%3A1500830410%7D%2C%7B%22lat%22%3A37.773059%2C%22lon%22%3A-122.400638%2C%22time%22%3A1500830420%7D%2C%7B%22lat%22%3A37.773943%2C%22lon%22%3A-122.399776%2C%22time%22%3A1500830430%7D%2C%7B%22lat%22%3A37.774653%2C%22lon%22%3A-122.398884%2C%22time%22%3A1500830440%7D%2C%7B%22lat%22%3A37.775333%2C%22lon%22%3A-122.398067%2C%22time%22%3A1500830450%7D%2C%7B%22lat%22%3A37.775454%2C%22lon%22%3A-122.397734%2C%22time%22%3A1500830457%7D%5D%7D
Allstate Insurance_to_Byron Meyer & Co,80.0,10.0,http://valhalla:8002/route?json=%7B%22locations%22%3A%5B%7B%22lat%22%3A37.792878%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.401021%7D%2C%7B%22lat%22%3A37.797396%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.402887%7D%5D%2C%22costing%22%3A%22auto%22%2C%22id%22%3A%22my_work_route%22%7D,http://valhalla:8002/trace_attributes?json=%7B%22trace_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A5%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22encoded_polyline%22%3A%22aeuagAftwmhFgJjAk%40Ng%40%3Fy%5BvD%7BZtDmZvD%7DYtDmZfDeThC_Dl%40gD%5C%5Cwr%40~HaNzAcKjAoNzAeKjAtElt%40%22%2C%22costing%22%3A%22auto%22%7D,http://reporter:8003/report?json=%7B%22match_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A100.0%2C%22mode%22%3A%22auto%22%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22uuid%22%3A%22999999%22%2C%22trace%22%3A%5B%7B%22lat%22%3A37.792689%2C%22lon%22%3A-122.401189%2C%22time%22%3A1500830398%7D%2C%7B%22lat%22%3A37.793536%2C%22lon%22%3A-122.401671%2C%22time%22%3A1500830408%7D%2C%7B%22lat%22%3A37.794196%2C%22lon%22%3A-122.402074%2C%22time%22%3A1500830418%7D%2C%7B%22lat%22%3A37.79495%2C%22lon%22%3A-122.402544%2C%22time%22%3A1500830428%7D%2C%7B%22lat%22%3A37.795923%2C%22lon%22%3A-122.402532%2C%22time%22%3A1500830438%7D%2C%7B%22lat%22%3A37.796998%2C%22lon%22%3A-122.402832%2C%22time%22%3A1500830448%7D%2C%7B%22lat%22%3A37.797185%2C%22lon%22%3A-122.403353%2C%22time%22%3A1500830458%7D%2C%7B%22lat%22%3A37.797128%2C%22lon%22%3A-122.403577%2C%22time%22%3A1500830460%7D%5D%7D
Record Pressing Com_to_Manulife Financial,80.0,10.0,http://valhalla:8002/route?json=%7B%22locations%22%3A%5B%7B%22lat%22%3A37.789436%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.391897%7D%2C%7B%22lat%22%3A37.793358%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.398782%7D%5D%2C%22costing%22%3A%22auto%22%2C%22id%22%3A%22my_work_route%22%7D,http://valhalla:8002/trace_attributes?json=%7B%22trace_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A5%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22encoded_polyline%22%3A%22gnnagAtuemhFso%40~%7B%40aCfDoTvYmTbZmOpSkf%40%60p%40%7BTtZe%60%40nh%40yV%60%5C%5CW%5C%5C%7Ci%40zt%40%5D%7C%40kAvC%7BArFzFn%7C%40ut%40nIoC%5Em%40L%22%2C%22costing%22%3A%22auto%22%7D,http://reporter:8003/report?json=%7B%22match_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A100.0%2C%22mode%22%3A%22auto%22%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22uuid%22%3A%22999999%22%2C%22trace%22%3A%5B%7B%22lat%22%3A37.790046%2C%22lon%22%3A-122.391581%2C%22time%22%3A1500830537%7D%2C%7B%22lat%22%3A37.790621%2C%22lon%22%3A-122.39223%2C%22time%22%3A1500830547%7D%2C%7B%22lat%22%3A37.791624%2C%22lon%22%3A-122.393083%2C%22time%22%3A1500830557%7D%2C%7B%22lat%22%3A37.792766%2C%22lon%22%3A-122.39404%2C%22time%22%3A1500830567%7D%2C%7B%22lat%22%3A37.793513%2C%22lon%22%3A-122.394817%2C%22time%22%3A1500830577%7D%2C%7B%22lat%22%3A37.793764%2C%22lon%22%3A-122.395647%2C%22time%22%3A1500830587%7D%2C%7B%22lat%22%3A37.792622%2C%22lon%22%3A-122.396474%2C%22time%22%3A1500830597%7D%2C%7B%22lat%22%3A37.792889%2C%22lon%22%3A-122.397606%2C%22time%22%3A1500830607%7D%2C%7B%22lat%22%3A37.793728%2C%22lon%22%3A-122.397977%2C%22time%22%3A1500830614%7D%5D%7D
Graceway Solution_to_Joseph Tan CPA,60.0,10.0,http://valhalla:8002/route?json=%7B%22locations%22%3A%5B%7B%22lat%22%3A37.753527%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.491054%7D%2C%7B%22lat%22%3A37.758594%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.492805%7D%5D%2C%22costing%22%3A%22auto%22%2C%22id%22%3A%22my_work_route%22%7D,http://valhalla:8002/trace_attributes?json=%7B%22trace_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A5%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22encoded_polyline%22%3A%22aoh_gAdjgshFVrPLpHzAdbAqsBbGqsBbGwqAtD%22%2C%22costing%22%3A%22auto%22%7D,http://reporter:8003/report?json=%7B%22match_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A98.69%2C%22mode%22%3A%22auto%22%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22uuid%22%3A%22999999%22%2C%22trace%22%3A%5B%7B%22lat%22%3A37.753842%2C%22lon%22%3A-122.492322%2C%22time%22%3A1500830562%7D%2C%7B%22lat%22%3A37.753789%2C%22lon%22%3A-122.493478%2C%22time%22%3A1500830572%7D%2C%7B%22lat%22%3A37.754647%2C%22lon%22%3A-122.493241%2C%22time%22%3A1500830582%7D%2C%7B%22lat%22%3A37.755876%2C%22lon%22%3A-122.493216%2C%22time%22%3A1500830592%7D%2C%7B%22lat%22%3A37.756652%2C%22lon%22%3A-122.493241%2C%22time%22%3A1500830602%7D%2C%7B%22lat%22%3A37.757467%2C%22lon%22%3A-122.493297%2C%22time%22%3A1500830612%7D%2C%7B%22lat%22%3A37.757966%2C%22lon%22%3A-122.493265%2C%22time%22%3A1500830622%7D%2C%7B%22lat%22%3A37.758735%2C%22lon%22%3A-122.493189%2C%22time%22%3A1500830632%7D%2C%7B%22lat%22%3A37.758847%2C%22lon%22%3A-122.493304%2C%22time%22%3A1500830633%7D%5D%7D
Allstate Insurance_to_Gregory M Haynes,80.0,10.0,http://valhalla:8002/route?json=%7B%22locations%22%3A%5B%7B%22lat%22%3A37.792878%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.401021%7D%2C%7B%22lat%22%3A37.78667%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.404513%7D%5D%2C%22costing%22%3A%22auto%22%2C%22id%22%3A%22my_work_route%22%7D,http://valhalla:8002/trace_attributes?json=%7B%22trace_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A5%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22encoded_polyline%22%3A%22aeuagAftwmhFtm%40aHnD~h%40%5C%5C%60H%5ErEjApRhBxWdy%40mJly%40%7DJ~b%40cFzPyBvC_%40~C%5DjA%5Dt%40O%60C%3FxBNz%40N~DrFje%40ro%40xBvClUb%5Btx%40lhA%22%2C%22costing%22%3A%22auto%22%7D,http://reporter:8003/report?json=%7B%22match_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A100.0%2C%22mode%22%3A%22auto%22%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22uuid%22%3A%22999999%22%2C%22trace%22%3A%5B%7B%22lat%22%3A37.793432%2C%22lon%22%3A-122.400099%2C%22time%22%3A1500830589%7D%2C%7B%22lat%22%3A37.792448%2C%22lon%22%3A-122.400658%2C%22time%22%3A1500830599%7D%2C%7B%22lat%22%3A37.792682%2C%22lon%22%3A-122.401646%2C%22time%22%3A1500830609%7D%2C%7B%22lat%22%3A37.791288%2C%22lon%22%3A-122.401518%2C%22time%22%3A1500830619%7D%2C%7B%22lat%22%3A37.790065%2C%22lon%22%3A-122.400904%2C%22time%22%3A1500830629%7D%2C%7B%22lat%22%3A37.788924%2C%22lon%22%3A-122.401386%2C%22time%22%3A1500830639%7D%2C%7B%22lat%22%3A37.788322%2C%22lon%22%3A-122.402504%2C%22time%22%3A1500830649%7D%2C%7B%22lat%22%3A37.787622%2C%22lon%22%3A-122.403616%2C%22time%22%3A1500830659%7D%2C%7B%22lat%22%3A37.787533%2C%22lon%22%3A-122.404123%2C%22time%22%3A1500830669%7D%5D%7D
Quinn Notary Svc_to_Manulife Financial,80.0,10.0,http://valhalla:8002/route?json=%7B%22locations%22%3A%5B%7B%22lat%22%3A37.794447%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.404719%7D%2C%7B%22lat%22%3A37.793358%2C%22type%22%3A%22break%22%2C%22lon%22%3A-122.398782%7D%5D%2C%22costing%22%3A%22auto%22%2C%22id%22%3A%22my_work_route%22%7D,http://valhalla:8002/trace_attributes?json=%7B%22trace_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A5%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22encoded_polyline%22%3A%22eixagAhv~mhFuJo%7BAm%40gDm%40wDwC%7Di%40_%40%7DIyBed%40UwDLuEkF_%7C%40m%40uEvD%5DnSiCdZgDzZuDz%5BwDd%40%3FkGgbA%5DeE%22%2C%22costing%22%3A%22auto%22%7D,http://reporter:8003/report?json=%7B%22match_options%22%3A%7B%22turn_penalty_factor%22%3A500%2C%22sigma_z%22%3A4.07%2C%22breakage_distance%22%3A2000%2C%22search_radius%22%3A50%2C%22beta%22%3A3%2C%22gps_accuracy%22%3A100.0%2C%22mode%22%3A%22auto%22%7D%2C%22shape_match%22%3A%22map_snap%22%2C%22uuid%22%3A%22999999%22%2C%22trace%22%3A%5B%7B%22lat%22%3A37.794056%2C%22lon%22%3A-122.404027%2C%22time%22%3A1500830596%7D%2C%7B%22lat%22%3A37.794242%2C%22lon%22%3A-122.402513%2C%22time%22%3A1500830606%7D%2C%7B%22lat%22%3A37.794428%2C%22lon%22%3A-122.400901%2C%22time%22%3A1500830616%7D%2C%7B%22lat%22%3A37.794676%2C%22lon%22%3A-122.399514%2C%22time%22%3A1500830626%7D%2C%7B%22lat%22%3A37.793991%2C%22lon%22%3A-122.39922%2C%22time%22%3A1500830636%7D%2C%7B%22lat%22%3A37.79299%2C%22lon%22%3A-122.398776%2C%22time%22%3A1500830646%7D%2C%7B%22lat%22%3A37.792898%2C%22lon%22%3A-122.397889%2C%22time%22%3A1500830655%7D%5D%7D

I then wrote a small program to rip through the file and check the before and after. The program steps through each test, and calls trace_attributes on a local service first with the timestamps, and then again with the timestamps removed (so the algorithm cant use them). Here's the program that does this (remember to run a valhalla server on port 8002 for this to make requests against):

#!/usr/bin/env python
import urllib
import json
import requests
import sys

#six degrees of precision in valhalla
inv = 1.0 / 1e6;

#decode an encoded string
def decode(encoded):
  decoded = []
  previous = [0,0]
  i = 0
  #for each byte
  while i < len(encoded):
    #for each coord (lat, lon)
    ll = [0,0]
    for j in [0, 1]:
      shift = 0
      byte = 0x20
      #keep decoding bytes until you have this coord
      while byte >= 0x20:
        byte = ord(encoded[i]) - 63
        i += 1
        ll[j] |= (byte & 0x1f) << shift
        shift += 5
      #get the final value adding the previous offset and remember it for the next
      ll[j] = previous[j] + (~(ll[j] >> 1) if ll[j] & 1 else (ll[j] >> 1))
      previous[j] = ll[j]
    #scale by the precision and chop off long coords also flip the positions so
    #its the far more standard lon,lat instead of lat,lon
    decoded.append([float('%.6f' % (ll[1] * inv)), float('%.6f' % (ll[0] * inv))])
  #hand back the list of coordinates
  return decoded

def fix_request(request):
  request['shape'] = request.pop('trace')
  request['trace_options'] = request.pop('match_options')
  del request['trace_options']['mode']
  del request['trace_options']['search_radius']
  request['trace_options']['gps_accuracy'] *= float(sys.argv[2])
  request['trace_options']['max_route_time_factor'] = float(sys.argv[3])
  request['costing'] = 'auto'
  return request

skip = True
with open(sys.argv[1]) as f:
  for line in f:
    if skip:
      skip = False
      continue
    parts = line.split(',')
    route = urllib.unquote(parts[4])
    route = json.loads(route[route.find('json=')+5:])
    route = decode(route['encoded_polyline'])
    request = urllib.unquote(parts[5])
    request = json.loads(request[request.find('json=')+5:])
    request = fix_request(request)
    gps = [ [p['lon'], p['lat']] for p in request['shape'] ]
    after = requests.post('http://localhost:8002/trace_attributes?', data = json.dumps(request))
    after = json.loads(after.text)
    after = decode(after['shape'])
    for p in request['shape']:
      del p['time']
    before = requests.post('http://localhost:8002/trace_attributes?', data = json.dumps(request))
    before = json.loads(before.text)
    before = decode(before['shape'])
    

    geo = {'type':'FeatureCollection','features':[
            {'geometry':{'type':'LineString','coordinates':route},'type':'Feature','properties':{'stroke':'#00ff00','stroke-width':2,'description':'original'}},
            {'geometry':{'type':'LineString','coordinates':gps},'type':'Feature','properties':{'stroke':'#0000ff','stroke-width':2,'descripition':'fake gps'}},
            {'geometry':{'type':'LineString','coordinates':before},'type':'Feature','properties':{'stroke':'#ffff00','stroke-width':2,'descripition':'before'}},
            {'geometry':{'type':'LineString','coordinates':after},'type':'Feature','properties':{'stroke':'#00ffff','stroke-width':2,'description':'after'}}
          ]}

    print parts[0]
    print ''.join(['http://geojson.io/#data=data:application/json,',urllib.quote(json.dumps(geo, separators=(',', ':')))])
    print

You'll notice that the program takes 3 arguments. The first is the name of the csv file. The second argument is a multiplier by which we scale the original requests' gps_accuracy. When measuring the actual faked locations in the generated gps path from the original route path, i noticed that they were often way outside of the gps_accuracy. For example there are some where the faked gps point is 140m away but the accuracy is set to 98m. This means that the algorithm will not be able to find the correct route no matter what as it wont search for candidate edges further than 98m from that gps point. I think there may have been a miscommunication. Perhaps it was assumed that we used search_radius + gps_accuracy when finding candidates but in fact we use: max(search_radius, gps_accuracy) apologies for this miscommunication. Anyway the third argument is the max_route_time_factor which is how much time to allow a path between two points to take as a multiplier of the actual time between the two points in the input. For my testing I ended up using: ./test.py blah.csv 2 1.5 so thats doubling the gps_accuracy and allowing for 50% more time to be spent between two adjacent points in a faked gps.

So what were the results. Well below you'll find geojsons which are linked to geojson.io. Each one has 4 linestrings. a green one which is the original route, a blue one which is the faked gps, a yellow one which is the map match without using time information, and a cyan one which is the map match with using time information. sometimes they overlap, sorry about that...

Quinn Notary Svc_to_Harvest Printing Svc
http://geojson.io/#data=data:application/json,%7B%22type%22%3A%22FeatureCollection%22%2C%22features%22%3A%5B%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404725%2C37.794467%5D%2C%5B-122.403245%2C37.794654%5D%2C%5B-122.403161%2C37.794677%5D%2C%5B-122.403069%2C37.794227%5D%2C%5B-122.402977%2C37.793788%5D%2C%5B-122.402794%2C37.792877%5D%2C%5B-122.402794%2C37.792858%5D%2C%5B-122.402787%2C37.792835%5D%2C%5B-122.402695%2C37.792381%5D%2C%5B-122.402619%2C37.792015%5D%2C%5B-122.402596%2C37.791908%5D%2C%5B-122.402413%2C37.790977%5D%2C%5B-122.402222%2C37.790042%5D%2C%5B-122.402108%2C37.789466%5D%2C%5B-122.402047%2C37.78918%5D%2C%5B-122.402031%2C37.789104%5D%2C%5B-122.402016%2C37.789024%5D%2C%5B-122.402001%2C37.788986%5D%2C%5B-122.401993%2C37.788959%5D%2C%5B-122.401993%2C37.788894%5D%2C%5B-122.402001%2C37.788833%5D%2C%5B-122.402009%2C37.788803%5D%2C%5B-122.401864%2C37.788917%5D%2C%5B-122.401421%2C37.789264%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ff00%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22original%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.405067%2C37.794749%5D%2C%5B-122.403793%2C37.793797%5D%2C%5B-122.403579%2C37.791173%5D%2C%5B-122.402859%2C37.789243%5D%2C%5B-122.401827%2C37.7898%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%230000ff%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22fake%20gps%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404877%2C37.794857%5D%2C%5B-122.403237%2C37.795063%5D%2C%5B-122.403161%2C37.794677%5D%2C%5B-122.403069%2C37.794227%5D%2C%5B-122.402977%2C37.793788%5D%2C%5B-122.402794%2C37.792877%5D%2C%5B-122.402794%2C37.792858%5D%2C%5B-122.402787%2C37.792835%5D%2C%5B-122.402695%2C37.792381%5D%2C%5B-122.402619%2C37.792015%5D%2C%5B-122.402596%2C37.791908%5D%2C%5B-122.402726%2C37.791893%5D%2C%5B-122.403885%2C37.791744%5D%2C%5B-122.404122%2C37.791717%5D%2C%5B-122.404236%2C37.791702%5D%2C%5B-122.404542%2C37.79166%5D%2C%5B-122.404358%2C37.790725%5D%2C%5B-122.404061%2C37.790763%5D%2C%5B-122.403695%2C37.790813%5D%2C%5B-122.402817%2C37.790927%5D%2C%5B-122.402749%2C37.790935%5D%2C%5B-122.402413%2C37.790977%5D%2C%5B-122.402222%2C37.790042%5D%2C%5B-122.402108%2C37.789466%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%23ffff00%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22before%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404877%2C37.794857%5D%2C%5B-122.403237%2C37.795063%5D%2C%5B-122.403161%2C37.794677%5D%2C%5B-122.403069%2C37.794227%5D%2C%5B-122.402977%2C37.793788%5D%2C%5B-122.402794%2C37.792877%5D%2C%5B-122.402794%2C37.792858%5D%2C%5B-122.402787%2C37.792835%5D%2C%5B-122.402695%2C37.792381%5D%2C%5B-122.402619%2C37.792015%5D%2C%5B-122.402596%2C37.791908%5D%2C%5B-122.402413%2C37.790977%5D%2C%5B-122.402222%2C37.790042%5D%2C%5B-122.402108%2C37.789466%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ffff%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22after%22%7D%7D%5D%7D

Silver Universal_to_Diane Lavin Accounting
http://geojson.io/#data=data:application/json,%7B%22type%22%3A%22FeatureCollection%22%2C%22features%22%3A%5B%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404313%2C37.772197%5D%2C%5B-122.404023%2C37.772426%5D%2C%5B-122.403763%2C37.772628%5D%2C%5B-122.403222%2C37.773056%5D%2C%5B-122.402512%2C37.772487%5D%2C%5B-122.402207%2C37.772243%5D%2C%5B-122.401787%2C37.771911%5D%2C%5B-122.40168%2C37.771831%5D%2C%5B-122.401597%2C37.771903%5D%2C%5B-122.401253%2C37.772178%5D%2C%5B-122.401185%2C37.772232%5D%2C%5B-122.401101%2C37.772304%5D%2C%5B-122.40091%2C37.772453%5D%2C%5B-122.400132%2C37.773071%5D%2C%5B-122.39943%2C37.773624%5D%2C%5B-122.399376%2C37.773666%5D%2C%5B-122.39869%2C37.774211%5D%2C%5B-122.397339%2C37.775276%5D%2C%5B-122.39724%2C37.775356%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ff00%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22original%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404412%2C37.772886%5D%2C%5B-122.40361%2C37.773418%5D%2C%5B-122.402899%2C37.773024%5D%2C%5B-122.402221%2C37.772252%5D%2C%5B-122.401573%2C37.772388%5D%2C%5B-122.400638%2C37.773059%5D%2C%5B-122.399776%2C37.773943%5D%2C%5B-122.398884%2C37.774653%5D%2C%5B-122.398067%2C37.775333%5D%2C%5B-122.397734%2C37.775454%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%230000ff%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22fake%20gps%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404252%2C37.773014%5D%2C%5B-122.403763%2C37.772628%5D%2C%5B-122.403222%2C37.773056%5D%2C%5B-122.402512%2C37.772487%5D%2C%5B-122.402207%2C37.772243%5D%2C%5B-122.401787%2C37.771911%5D%2C%5B-122.40168%2C37.771831%5D%2C%5B-122.401597%2C37.771903%5D%2C%5B-122.401253%2C37.772178%5D%2C%5B-122.401185%2C37.772232%5D%2C%5B-122.401101%2C37.772304%5D%2C%5B-122.40091%2C37.772453%5D%2C%5B-122.39943%2C37.773624%5D%2C%5B-122.399506%2C37.773689%5D%2C%5B-122.400109%2C37.774185%5D%2C%5B-122.400132%2C37.774215%5D%2C%5B-122.400139%2C37.774246%5D%2C%5B-122.400132%2C37.77428%5D%2C%5B-122.39943%2C37.774829%5D%2C%5B-122.397995%2C37.775959%5D%2C%5B-122.397553%2C37.7756%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%23ffff00%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22before%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404252%2C37.773014%5D%2C%5B-122.403763%2C37.772628%5D%2C%5B-122.403222%2C37.773056%5D%2C%5B-122.402512%2C37.772487%5D%2C%5B-122.402207%2C37.772243%5D%2C%5B-122.401787%2C37.771911%5D%2C%5B-122.40168%2C37.771831%5D%2C%5B-122.401597%2C37.771903%5D%2C%5B-122.401253%2C37.772178%5D%2C%5B-122.401185%2C37.772232%5D%2C%5B-122.401101%2C37.772304%5D%2C%5B-122.40091%2C37.772453%5D%2C%5B-122.39943%2C37.773624%5D%2C%5B-122.399376%2C37.773666%5D%2C%5B-122.39869%2C37.774211%5D%2C%5B-122.397423%2C37.775207%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ffff%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22after%22%7D%7D%5D%7D

Allstate Insurance_to_Byron Meyer & Co
http://geojson.io/#data=data:application/json,%7B%22type%22%3A%22FeatureCollection%22%2C%22features%22%3A%5B%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.401108%2C37.792865%5D%2C%5B-122.401146%2C37.793045%5D%2C%5B-122.401154%2C37.793067%5D%2C%5B-122.401154%2C37.793087%5D%2C%5B-122.401246%2C37.793548%5D%2C%5B-122.401337%2C37.793994%5D%2C%5B-122.401429%2C37.794433%5D%2C%5B-122.40152%2C37.794864%5D%2C%5B-122.401604%2C37.795303%5D%2C%5B-122.401673%2C37.795642%5D%2C%5B-122.401696%2C37.795722%5D%2C%5B-122.401711%2C37.795806%5D%2C%5B-122.401871%2C37.796634%5D%2C%5B-122.401917%2C37.796875%5D%2C%5B-122.401955%2C37.797069%5D%2C%5B-122.402001%2C37.797317%5D%2C%5B-122.402039%2C37.797512%5D%2C%5B-122.402894%2C37.797405%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ff00%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22original%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.401189%2C37.792689%5D%2C%5B-122.401671%2C37.793536%5D%2C%5B-122.402074%2C37.794196%5D%2C%5B-122.402544%2C37.79495%5D%2C%5B-122.402532%2C37.795923%5D%2C%5B-122.402832%2C37.796998%5D%2C%5B-122.403353%2C37.797185%5D%2C%5B-122.403577%2C37.797128%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%230000ff%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22fake%20gps%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.401078%2C37.792705%5D%2C%5B-122.401146%2C37.793045%5D%2C%5B-122.401154%2C37.793067%5D%2C%5B-122.401154%2C37.793087%5D%2C%5B-122.401246%2C37.793548%5D%2C%5B-122.401337%2C37.793994%5D%2C%5B-122.401429%2C37.794433%5D%2C%5B-122.402291%2C37.794322%5D%2C%5B-122.402382%2C37.794776%5D%2C%5B-122.402207%2C37.794792%5D%2C%5B-122.401612%2C37.794853%5D%2C%5B-122.40152%2C37.794864%5D%2C%5B-122.401604%2C37.795303%5D%2C%5B-122.401673%2C37.795642%5D%2C%5B-122.401696%2C37.795722%5D%2C%5B-122.401711%2C37.795806%5D%2C%5B-122.401871%2C37.796634%5D%2C%5B-122.401917%2C37.796875%5D%2C%5B-122.401955%2C37.797069%5D%2C%5B-122.402039%2C37.797512%5D%2C%5B-122.402894%2C37.797405%5D%2C%5B-122.403618%2C37.797313%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%23ffff00%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22before%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.401078%2C37.792705%5D%2C%5B-122.401146%2C37.793045%5D%2C%5B-122.401154%2C37.793067%5D%2C%5B-122.401154%2C37.793087%5D%2C%5B-122.401246%2C37.793548%5D%2C%5B-122.401337%2C37.793994%5D%2C%5B-122.401429%2C37.794433%5D%2C%5B-122.40152%2C37.794864%5D%2C%5B-122.401604%2C37.795303%5D%2C%5B-122.401673%2C37.795642%5D%2C%5B-122.401696%2C37.795722%5D%2C%5B-122.402047%2C37.795688%5D%2C%5B-122.402398%2C37.79565%5D%2C%5B-122.402741%2C37.795608%5D%2C%5B-122.403344%2C37.795528%5D%2C%5B-122.403359%2C37.795688%5D%2C%5B-122.403397%2C37.795871%5D%2C%5B-122.403512%2C37.796424%5D%2C%5B-122.403565%2C37.79668%5D%2C%5B-122.403695%2C37.797302%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ffff%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22after%22%7D%7D%5D%7D

Record Pressing Com_to_Manulife Financial
http://geojson.io/#data=data:application/json,%7B%22type%22%3A%22FeatureCollection%22%2C%22features%22%3A%5B%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.391915%2C37.789428%5D%2C%5B-122.392891%2C37.790206%5D%2C%5B-122.392975%2C37.790271%5D%2C%5B-122.393403%2C37.790615%5D%2C%5B-122.393837%2C37.790958%5D%2C%5B-122.394166%2C37.791221%5D%2C%5B-122.394951%2C37.791851%5D%2C%5B-122.395394%2C37.792201%5D%2C%5B-122.396058%2C37.792732%5D%2C%5B-122.396523%2C37.793113%5D%2C%5B-122.396538%2C37.793125%5D%2C%5B-122.3974%2C37.792438%5D%2C%5B-122.397431%2C37.792453%5D%2C%5B-122.397507%2C37.792491%5D%2C%5B-122.397629%2C37.792537%5D%2C%5B-122.398613%2C37.792411%5D%2C%5B-122.398781%2C37.79327%5D%2C%5B-122.398797%2C37.793342%5D%2C%5B-122.398804%2C37.793365%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ff00%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22original%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.391581%2C37.790046%5D%2C%5B-122.39223%2C37.790621%5D%2C%5B-122.393083%2C37.791624%5D%2C%5B-122.39404%2C37.792766%5D%2C%5B-122.394817%2C37.793513%5D%2C%5B-122.395647%2C37.793764%5D%2C%5B-122.396474%2C37.792622%5D%2C%5B-122.397606%2C37.792889%5D%2C%5B-122.397977%2C37.793728%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%230000ff%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22fake%20gps%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.391305%2C37.789825%5D%2C%5B-122.391861%2C37.789386%5D%2C%5B-122.392891%2C37.790206%5D%2C%5B-122.392975%2C37.790271%5D%2C%5B-122.393403%2C37.790615%5D%2C%5B-122.393837%2C37.790958%5D%2C%5B-122.394166%2C37.791221%5D%2C%5B-122.394951%2C37.791851%5D%2C%5B-122.394097%2C37.79256%5D%2C%5B-122.393746%2C37.792835%5D%2C%5B-122.393204%2C37.793247%5D%2C%5B-122.393319%2C37.793323%5D%2C%5B-122.39383%2C37.793708%5D%2C%5B-122.393899%2C37.793762%5D%2C%5B-122.393998%2C37.793842%5D%2C%5B-122.394677%2C37.794384%5D%2C%5B-122.394707%2C37.794403%5D%2C%5B-122.39473%2C37.794418%5D%2C%5B-122.394768%2C37.794437%5D%2C%5B-122.394806%2C37.794448%5D%2C%5B-122.394845%2C37.794448%5D%2C%5B-122.394883%2C37.794445%5D%2C%5B-122.394921%2C37.794429%5D%2C%5B-122.394928%2C37.794422%5D%2C%5B-122.394951%2C37.79441%5D%2C%5B-122.395691%2C37.793827%5D%2C%5B-122.39618%2C37.793445%5D%2C%5B-122.396271%2C37.793365%5D%2C%5B-122.396538%2C37.793125%5D%2C%5B-122.3974%2C37.792438%5D%2C%5B-122.397431%2C37.792453%5D%2C%5B-122.397507%2C37.792491%5D%2C%5B-122.397629%2C37.792537%5D%2C%5B-122.398613%2C37.792411%5D%2C%5B-122.398781%2C37.79327%5D%2C%5B-122.398797%2C37.793342%5D%2C%5B-122.398804%2C37.793365%5D%2C%5B-122.398705%2C37.793376%5D%2C%5B-122.398675%2C37.79338%5D%2C%5B-122.397927%2C37.793476%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%23ffff00%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22before%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.392136%2C37.789608%5D%2C%5B-122.392891%2C37.790206%5D%2C%5B-122.392975%2C37.790271%5D%2C%5B-122.393403%2C37.790615%5D%2C%5B-122.393837%2C37.790958%5D%2C%5B-122.394166%2C37.791221%5D%2C%5B-122.394951%2C37.791851%5D%2C%5B-122.394097%2C37.79256%5D%2C%5B-122.393746%2C37.792835%5D%2C%5B-122.393204%2C37.793247%5D%2C%5B-122.393319%2C37.793323%5D%2C%5B-122.39383%2C37.793708%5D%2C%5B-122.393899%2C37.793762%5D%2C%5B-122.393998%2C37.793842%5D%2C%5B-122.394677%2C37.794384%5D%2C%5B-122.394707%2C37.794403%5D%2C%5B-122.39473%2C37.794418%5D%2C%5B-122.394768%2C37.794437%5D%2C%5B-122.394806%2C37.794448%5D%2C%5B-122.394845%2C37.794448%5D%2C%5B-122.394883%2C37.794445%5D%2C%5B-122.394921%2C37.794429%5D%2C%5B-122.394928%2C37.794422%5D%2C%5B-122.394951%2C37.79441%5D%2C%5B-122.395691%2C37.793827%5D%2C%5B-122.39618%2C37.793445%5D%2C%5B-122.396271%2C37.793365%5D%2C%5B-122.396538%2C37.793125%5D%2C%5B-122.3974%2C37.792438%5D%2C%5B-122.397431%2C37.792453%5D%2C%5B-122.397507%2C37.792491%5D%2C%5B-122.397629%2C37.792537%5D%2C%5B-122.398613%2C37.792411%5D%2C%5B-122.398781%2C37.79327%5D%2C%5B-122.398797%2C37.793342%5D%2C%5B-122.398804%2C37.793365%5D%2C%5B-122.398705%2C37.793376%5D%2C%5B-122.398675%2C37.79338%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ffff%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22after%22%7D%7D%5D%7D

Graceway Solution_to_Joseph Tan CPA
http://geojson.io/#data=data:application/json,%7B%22type%22%3A%22FeatureCollection%22%2C%22features%22%3A%5B%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.491059%2C37.753601%5D%2C%5B-122.491341%2C37.753589%5D%2C%5B-122.491494%2C37.753582%5D%2C%5B-122.492569%2C37.753536%5D%2C%5B-122.492699%2C37.755401%5D%2C%5B-122.492829%2C37.757266%5D%2C%5B-122.49292%2C37.75859%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ff00%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22original%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.492322%2C37.753842%5D%2C%5B-122.493478%2C37.753789%5D%2C%5B-122.493241%2C37.754647%5D%2C%5B-122.493216%2C37.755876%5D%2C%5B-122.493241%2C37.756652%5D%2C%5B-122.493297%2C37.757467%5D%2C%5B-122.493265%2C37.757966%5D%2C%5B-122.493189%2C37.758735%5D%2C%5B-122.493304%2C37.758847%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%230000ff%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22fake%20gps%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.492302%2C37.753547%5D%2C%5B-122.492569%2C37.753536%5D%2C%5B-122.493477%2C37.753494%5D%2C%5B-122.493638%2C37.753486%5D%2C%5B-122.493767%2C37.755355%5D%2C%5B-122.492699%2C37.755401%5D%2C%5B-122.492829%2C37.757266%5D%2C%5B-122.492943%2C37.758861%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%23ffff00%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22before%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.492302%2C37.753547%5D%2C%5B-122.492569%2C37.753536%5D%2C%5B-122.493477%2C37.753494%5D%2C%5B-122.493638%2C37.753486%5D%2C%5B-122.493767%2C37.755355%5D%2C%5B-122.493897%2C37.757217%5D%2C%5B-122.492829%2C37.757266%5D%2C%5B-122.492943%2C37.758861%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ffff%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22after%22%7D%7D%5D%7D

Allstate Insurance_to_Gregory M Haynes
http://geojson.io/#data=data:application/json,%7B%22type%22%3A%22FeatureCollection%22%2C%22features%22%3A%5B%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.401108%2C37.792865%5D%2C%5B-122.400963%2C37.792118%5D%2C%5B-122.401635%2C37.79203%5D%2C%5B-122.40178%2C37.792015%5D%2C%5B-122.401886%2C37.791999%5D%2C%5B-122.402199%2C37.791961%5D%2C%5B-122.402596%2C37.791908%5D%2C%5B-122.402413%2C37.790977%5D%2C%5B-122.402222%2C37.790042%5D%2C%5B-122.402108%2C37.789466%5D%2C%5B-122.402047%2C37.78918%5D%2C%5B-122.402031%2C37.789104%5D%2C%5B-122.402016%2C37.789024%5D%2C%5B-122.402001%2C37.788986%5D%2C%5B-122.401993%2C37.788959%5D%2C%5B-122.401993%2C37.788894%5D%2C%5B-122.402001%2C37.788833%5D%2C%5B-122.402009%2C37.788803%5D%2C%5B-122.402131%2C37.788707%5D%2C%5B-122.402909%2C37.788093%5D%2C%5B-122.402985%2C37.788032%5D%2C%5B-122.403435%2C37.787673%5D%2C%5B-122.40461%2C37.78675%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ff00%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22original%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.400099%2C37.793432%5D%2C%5B-122.400658%2C37.792448%5D%2C%5B-122.401646%2C37.792682%5D%2C%5B-122.401518%2C37.791288%5D%2C%5B-122.400904%2C37.790065%5D%2C%5B-122.401386%2C37.788924%5D%2C%5B-122.402504%2C37.788322%5D%2C%5B-122.403616%2C37.787622%5D%2C%5B-122.404123%2C37.787533%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%230000ff%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22fake%20gps%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.400017%2C37.793441%5D%2C%5B-122.399979%2C37.793235%5D%2C%5B-122.399979%2C37.793216%5D%2C%5B-122.399972%2C37.793193%5D%2C%5B-122.399865%2C37.792671%5D%2C%5B-122.399788%2C37.792259%5D%2C%5B-122.400963%2C37.792118%5D%2C%5B-122.401635%2C37.79203%5D%2C%5B-122.40178%2C37.792015%5D%2C%5B-122.401886%2C37.791999%5D%2C%5B-122.402199%2C37.791961%5D%2C%5B-122.402596%2C37.791908%5D%2C%5B-122.402413%2C37.790977%5D%2C%5B-122.401146%2C37.791133%5D%2C%5B-122.400773%2C37.791183%5D%2C%5B-122.399704%2C37.791309%5D%2C%5B-122.399575%2C37.791328%5D%2C%5B-122.399598%2C37.791233%5D%2C%5B-122.399605%2C37.791202%5D%2C%5B-122.39956%2C37.790908%5D%2C%5B-122.399544%2C37.790817%5D%2C%5B-122.399544%2C37.790786%5D%2C%5B-122.399552%2C37.79076%5D%2C%5B-122.399575%2C37.790725%5D%2C%5B-122.399941%2C37.790435%5D%2C%5B-122.400094%2C37.790313%5D%2C%5B-122.400383%2C37.790088%5D%2C%5B-122.401398%2C37.789283%5D%2C%5B-122.401864%2C37.788917%5D%2C%5B-122.402009%2C37.788803%5D%2C%5B-122.402131%2C37.788707%5D%2C%5B-122.402909%2C37.788093%5D%2C%5B-122.402985%2C37.788032%5D%2C%5B-122.403435%2C37.787673%5D%2C%5B-122.40387%2C37.78733%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%23ffff00%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22before%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.399979%2C37.793216%5D%2C%5B-122.399972%2C37.793193%5D%2C%5B-122.399865%2C37.792671%5D%2C%5B-122.399788%2C37.792259%5D%2C%5B-122.400963%2C37.792118%5D%2C%5B-122.401635%2C37.79203%5D%2C%5B-122.40178%2C37.792015%5D%2C%5B-122.401886%2C37.791999%5D%2C%5B-122.402199%2C37.791961%5D%2C%5B-122.402596%2C37.791908%5D%2C%5B-122.402413%2C37.790977%5D%2C%5B-122.402222%2C37.790042%5D%2C%5B-122.402108%2C37.789466%5D%2C%5B-122.402047%2C37.78918%5D%2C%5B-122.402031%2C37.789104%5D%2C%5B-122.402016%2C37.789024%5D%2C%5B-122.402001%2C37.788986%5D%2C%5B-122.401993%2C37.788959%5D%2C%5B-122.401993%2C37.788894%5D%2C%5B-122.402001%2C37.788833%5D%2C%5B-122.402009%2C37.788803%5D%2C%5B-122.402131%2C37.788707%5D%2C%5B-122.402909%2C37.788093%5D%2C%5B-122.402985%2C37.788032%5D%2C%5B-122.403435%2C37.787673%5D%2C%5B-122.40387%2C37.78733%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ffff%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22after%22%7D%7D%5D%7D

Quinn Notary Svc_to_Manulife Financial
http://geojson.io/#data=data:application/json,%7B%22type%22%3A%22FeatureCollection%22%2C%22features%22%3A%5B%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404725%2C37.794467%5D%2C%5B-122.403245%2C37.794654%5D%2C%5B-122.403161%2C37.794677%5D%2C%5B-122.403069%2C37.7947%5D%2C%5B-122.402382%2C37.794776%5D%2C%5B-122.402207%2C37.794792%5D%2C%5B-122.401612%2C37.794853%5D%2C%5B-122.40152%2C37.794864%5D%2C%5B-122.401413%2C37.794857%5D%2C%5B-122.400437%2C37.794975%5D%2C%5B-122.40033%2C37.794998%5D%2C%5B-122.400315%2C37.794906%5D%2C%5B-122.400246%2C37.794578%5D%2C%5B-122.400162%2C37.794143%5D%2C%5B-122.400071%2C37.793697%5D%2C%5B-122.399979%2C37.793235%5D%2C%5B-122.399979%2C37.793216%5D%2C%5B-122.398903%2C37.79335%5D%2C%5B-122.398804%2C37.793365%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ff00%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22original%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.404027%2C37.794056%5D%2C%5B-122.402513%2C37.794242%5D%2C%5B-122.400901%2C37.794428%5D%2C%5B-122.399514%2C37.794676%5D%2C%5B-122.39922%2C37.793991%5D%2C%5B-122.398776%2C37.79299%5D%2C%5B-122.397889%2C37.792898%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%230000ff%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22fake%20gps%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.40413%2C37.794544%5D%2C%5B-122.403245%2C37.794654%5D%2C%5B-122.403161%2C37.794677%5D%2C%5B-122.403069%2C37.7947%5D%2C%5B-122.402382%2C37.794776%5D%2C%5B-122.402207%2C37.794792%5D%2C%5B-122.401612%2C37.794853%5D%2C%5B-122.40152%2C37.794864%5D%2C%5B-122.401413%2C37.794857%5D%2C%5B-122.400437%2C37.794975%5D%2C%5B-122.40033%2C37.794998%5D%2C%5B-122.399567%2C37.79515%5D%2C%5B-122.399369%2C37.795177%5D%2C%5B-122.399178%2C37.7952%5D%2C%5B-122.398308%2C37.79531%5D%2C%5B-122.39811%2C37.795337%5D%2C%5B-122.398011%2C37.795341%5D%2C%5B-122.397988%2C37.795261%5D%2C%5B-122.397889%2C37.794788%5D%2C%5B-122.39782%2C37.794441%5D%2C%5B-122.398995%2C37.794292%5D%2C%5B-122.400162%2C37.794143%5D%2C%5B-122.400071%2C37.793697%5D%2C%5B-122.399979%2C37.793235%5D%2C%5B-122.399979%2C37.793216%5D%2C%5B-122.398903%2C37.79335%5D%2C%5B-122.398804%2C37.793365%5D%2C%5B-122.398705%2C37.793376%5D%2C%5B-122.398675%2C37.79338%5D%2C%5B-122.397629%2C37.793514%5D%2C%5B-122.397622%2C37.793495%5D%2C%5B-122.397515%2C37.792942%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%23ffff00%22%2C%22stroke-width%22%3A2%2C%22descripition%22%3A%22before%22%7D%7D%2C%7B%22geometry%22%3A%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B-122.40413%2C37.794544%5D%2C%5B-122.403245%2C37.794654%5D%2C%5B-122.403161%2C37.794677%5D%2C%5B-122.403069%2C37.7947%5D%2C%5B-122.402382%2C37.794776%5D%2C%5B-122.402207%2C37.794792%5D%2C%5B-122.401612%2C37.794853%5D%2C%5B-122.40152%2C37.794864%5D%2C%5B-122.401413%2C37.794857%5D%2C%5B-122.400437%2C37.794975%5D%2C%5B-122.40033%2C37.794998%5D%2C%5B-122.400315%2C37.794906%5D%2C%5B-122.400246%2C37.794578%5D%2C%5B-122.400162%2C37.794143%5D%2C%5B-122.400071%2C37.793697%5D%2C%5B-122.399979%2C37.793235%5D%2C%5B-122.399979%2C37.793216%5D%2C%5B-122.398903%2C37.79335%5D%2C%5B-122.398804%2C37.793365%5D%2C%5B-122.398705%2C37.793376%5D%2C%5B-122.398675%2C37.79338%5D%2C%5B-122.397629%2C37.793514%5D%2C%5B-122.397622%2C37.793495%5D%2C%5B-122.397515%2C37.792942%5D%5D%7D%2C%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%2300ffff%22%2C%22stroke-width%22%3A2%2C%22description%22%3A%22after%22%7D%7D%5D%7D

All but two of them seem fixed. I think this is pretty good given the extreme amount of noise (> 100m) in some of these.

possible QA metrics

Based on conversations with @drewda and @dnesbitt61 I'm outlining a few potential top-level metrics to consider including in the QA rig.

  1. GPS trace linear distance vs matched segment length. This test can be used with real and synthetic traces to detect significant under matching/overmatching of GPS to segments. Can be used as a crude first-pass check.

  2. Incorrectly matched (overmatched) segments as % of total, by segment count and segment length.

  3. Unmatched segments as % of total, by segment count and segment length.

  4. Matched segments that exceed GPS trace speed by threshold x (e.g. where matched speed is 2x GPS trace speed), by segment count and by length. Can be used with real and synthetic traces.

  5. Matched segments that are slower than GPS trace speed by threshold x (e.g. where matched speed is 1/2 GPS trace speed), by segment count and by length. Can be used with real and synthetic traces.

  6. Mean and distribution of speed matches, by segment count and by length. Assuming synthetic traces have a constant speed this can be used to measure variance in speed detection over the length of trace.

synthesize_gps() should add noise to points based on total magnitude of the "noise vector" rather than applying noise to the individual vector components

Taking cues from Kevin's implementation in valhalla here, the GPS noise needs to be distributed across both positional components of the noise vector (lat and lon). Currently I am applying the randomly sampled noise to each component individually which produces points that are much farther away from the original location than should be allowed by the sampling function.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.