├── .gitignore ├── CONTRIBUTING.md ├── Docker ├── pull_pubsub_docker │ ├── Dockerfile │ ├── Your_key.json │ ├── config_geo_pubsub_pull.py │ └── requirements.txt └── push_pubsub_docker │ ├── Dockerfile │ ├── Your_key.json │ ├── config_geo_pubsub_push.py │ └── requirements.txt ├── LICENSE ├── README.md ├── config_geo_pubsub_pull.py ├── config_geo_pubsub_push.py ├── images ├── geo_bq-arch.png ├── geo_bq-push-4.png ├── geo_bq-schema-6.png ├── geo_bq-subs-3.png ├── geo_bq-topic-2.png ├── geo_bq_pull-5.png └── visual-map.png ├── resources ├── Freeways-Metadata-2010_01_01-copyright-san-diego.txt ├── data │ ├── Mobile-GPS-Trip1.csv │ ├── Mobile-GPS-Trip10.csv │ ├── Mobile-GPS-Trip100.csv │ ├── Mobile-GPS-Trip1000.csv │ ├── Mobile-GPS-Trip1001.csv │ ├── Mobile-GPS-Trip1002.csv │ ├── Mobile-GPS-Trip1003.csv │ ├── Mobile-GPS-Trip1004.csv │ ├── Mobile-GPS-Trip1005.csv │ └── Mobile-GPS-Trip1006.csv ├── geocoded_journeys.json ├── requirements.txt ├── setup.sh └── setup.yaml └── web └── bqapi.html /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Want to contribute? Great! First, read this page (including the small print at the end). 2 | 3 | ### Before you contribute 4 | Before we can use your code, you must sign the 5 | [Google Individual Contributor License Agreement] 6 | (https://cla.developers.google.com/about/google-individual) 7 | (CLA), which you can do online. The CLA is necessary mainly because you own the 8 | copyright to your changes, even after your contribution becomes part of our 9 | codebase, so we need your permission to use and distribute your code. We also 10 | need to be sure of various other things—for instance that you'll tell us if you 11 | know that your code infringes on other people's patents. You don't have to sign 12 | the CLA until after you've submitted your code for review and a member has 13 | approved it, but you must do it before we can put your code into our codebase. 14 | Before you start working on a larger contribution, you should get in touch with 15 | us first through the issue tracker with your idea so that we can help out and 16 | possibly guide you. Coordinating up front makes it much easier to avoid 17 | frustration later on. 18 | 19 | ### Code reviews 20 | All submissions, including submissions by project members, require review. We 21 | use Github pull requests for this purpose. 22 | 23 | ### The small print 24 | Contributions made by corporations are covered by a different agreement than 25 | the one above, the 26 | [Software Grant and Corporate Contributor License Agreement] 27 | (https://cla.developers.google.com/about/google-corporate). -------------------------------------------------------------------------------- /Docker/pull_pubsub_docker/Dockerfile: -------------------------------------------------------------------------------- 1 | # Copyright 2016 Google Inc. All rights reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | #you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # 14 | # geo_pubsub_pull 15 | # 16 | # VERSION 0.0.1 17 | 18 | FROM python:2.7 19 | RUN mkdir -p /usr/src/app 20 | WORKDIR /usr/src/app 21 | COPY requirements.txt /usr/src/app/ 22 | RUN pip install --no-cache-dir -r requirements.txt 23 | COPY . /usr/src/app 24 | CMD ["python", "./config_geo_pubsub_pull.py"] -------------------------------------------------------------------------------- /Docker/pull_pubsub_docker/Your_key.json: -------------------------------------------------------------------------------- 1 | { 2 | REPLACE FILE WITH YOUR ACTUAL CREDENTIAL FILE 3 | } -------------------------------------------------------------------------------- /Docker/pull_pubsub_docker/config_geo_pubsub_pull.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Copyright 2015 Google Inc. All Rights Reserved. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | """ 16 | This script reverse geocodes mesages pulled from a pub/sub queue (converts latitude & longitude to a street address), 17 | calculates the elevation above sea level, 18 | and converts from UTC time to local time by querying which timezone the locations fall in 19 | It then writes the data plus this added geographic context to the BigQuery table 20 | """ 21 | import sys 22 | import base64 23 | from apiclient import discovery 24 | from dateutil.parser import parse 25 | import httplib2 26 | import yaml 27 | import googlemaps 28 | import time 29 | import datetime 30 | import uuid 31 | import json 32 | import signal 33 | import sys 34 | # from oauth2client.client import GoogleCredentials 35 | from oauth2client import client as oauth2client 36 | 37 | with open("/tmp/creds/setup.yaml", 'r') as varfile: 38 | cfg = yaml.load(varfile) 39 | 40 | # default; set to your traffic topic. Can override on command line. 41 | TRAFFIC_TOPIC = cfg["env"]["PUBSUB_TOPIC"] 42 | PUBSUB_SCOPES = ['https://www.googleapis.com/auth/pubsub'] 43 | running_proc = True 44 | 45 | def signal_term_handler(signal, frame): 46 | global running_proc 47 | print "Exiting application" 48 | running_proc = False 49 | sys.exit(0) 50 | 51 | 52 | 53 | def create_pubsub_client(http=None): 54 | credentials = oauth2client.GoogleCredentials.get_application_default() 55 | if credentials.create_scoped_required(): 56 | credentials = credentials.create_scoped(PUBSUB_SCOPES) 57 | if not http: 58 | http = httplib2.Http() 59 | credentials.authorize(http) 60 | return discovery.build('pubsub', 'v1', http=http) 61 | 62 | def create_bigquery_client(): 63 | credentials = oauth2client.GoogleCredentials.get_application_default() 64 | # Construct the service object for interacting with the BigQuery API. 65 | return discovery.build('bigquery', 'v2', credentials=credentials) 66 | 67 | def stream_row_to_bigquery(bigquery, row, 68 | num_retries=5): 69 | # Generate a unique row id so retries 70 | # don't accidentally duplicate insert 71 | insert_all_data = { 72 | 'insertId': str(uuid.uuid4()), 73 | 'rows': [{'json': row}] 74 | } 75 | return bigquery.tabledata().insertAll( 76 | projectId=cfg["env"]["PROJECT_ID"], 77 | datasetId=cfg["env"]["DATASET_ID"], 78 | tableId=cfg["env"]["TABLE_ID"], 79 | body=insert_all_data).execute(num_retries=num_retries) 80 | 81 | #Use Maps API Geocoding service to convert lat,lng into a human readable address 82 | def reverse_geocode(gmaps, latitude, longitude): 83 | return gmaps.reverse_geocode((latitude, longitude)) 84 | 85 | #extract a named property e.g. formatted_address from the Geocoding API response. 86 | def extract_address(list, property): 87 | address = "" 88 | if(list[0] is not None): 89 | address = list[0][property] 90 | return address 91 | 92 | #extract a structured address component e.g. postal_code from a Geocoding API response 93 | def extract_component(list, property): 94 | val = "" 95 | for address in list: 96 | for component in address["address_components"]: 97 | if component["types"][0] == property: 98 | val = component["long_name"] 99 | break 100 | return val 101 | 102 | #calculate elevation using Google Maps Elevation API 103 | def get_elevation(gmaps, latitude, longitude): 104 | elevation = gmaps.elevation((latitude, longitude)) 105 | elevation_metres = None 106 | if(len(elevation)>0): 107 | elevation_metres = elevation[0]["elevation"] 108 | return elevation_metres 109 | 110 | #get the timezone including any DST offset for the time the GPS position was recorded 111 | def get_timezone(gmaps, latitude, longitude, posix_time): 112 | return gmaps.timezone((latitude, longitude), timestamp=posix_time) 113 | 114 | def get_local_time(timezone_response): 115 | # get offset from UTC 116 | rawOffset = float(timezone_response["rawOffset"]) 117 | # get any daylight savings offset 118 | dstOffset = float(timezone_response["dstOffset"]) 119 | 120 | # combine for total offset from UTC 121 | return rawOffset + dstOffset 122 | 123 | def main(argv): 124 | 125 | client = create_pubsub_client() 126 | 127 | # You can fetch multiple messages with a single API call. 128 | batch_size = 100 129 | 130 | # options to limit number of geocodes e.g to stay under daily quota. 131 | geocode_counter = 0 132 | geocode_limit = 10 133 | 134 | # option to wait for some time until daily quotas are reset 135 | wait_timeout = 2 136 | 137 | #create a Google Maps API client 138 | gmaps = googlemaps.Client(key=cfg["env"]["MAPS_API_KEY"]) 139 | subscription = cfg["env"]["SUBSCRIPTION"] 140 | 141 | # Create a POST body for the Pub/Sub request 142 | body = { 143 | # Setting ReturnImmediately to false instructs the API to wait 144 | # to collect the message up to the size of MaxEvents, or until 145 | # the timeout. 146 | 'returnImmediately': False, 147 | 'maxMessages': batch_size, 148 | } 149 | 150 | signal.signal(signal.SIGINT, signal_term_handler) 151 | while running_proc: 152 | #pull messages from Pubsub 153 | resp = client.projects().subscriptions().pull( 154 | subscription=subscription, body=body).execute() 155 | 156 | received_messages = resp.get('receivedMessages') 157 | 158 | 159 | if received_messages is not None: 160 | ack_ids = [] 161 | bq = create_bigquery_client() 162 | for received_message in received_messages: 163 | pubsub_message = received_message.get('message') 164 | if pubsub_message: 165 | # Process messages 166 | msg = base64.b64decode(str(pubsub_message.get('data'))) 167 | 168 | #we stored time as a message attribute 169 | ts = pubsub_message["attributes"]["timestamp"] 170 | 171 | # create a datetime object so we can get a POSIX timestamp for TimeZone API 172 | utc_time = datetime.datetime.strptime(ts, "%Y-%m-%d %H:%M:%S") 173 | posix_time = time.mktime(utc_time.timetuple()) 174 | 175 | #our messages are in a comma-separated string. 176 | #Split into a list 177 | data_list = msg.split(",") 178 | 179 | #extract latitude,longitude for input into Google Maps API calls 180 | latitude = float(data_list[1]) 181 | longitude = float(data_list[2]) 182 | 183 | #Contruct a row object that matches the BigQuery table schema 184 | row = { 'VehicleID': data_list[0], 'UTCTime': None, 'Offset': 0, 'Address':"", 'Zipcode':"", 'Speed':data_list[3], 'Bearing':data_list[4], 'Elevation':None, 'Latitude':latitude, 'Longitude': longitude } 185 | 186 | #Maps API Geocoding has a daily limit - this lets us limit API calls during development. 187 | if geocode_counter <= geocode_limit: 188 | 189 | #Reverse Geocode the latitude, longitude to get street address, city, region etc 190 | address_list = reverse_geocode(gmaps, latitude, longitude) 191 | 192 | #Save the formatted address for insert into BigQuery 193 | if(len(address_list) > 0): 194 | row["Address"] = extract_address(address_list, "formatted_address") 195 | #extract the zip or postal code if one is returned 196 | row["Zipcode"] = extract_component(address_list, "postal_code") 197 | 198 | #increment counter - in case you want to limit daily geocodes. 199 | geocode_counter += 1 200 | 201 | # get elevation 202 | row["Elevation"] = get_elevation(gmaps, latitude, longitude) 203 | 204 | # get the timezone, pass in original timestamp in case DST applied at that time 205 | timezone = get_timezone(gmaps, latitude, longitude, posix_time) 206 | 207 | #Store DST offset so can display/query UTC time as local time 208 | if(timezone["rawOffset"] is not None): 209 | row["Offset"] = get_local_time(timezone) 210 | 211 | row["UTCTime"] = ts 212 | 213 | # save a row to BigQuery 214 | result = stream_row_to_bigquery(bq, row) 215 | 216 | #Addresses can contain non-ascii characters, for simplicity we'll replace non ascii characters 217 | #This is just for command line output 218 | addr = row['Address'].encode('ascii', 'replace') 219 | msg = "Appended one row to BigQuery." 220 | print msg 221 | msg = "Address: {0}".format(addr) 222 | print msg 223 | msg = "Elevation: {0} metres".format(row["Elevation"]) 224 | print msg 225 | msg = "Timezone: {0}".format(timezone["timeZoneId"]) 226 | print msg 227 | print " " 228 | else: 229 | time.sleep(wait_timeout) 230 | geocode_counter = 0 231 | print "counter reset" 232 | 233 | # Get the message's ack ID 234 | ack_ids.append(received_message.get('ackId')) 235 | 236 | # Create a POST body for the acknowledge request 237 | ack_body = {'ackIds': ack_ids} 238 | 239 | # Acknowledge the message. 240 | client.projects().subscriptions().acknowledge( 241 | subscription=subscription, body=ack_body).execute() 242 | 243 | 244 | 245 | if __name__ == '__main__': 246 | main(sys.argv) 247 | -------------------------------------------------------------------------------- /Docker/pull_pubsub_docker/requirements.txt: -------------------------------------------------------------------------------- 1 | gcloud>=0.7.1 2 | google-api-python-client>=1.3.2 3 | google-apitools>=0.4.10 4 | pyYAML>=3.11 5 | oauth2client>=1.4.12 6 | python-dateutil==2.4.2 7 | httplib2==0.9.1 8 | googlemaps>=2.3.0 -------------------------------------------------------------------------------- /Docker/push_pubsub_docker/Dockerfile: -------------------------------------------------------------------------------- 1 | # Copyright 2016 Google Inc. All rights reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | #you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # 14 | # geo_pubsub_push 15 | # 16 | # VERSION 0.0.1 17 | 18 | FROM python:2.7 19 | RUN mkdir -p /usr/src/app 20 | WORKDIR /usr/src/app 21 | COPY requirements.txt /usr/src/app/ 22 | RUN pip install --no-cache-dir -r requirements.txt 23 | COPY . /usr/src/app 24 | CMD ["python", "./config_geo_pubsub_push.py"] -------------------------------------------------------------------------------- /Docker/push_pubsub_docker/Your_key.json: -------------------------------------------------------------------------------- 1 | { 2 | REPLACE FILE WITH YOUR ACTUAL CREDENTIAL FILE 3 | } -------------------------------------------------------------------------------- /Docker/push_pubsub_docker/config_geo_pubsub_push.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Copyright 2016 Google Inc. All Rights Reserved. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | """ 17 | This script reads traffic sensor data from a set of csv files, adding vehicle id, geo encodes the files and publishes that data 18 | to PubSub. If you run it on a GCE instance, this instance must be 19 | created with the "Cloud Platform" Project Access enabled. Click on 20 | "Show advanced options" when creating the image to find this setting. 21 | 22 | Before you run the script, create one PubSub topic, in the same project as the 23 | GCE instance you will run on, to publish to. Edit the TRAFFIC_TOPIC or you can 24 | pass in the names as a command-line argument. 25 | 26 | Before you run this script, download some demo data files (~2GB): 27 | curl -O \ 28 | http://storage.googleapis.com/aju-sd-traffic/unzipped/Freeways-5Minaa2010-01-01_to_2010-02-15.csv 29 | Or, for a smaller test file, you can use: 30 | http://storage.googleapis.com/aju-sd-traffic/unzipped/Freeways-5Minaa2010-01-01_to_2010-02-15_test2.csv 31 | These files contain real traffic sensor data from San Diego freeways. 32 | See this file for copyright info: 33 | http://storage.googleapis.com/aju-sd-traffic/freeway_detector_config/Freeways-Metadata-2010_01_01/copyright(san%20diego).txt 34 | 35 | Usage: 36 | 37 | Run the script passing in the location of the folder that contains the csv files 38 | % python geo_pubsub.py --fileloc 'your_folder_location' 39 | Run 'python traffic_pubsub_generator.py -h' for more information. 40 | """ 41 | import argparse 42 | import base64 43 | import csv 44 | import datetime 45 | import random 46 | import sys 47 | import time 48 | import os 49 | import datetime 50 | import yaml 51 | import googlemaps 52 | 53 | from apiclient import discovery 54 | from dateutil.parser import parse 55 | import httplib2 56 | from oauth2client import client as oauth2client 57 | 58 | with open("/tmp/creds/setup.yaml", 'r') as varfile: 59 | cfg = yaml.load(varfile) 60 | 61 | # default; set to your traffic topic. Can override on command line. 62 | TRAFFIC_TOPIC = cfg["env"]["PUBSUB_TOPIC"] 63 | PUBSUB_SCOPES = ['https://www.googleapis.com/auth/pubsub'] 64 | NUM_RETRIES = 3 65 | ROOTDIR = cfg["env"]["ROOTDIR"] 66 | 67 | 68 | def create_pubsub_client(http=None): 69 | credentials = oauth2client.GoogleCredentials.get_application_default() 70 | if credentials.create_scoped_required(): 71 | credentials = credentials.create_scoped(PUBSUB_SCOPES) 72 | if not http: 73 | http = httplib2.Http() 74 | credentials.authorize(http) 75 | return discovery.build('pubsub', 'v1', http=http) 76 | 77 | 78 | def publish(client, pubsub_topic, data_line, msg_attributes=None): 79 | """Publish to the given pubsub topic.""" 80 | data = base64.b64encode(data_line) 81 | msg_payload = {'data': data} 82 | if msg_attributes: 83 | msg_payload['attributes'] = msg_attributes 84 | body = {'messages': [msg_payload]} 85 | resp = client.projects().topics().publish( 86 | topic=pubsub_topic, body=body).execute(num_retries=NUM_RETRIES) 87 | return resp 88 | 89 | def create_timestamp(hms,dmy): 90 | """Format two time/date columns as a datetime object""" 91 | h = int(hms[0:2]) 92 | m = int(hms[2:4]) 93 | s = int(hms[4:6]) 94 | #print "{0} {1} {2}".format(h,m,s) 95 | d= int(dmy[0:2]) 96 | m = int(dmy[2:4]) 97 | y = int(dmy[4:6]) + 2000 98 | #print "{0} {1} {2}".format(d,m,y) 99 | return (str(datetime.datetime(y,m,d,h,m,s))) 100 | 101 | 102 | def main(argv): 103 | parser = argparse.ArgumentParser() 104 | 105 | parser.add_argument("--fileloc", default=ROOTDIR, help="input folder with csv files") 106 | parser.add_argument("--topic", default=TRAFFIC_TOPIC, 107 | help="The pubsub 'traffic' topic to publish to. " + 108 | "Should already exist.") 109 | 110 | args = parser.parse_args() 111 | 112 | pubsub_topic = args.topic 113 | print "Publishing to pubsub 'traffic' topic: %s" % pubsub_topic 114 | 115 | rootdir = args.fileloc 116 | print "Folder to process: %s" % rootdir 117 | 118 | 119 | client = create_pubsub_client() 120 | 121 | for subdir, dirs, files in os.walk(rootdir): 122 | for file in files: 123 | #San Diego data file names include trip ID, use this to identify each journey 124 | name_ext = file.split(".") 125 | vehicleID = name_ext[0][15:] 126 | 127 | myfile = os.path.join(subdir,file) 128 | print myfile 129 | line_count = 0 130 | with open(myfile) as data_file: 131 | reader = csv.reader(data_file) 132 | for line in reader: 133 | line_count += 1 134 | # print "%s lines processed" % line_count 135 | if line_count > 1: 136 | #Convert NMEA GPS format to decimal degrees 137 | #see http://www.gpsinformation.org/dale/nmea.htm#position for NMEA GPS format details 138 | lat = float(line[3][0:2]) 139 | lng = float(line[5][0:3]) 140 | lng_minutes = float(line[5][3:])/60 141 | lat_minutes = float(line[3][2:])/60 142 | latitude = lat + lat_minutes 143 | longitude = 0 - (lng + lng_minutes) 144 | ts = create_timestamp(line[1],line[9]) 145 | msg_attributes = {'timestamp': ts} 146 | print "Vehicle ID: {0}, location: {1}, {2}; speed: {3} mph, bearing: {4} degrees".format(vehicleID, latitude,longitude, line[7], line[8]) 147 | proc_line = "{0}, {1}, {2}, {3} ,{4} ".format(vehicleID, latitude,longitude, line[7], line[8]) 148 | publish(client, pubsub_topic, proc_line, msg_attributes) 149 | 150 | if __name__ == '__main__': 151 | main(sys.argv) 152 | -------------------------------------------------------------------------------- /Docker/push_pubsub_docker/requirements.txt: -------------------------------------------------------------------------------- 1 | gcloud>=0.7.1 2 | google-api-python-client>=1.3.2 3 | google-apitools>=0.4.10 4 | pyYAML>=3.11 5 | oauth2client>=1.4.12 6 | python-dateutil==2.4.2 7 | httplib2==0.9.1 8 | googlemaps>=2.3.0 -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | This tutorial shows how to use Google Cloud Platform to build an app that 7 | receives telemetric data about geolocation, processes it, and then stores the 8 | processed and transformed data for further analysis. 9 | 10 | The instructions in this readme show you how to run the tutorial by using 11 | Google Cloud Shell with Docker. You can find a version of this tutorial that 12 | uses your own development environment, without Docker, [on the Google Cloud 13 | Platform website](https://cloud.google.com/solutions/reverse-geocoding-geolocation-telemetry-cloud-maps-api). 14 | 15 | Cloud Shell provides a ready runtime environment and can save you several steps 16 | and some time. However, Cloud Shell times out after 60 minutes of inactivity 17 | and can cost you some repeated work, if that happens. For example, anything 18 | copied to the /tmp directory will be lost. 19 | 20 | Docker provides some automation in deployment that can also make the tutorial 21 | easier to run and save you time. However, if you're not familiar with Docker, 22 | or simply want to see every step in action, you might prefer to run through the 23 | full, manual tutorial steps yourself. 24 | 25 | The tutorial: 26 | 27 | * Starts with traffic data stored in CSV files. 28 | * Processes messages in a Google Cloud Pub/Sub queue. 29 | * Reverse geocodes latitude and longitude to convert the coordinates to a street 30 | address. 31 | * Calculates the elevation above sea level. 32 | * Converts from Coordinated Universal Time (UTC) to local time by querying which 33 | timezone each location is in. 34 | * Writes the data, with the added geographic contextual information, to a 35 | BigQuery dataset for your analysis. 36 | * Visualizes the data as heat maps superimposed over a map of the San Diego metro 37 | area. 38 | 39 | # Costs 40 | 41 | This tutorial uses billable components of Google Cloud Platform, including: 42 | 43 | * 1 Compute Engine virtual machine (g1-small) 44 | * Google Cloud Storage Standard (5 GB) 45 | * Google BigQuery (5 GB storage, 5 GB streaming inserts) 46 | * Google Cloud Pub/Sub (< 200k operations) 47 | * Google Maps API 48 | 49 | The cost of running this tutorial will vary depending on run time. Use the [pricing calculator estimate](https://cloud.google.com/products/calculator/#id=11387bdd-be66-4083-b814-01176faa20a0) to see a cost estimate based on your projected usage. New Cloud Platform users 50 | may be eligible for a [free trial](https://cloud.google.com/free-trial). 51 | 52 | The Maps API standard plan offers a free quota and pay-as-you-go billing after 53 | the quota has been exceeded. If you have an existing license for the Maps API 54 | or have a Maps APIs Premium Plan, [see the documentation first](https://developers.google.com/maps/documentation/javascript/get-api-key#premium-auth) for some important notes. You can purchase a Maps APIs Premium Plan for higher 55 | quotas. 56 | 57 | You must have a Maps for Work license for any application that restricts 58 | access, such as behind a firewall or on a corporate intranet. For more details 59 | about Google Maps API pricing and plans, see [the online documentation](https://developers.google.com/maps/pricing-and-plans/). 60 | 61 | # Before you begin 62 | 63 | 1. [Select or create a Cloud Platform Console project](https://console.cloud.google.com/project). 64 | 2. [Enable billing for your project](https://console.cloud.google.com/billing). 65 | 3. Click the following link to enable the required Cloud Platform APIs. If 66 | prompted, be sure to select the project you created in step 1. 67 | 68 | [Enable APIs](https://console.developers.google.com/start/api?target=%22console%22&id=bigquery,pubsub,storage_component,storage_api,geocoding_backend,elevation_backend,timezone_backend,maps_backend) 69 | 70 | 71 | 72 | These APIs include: 73 | 74 | * BigQuery API 75 | * Pubsub API 76 | * Google Cloud Storage 77 | * Google Maps Geocoding API 78 | * Google Maps Elevation API 79 | * Google Maps Time Zone API 80 | * Google Maps Javascript API 81 | 82 | # Creating credentials 83 | 84 | For this tutorial, you'll need the following credentials: 85 | 86 | * A Google Maps API server key. 87 | * A Maps API browser key. 88 | * A credentials file for the service account key. 89 | * An OAuth 2.0 client ID. 90 | 91 | ## Google Maps API credentials 92 | 93 | If you don't already have them, you'll need Google Maps API keys. 94 | 95 | ### Get a server key 96 | 97 | 1. Click the following link to open the Cloud Console in the Credentials page. If you have more than one project, you might be prompted to select a 98 | project. 99 | 100 | [Create credentials](https://console.developers.google.com/apis/credentials?target=%22console%22) 101 | 102 | 2. Click Create credentials > API key > Server key. 103 | 3. Name the key "Maps tutorial server key". 104 | 4. Click Create. 105 | 5. Click Ok to dismiss the dialog box that shows you the new key. You can retrieve your 106 | keys from the Cloud Console anytime. 107 | 6. Stay on the page. 108 | 109 | ### Get a browser key 110 | 111 | The browser key is a requirement for using the Maps Javascript API. Follow 112 | these steps: 113 | 114 | 1. Click Create credentials and then select API key. 115 | 2. Click Browser key. 116 | 3. Name the key "Maps tutorial browser key". 117 | 4. Click Create. 118 | 5. Click Ok to dismiss the dialog box that shows you the new key. 119 | 6. Stay on the page. 120 | 121 | Important: Keep your API keys secure. Publicly exposing your credentials can result in 122 | your account being compromised, which could lead to unexpected charges on your 123 | account. To keep your API keys secure, [follow these best practices](https://support.google.com/cloud/answer/6310037). 124 | 125 | ## Service account credentials 126 | 127 | Create service account credentials and download the JSON file. Follow these 128 | steps: 129 | 130 | 1. Click Create credentials and then select Service account key. 131 | 2. Select New service account. 132 | 3. Name the account "Maps tutorial service account". 133 | 4. The key type is JSON. 134 | 5. Click Create. 135 | 6. The Cloud Console automatically downloads to your computer the JSON file that 136 | contains the service account key. Note the location of this file. 137 | 7. Click Close to dismiss the dialog box that shows you the new key. If you need to, you can 138 | retrieve the key file later. 139 | 140 | ### Upload the JSON file 141 | 142 | You must upload the service account credential file to a Google Cloud Storage 143 | bucket so that you can transfer it to Cloud Shell in an upcoming step. 144 | 145 | 1. In the Cloud Platform Console, [go to the Cloud Storage browser.](https://console.cloud.google.com/storage/browser) 146 | 2. Click Create bucket. 147 | 3. In the Create bucket dialog, specify the following attributes: 148 | 1. A unique bucket name, subject to the [bucket name requirements](https://cloud-dot-devsite.googleplex.com/storage/docs/bucket-naming#requirements). 149 | 2. A [storage class](https://cloud-dot-devsite.googleplex.com/storage/docs/storage-classes). 150 | 3. A location where bucket data will be stored. 151 | 4. Click Create. 152 | 5. In the Cloud Console, click the name of your new bucket. 153 | 6. Click Upload files. 154 | 7. Browse to the JSON file and confirm the upload. 155 | 156 | ## OAuth 2.0 client ID 157 | 158 | Create a client ID that you can use to authenticate end-user requests to 159 | BigQuery. Follow these steps: 160 | 161 | 1. Find the IPv4 address of your computer. For example, in your browser, view a 162 | page such as [http://ip-lookup.net](http://ip-lookup.net). If your computer is on a corporate intranet, you need to get the address from 163 | your operating system. For example, run ifconfing on Linux or ipconfig -all on Windows. 164 | 1. In the Cloud Console, click Create credentials and then select OAuth client ID. 165 | 2. Select Web application. 166 | 3. In the Name field, enter "Maps API client ID". 167 | 4. In the Restrictions section, in Authorized JavaScript origins, add the following two origin URLs. Replace [YOUR\_IP\_ADDRESS] with the IPv4 168 | address of your computer. 169 | 170 | 171 | ``` 172 | http://[YOUR_IP_ADDRESS]:8000 173 | https://[YOUR_IP_ADDRESS]:8000 174 | ``` 175 | Adding these URLs enables an end user to access BigQuery data through 176 | JavaScript running in a browser. You need this authorization for an upcoming 177 | section of the tutorial, when you display a visualization of data on a map in 178 | your web browser. 179 | 180 | 5. Click Save to generate the new client ID. 181 | 182 | # Setting up Cloud Pub/Sub 183 | 184 | Cloud Pub/Sub is the messaging queue that handles moving the data from CSV 185 | files to BigQuery. You'll need to create a topic, which publishes the messages, and a subscription, which receives the published messages. 186 | 187 | ## Create a Cloud Pub/Sub topic 188 | 189 | The topic publishes the messages. Follow these steps to create the topic: 190 | 191 | 1. Browse to the Pub/Sub topic list page in the Cloud Console: 192 | 193 | [Open the Pub/Sub page](https://console.developers.google.com/cloudpubsub/topicList) 194 | 195 | 2. Click Create topic. A dialog box opens. 196 | 3. In the Name field, add "traffic" to the end of the path that is provided for you. The path 197 | is determined by the system. You can provide only a name for the topic. 198 | 4. Click Create. The dialog box closes. 199 | 5. Stay on the page. 200 | 201 | ## Creating a Cloud Pub/Sub subscription 202 | 203 | The subscription receives the published messages. Follow these steps to create 204 | the subscription: 205 | 206 | 1. In the topic list, in the row that contains the traffic topic, click the downward arrow on the right-hand end of the row. 207 | 2. Click New subscription to open the Create a new subscription page. 208 | 3. In the Subscription name field, add "mysubscription" to the end of the path that is provided for you. 209 | 4. Set the Delivery Type to Pull, if it isn't already set by default. 210 | 5. Click Create. 211 | 212 | # Preparing to run the code 213 | 214 | Follow these steps to prepare to run the code. 215 | 216 | 1. Open Cloud Shell. In the Cloud Platform console, in the upper-right corner, 217 | click the Activate Google Cloud Shell icon. 218 | 2. In Cloud Shell, clone this repository. 219 | 3. Change directory to resources: 220 | 221 | cd geo\_bq/resources 222 | 223 | 1. Edit setup.yaml. Use your favorite command-line text editor. 224 | 225 | 1. For PROJECT\_ID, replace your-project-id with your project's ID string. Keep the single quotation marks in this and all 226 | other values that you replace. 227 | 2. For DATASET\_ID, don't change sandiego\_freeways. 228 | 3. For TABLE\_ID, don't change geocoded\_journeys. 229 | 4. For PUBSUB\_TOPIC, replace your-project-id with your project's ID string. 230 | 5. For ROOTDIR, replace the provided path with /tmp/creds/data. 231 | 6. For SUBSCRIPTION, replace your-project-id with your project's ID string. 232 | 7. For MAPS\_API\_KEY, replace Your-server-key with the server key you created. You can see your credentials by clicking the 233 | following link: 234 | 235 | [View credentials](https://console.developers.google.com/apis/credentials?target=%22console%22) 236 | 237 | 8. Save and close the file. 238 | 239 | 1. Run the following command: 240 | 241 | 242 | ``` 243 | bash setup.sh 244 | ``` 245 | The setup.sh script performs the following steps for you: 246 | 247 | * Creates a BigQuery dataset and a table schema to receive the traffic data. 248 | * Creates a directory structure, /tmp/creds/data, that you use to store your service account credentials (the JSON file you 249 | uploaded to your bucket) and the traffic data. 250 | * Copies the data files from your GitHub clone to the data directory. 251 | 252 | 1. Change directory to /tmp/creds: 253 | 254 | cd /tmp/creds 255 | 256 | 1. Copy your credentials file. Run the following command. Replace [YOUR\_BUCKET] 257 | with the name of your Cloud Storage bucket and [YOUR\_CREDENTIALS\_FILE] with 258 | the name of the file: 259 | 260 | gsutil cp gs://[YOUR\_BUCKET]/[YOUR\_CREDENTIALS\_FILE].json . 261 | 262 | # Pushing data to Cloud Pub/Sub 263 | 264 | Next, run the code to push the traffic data to Cloud Pub/Sub. Run the following 265 | command. Replace [YOUR\_CREDENTIALS\_FILE] with the name of the file. 266 | 267 | docker run -e 268 | "GOOGLE\_APPLICATION\_CREDENTIALS=/tmp/creds/[YOUR\_CREDENTIALS\_FILE].json" 269 | --name 270 | map-push -v /tmp/creds:/tmp/creds 271 | gcr.io/cloud-solutions-images/map-pushapp 272 | 273 | After Docker finishes initializing, you should see repeated lines of output 274 | like this one: 275 | 276 | 277 | ``` 278 | Vehicle ID: 1005, location: 33.2354833333, -117.387343333; speed: 44.698 mph, 279 | bearing: 223.810 degrees 280 | ``` 281 | It can take some time to push all the data to Pub/Sub. 282 | 283 | # Loading the data into BigQuery 284 | 285 | BigQuery pulls the data by using the Cloud Pub/Sub subscription. To get it 286 | going, run the following command. Replace [YOUR\_CREDENTIALS\_FILE] with the 287 | name of the file. 288 | 289 | docker run -e 290 | "GOOGLE\_APPLICATION\_CREDENTIALS=/tmp/creds/[YOUR\_CREDENTIALS\_FILE].json" 291 | --name 292 | map-app -v /tmp/creds:/tmp/creds 293 | gcr.io/cloud-solutions-images/map-pullapp 294 | 295 | After Docker finishes initializing, you should see repeated lines of output 296 | like this one: 297 | 298 | 299 | ``` 300 | Appended one row to BigQuery. Address: 11th St, Oceanside, CA 92058, USA 301 | ``` 302 | It can take some to pull all the data from the topic. When it’s done, the 303 | terminal window will stop showing lines of output as it waits for further data. 304 | You can exit the process at any time by pressing Control+C. If Cloud Shell 305 | times out, you can simply click the reconnect link. 306 | 307 | # Analyzing the data 308 | 309 | Now that the you have transcoded and loaded the data into BigQuery, you can use 310 | BigQuery to gain insights. This section of the tutorial shows you how to use 311 | the BigQuery console run a few simple queries against this data. 312 | 313 | 1. Open the [BigQuery Console](https://bigquery.cloud.google.com/queries/). 314 | 2. Select the sandiego\_freeways database. 315 | 1. Click the Compose Query button. 316 | 2. In the New Query text box, enter the following query that produces average speed by zip code: 317 | 318 | 319 | ``` 320 | SELECT AVG(Speed) avg_speed, Zipcode FROM [sandiego_freeways.geocoded_journeys] 321 | WHERE Zipcode <> '' 322 | GROUP BY Zipcode ORDER BY avg_speed DESC 323 | ``` 324 | # Visualizing the data 325 | 326 | You can use Google Maps to visualize the data you stored in BigQuery. This 327 | tutorial shows you how to superimpose a heat map visualization onto a map of 328 | the region. The heat map shows the volume of traffic activity captured in the 329 | data in BigQuery. 330 | 331 | To keep the tutorial straightforward, the provided example uses OAuth 2.0 to 332 | authenticate the user for the BigQuery service. You could choose another 333 | approach that might be better-suited for your scenario. For example, you could 334 | export query results from BigQuery and create a static map layer that doesn’t 335 | require the end user to authenticate against BigQuery, or you could set up 336 | authentication by using a service account and a proxy server. 337 | 338 | To show the data visualization, follow these steps. 339 | 340 | ## Modify bqapi.html 341 | 342 | For these modifications, you need to use keys and credentials you created 343 | earlier. You can see these values in the Cloud Console on the [Credentials](https://console.developers.google.com/apis/credentials) page. 344 | 345 | 1. Make a copy of the file named bqapi.html. You can find the file in the following directory where you installed the 346 | source code: 347 | 348 | 349 | 350 | 351 | ``` 352 | geo_bq/web/ 353 | ``` 354 | 2. Open the file in a text editor. 355 | 3. In the following script element, in the src attribute, replace Your-Maps-API-Key with your Google Maps API browser key: 356 | 357 | 358 | ``` 359 | <script src="https://maps.googleapis.com/maps/api/js?libraries=visualization,drawing&key=Your-Maps-API-Key" 360 | ``` 361 | 1. For the clientId variable, replace Your-Client-ID with the[ OAuth 2.0 client ID](https://docs.google.com/document/d/1AwDrzSgIgzEFj1Se5q3CsPKups8UTgKzPv4jNc3z0ic/edit#heading=h.cbxggavwji9j) you created earlier. 362 | 2. For the projectId variable, replace the value string, Your-Project-ID, with the your project ID. 363 | 3. Save the file. 364 | 365 | ## Viewing the web page 366 | 367 | You can use Cloud Shell to view the web page. Follow these steps: 368 | 369 | 1. From the geo\_bq/web directory, run the following command to start the server: 370 | 371 | python -m SimpleHTTPServer 8080 372 | 373 | When the server is running, Cloud Shell prints the following message: 374 | 375 | Serving HTTP on 0.0.0.0 port 8080 ... 376 | 377 | 1. In the top-left corner of Cloud Shell, click Web preview and then click Preview on port 8080. Cloud Shell opens a new browser tab that connects to the web server. 378 | 2. In the new browser tab, note the origin URL. The origin URL has a format 379 | similar to the following example, where [RANDOM\_NUMBER] could be any value: 380 | 381 | https://8080-dot-[RANDOM\_NUMBER]-dot-devshell.appspot.com 382 | 383 | 1. In the Cloud Console, return to the [Credentials](https://console.developers.google.com/apis/credentials) page; 384 | 385 | 1. Click the name of your OAuth 2.0 client ID. 386 | 2. In the Restrictions section, add the origin URL you noted in the previous step. Do not add a port 387 | number. 388 | 389 | The origin URL that you provide in this step tells OAuth 2.0 that it's safe to 390 | accept requests from the Cloud Shell browser. Without this step, the web page 391 | can't use script to access the data you loaded into BigQuery. 392 | 393 | 3. Click Save. 394 | 4. In the browser tab that Cloud Shell opened, click the link for bqapi.html. If your browser has a pop-up blocker, turn it off for this site. 395 | 5. In the pop-up window, follow the OAuth 2.0 authentication prompts. You won't 396 | have to repeat this flow in this session if, for example, you reload the web 397 | page. 398 | 6. After the map has loaded, select the rectangle tool in the upper-left corner of 399 | the map. 400 | 7. Use the tool to draw a rectangle around the entire currently visible land mass 401 | on the map. 402 | 403 | The page shows a heat map. Exactly where the heat map regions display on the 404 | map depends on the data you loaded into BigQuery. 405 | 406 | For details about how the code works, see the tutorial on the Google Cloud 407 | Platform site. 408 | 409 | -------------------------------------------------------------------------------- /config_geo_pubsub_pull.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Copyright 2015 Google Inc. All Rights Reserved. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | """ 16 | This script reverse geocodes mesages pulled from a Google Cloud Pub/Sub queue (converts latitude & longitude to a street address), 17 | calculates the elevation above sea level, 18 | and converts from UTC time to local time by querying which timezone the locations fall in. 19 | It then writes the data plus this added geographic context to the BigQuery table. 20 | """ 21 | import sys 22 | import base64 23 | from apiclient import discovery 24 | from dateutil.parser import parse 25 | import httplib2 26 | import yaml 27 | import googlemaps 28 | import time 29 | import datetime 30 | import uuid 31 | import json 32 | import signal 33 | import sys 34 | # from oauth2client.client import GoogleCredentials 35 | from oauth2client import client as oauth2client 36 | 37 | with open("resources/setup.yaml", 'r') as varfile: 38 | cfg = yaml.load(varfile) 39 | 40 | # Uses an environment variable by default. Change this value to the name of your traffic topic. 41 | # Can override on the command line. 42 | TRAFFIC_TOPIC = cfg["env"]["PUBSUB_TOPIC"] 43 | PUBSUB_SCOPES = ['https://www.googleapis.com/auth/pubsub'] 44 | running_proc = True 45 | 46 | def signal_term_handler(signal, frame): 47 | global running_proc 48 | print "Exiting application" 49 | running_proc = False 50 | sys.exit(0) 51 | 52 | 53 | 54 | def create_pubsub_client(http=None): 55 | credentials = oauth2client.GoogleCredentials.get_application_default() 56 | if credentials.create_scoped_required(): 57 | credentials = credentials.create_scoped(PUBSUB_SCOPES) 58 | if not http: 59 | http = httplib2.Http() 60 | credentials.authorize(http) 61 | return discovery.build('pubsub', 'v1', http=http) 62 | 63 | def create_bigquery_client(): 64 | credentials = oauth2client.GoogleCredentials.get_application_default() 65 | # Construct the service object for interacting with the BigQuery API. 66 | return discovery.build('bigquery', 'v2', credentials=credentials) 67 | 68 | def stream_row_to_bigquery(bigquery, row, 69 | num_retries=5): 70 | # Generate a unique row ID so retries 71 | # don't accidentally insert duplicates. 72 | insert_all_data = { 73 | 'insertId': str(uuid.uuid4()), 74 | 'rows': [{'json': row}] 75 | } 76 | return bigquery.tabledata().insertAll( 77 | projectId=cfg["env"]["PROJECT_ID"], 78 | datasetId=cfg["env"]["DATASET_ID"], 79 | tableId=cfg["env"]["TABLE_ID"], 80 | body=insert_all_data).execute(num_retries=num_retries) 81 | 82 | # Use Maps API Geocoding service to convert lat,lng into a human readable address. 83 | def reverse_geocode(gmaps, latitude, longitude): 84 | return gmaps.reverse_geocode((latitude, longitude)) 85 | 86 | # Extract a named property, e.g. formatted_address, from the Geocoding API response. 87 | def extract_address(list, property): 88 | address = "" 89 | if(list[0] is not None): 90 | address = list[0][property] 91 | return address 92 | 93 | # Extract a structured address component, e.g. postal_code, from a Geocoding API response. 94 | def extract_component(list, property): 95 | val = "" 96 | for address in list: 97 | for component in address["address_components"]: 98 | if component["types"][0] == property: 99 | val = component["long_name"] 100 | break 101 | return val 102 | 103 | # Calculate elevation using Google Maps Elevation API. 104 | def get_elevation(gmaps, latitude, longitude): 105 | elevation = gmaps.elevation((latitude, longitude)) 106 | elevation_metres = None 107 | if(len(elevation)>0): 108 | elevation_metres = elevation[0]["elevation"] 109 | return elevation_metres 110 | 111 | # Get the timezone including any DST offset for the time the GPS position was recorded. 112 | def get_timezone(gmaps, latitude, longitude, posix_time): 113 | return gmaps.timezone((latitude, longitude), timestamp=posix_time) 114 | 115 | def get_local_time(timezone_response): 116 | # get offset from UTC 117 | rawOffset = float(timezone_response["rawOffset"]) 118 | # get any daylight savings offset 119 | dstOffset = float(timezone_response["dstOffset"]) 120 | 121 | # combine for total offset from UTC 122 | return rawOffset + dstOffset 123 | 124 | # [START maininit] 125 | def main(argv): 126 | 127 | client = create_pubsub_client() 128 | 129 | # You can fetch multiple messages with a single API call. 130 | batch_size = 100 131 | 132 | # Options to limit number of geocodes e.g to stay under daily quota. 133 | geocode_counter = 0 134 | geocode_limit = 10 135 | 136 | # Option to wait for some time until daily quotas are reset. 137 | wait_timeout = 2 138 | # [END maininit] 139 | # [START createmaps] 140 | # Create a Google Maps API client. 141 | gmaps = googlemaps.Client(key=cfg["env"]["MAPS_API_KEY"]) 142 | subscription = cfg["env"]["SUBSCRIPTION"] 143 | 144 | # Create a POST body for the Cloud Pub/Sub request. 145 | body = { 146 | # Setting ReturnImmediately to False instructs the API to wait 147 | # to collect the message up to the size of MaxEvents, or until 148 | # the timeout. 149 | 'returnImmediately': False, 150 | 'maxMessages': batch_size, 151 | } 152 | # [END createmaps] 153 | signal.signal(signal.SIGINT, signal_term_handler) 154 | #[START pullmsgs] 155 | while running_proc: 156 | # Pull messages from Cloud Pub/Sub 157 | resp = client.projects().subscriptions().pull( 158 | subscription=subscription, body=body).execute() 159 | 160 | received_messages = resp.get('receivedMessages') 161 | # [END pullmsgs] 162 | 163 | 164 | if received_messages is not None: 165 | ack_ids = [] 166 | bq = create_bigquery_client() 167 | for received_message in received_messages: 168 | pubsub_message = received_message.get('message') 169 | if pubsub_message: 170 | # process messages 171 | msg = base64.b64decode(str(pubsub_message.get('data'))) 172 | 173 | # We stored time as a message attribute. 174 | ts = pubsub_message["attributes"]["timestamp"] 175 | 176 | # Create a datetime object so we can get a POSIX timestamp for TimeZone API. 177 | utc_time = datetime.datetime.strptime(ts, "%Y-%m-%d %H:%M:%S") 178 | posix_time = time.mktime(utc_time.timetuple()) 179 | 180 | # Our messages are in a comma-separated string. 181 | #Split into a list 182 | data_list = msg.split(",") 183 | #[START extract] 184 | # Extract latitude,longitude for input into Google Maps API calls. 185 | latitude = float(data_list[1]) 186 | longitude = float(data_list[2]) 187 | 188 | # Construct a row object that matches the BigQuery table schema. 189 | row = { 'VehicleID': data_list[0], 'UTCTime': None, 'Offset': 0, 'Address':"", 'Zipcode':"", 'Speed':data_list[3], 'Bearing':data_list[4], 'Elevation':None, 'Latitude':latitude, 'Longitude': longitude } 190 | 191 | # Maps API Geocoding has a daily limit - this lets us limit API calls during development. 192 | if geocode_counter <= geocode_limit: 193 | 194 | # Reverse geocode the latitude, longitude to get street address, city, region, etc. 195 | address_list = reverse_geocode(gmaps, latitude, longitude) 196 | # [END extract] 197 | #Save the formatted address for insert into BigQuery. 198 | if(len(address_list) > 0): 199 | row["Address"] = extract_address(address_list, "formatted_address") 200 | #extract the zip or postal code if one is returned 201 | row["Zipcode"] = extract_component(address_list, "postal_code") 202 | 203 | # Increment counter - in case you want to limit daily geocodes. 204 | geocode_counter += 1 205 | 206 | # get elevation 207 | row["Elevation"] = get_elevation(gmaps, latitude, longitude) 208 | 209 | # Get the timezone, pass in original timestamp in case DST applied at that time. 210 | timezone = get_timezone(gmaps, latitude, longitude, posix_time) 211 | 212 | # Store DST offset so can display/query UTC time as local time. 213 | if(timezone["rawOffset"] is not None): 214 | row["Offset"] = get_local_time(timezone) 215 | 216 | row["UTCTime"] = ts 217 | # [START saverow] 218 | # save a row to BigQuery 219 | result = stream_row_to_bigquery(bq, row) 220 | # [END saverow] 221 | 222 | # Addresses can contain non-ascii characters, for simplicity we'll replace non ascii characters. 223 | # This is just for command line output. 224 | addr = row['Address'].encode('ascii', 'replace') 225 | msg = "Appended one row to BigQuery." 226 | print msg 227 | msg = "Address: {0}".format(addr) 228 | print msg 229 | msg = "Elevation: {0} metres".format(row["Elevation"]) 230 | print msg 231 | msg = "Timezone: {0}".format(timezone["timeZoneId"]) 232 | print msg 233 | print " " 234 | else: 235 | time.sleep(wait_timeout) 236 | geocode_counter = 0 237 | print "counter reset" 238 | 239 | # Get the message's ack ID. 240 | ack_ids.append(received_message.get('ackId')) 241 | 242 | # Create a POST body for the acknowledge request. 243 | ack_body = {'ackIds': ack_ids} 244 | 245 | # Acknowledge the message. 246 | client.projects().subscriptions().acknowledge( 247 | subscription=subscription, body=ack_body).execute() 248 | 249 | 250 | 251 | if __name__ == '__main__': 252 | main(sys.argv) 253 | -------------------------------------------------------------------------------- /config_geo_pubsub_push.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Copyright 2016 Google Inc. All Rights Reserved. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | """ 17 | This script reads traffic sensor data from a set of CSV files, 18 | adds vehicle IDs, geoencodes the files and publishes that data 19 | to Cloud Pub/Sub. If you run it on a GCE instance, this instance must be 20 | created with the "Cloud Platform" Project Access enabled. Click on 21 | "Show advanced options" when creating the image to find this setting. 22 | 23 | Before you run the script, create one Cloud Pub/Sub topic to publish to 24 | in the same project that the 25 | GCE instance you will run on. Edit TRAFFIC_TOPIC or you can 26 | pass in the topic name as a command-line argument. 27 | 28 | Before you run this script, download some demo data files (~2GB): 29 | curl -O \ 30 | http://storage.googleapis.com/aju-sd-traffic/unzipped/Freeways-5Minaa2010-01-01_to_2010-02-15.csv 31 | Or, for a smaller test file, you can use: 32 | http://storage.googleapis.com/aju-sd-traffic/unzipped/Freeways-5Minaa2010-01-01_to_2010-02-15_test2.csv 33 | These files contain real traffic sensor data from San Diego freeways. 34 | See this file for copyright info: 35 | http://storage.googleapis.com/aju-sd-traffic/freeway_detector_config/Freeways-Metadata-2010_01_01/copyright(san%20diego).txt 36 | 37 | Usage: 38 | 39 | Run the script passing in the location of the folder that contains the CSV files. 40 | % python geo_pubsub.py --fileloc 'your_folder_location' 41 | Run 'python traffic_pubsub_generator.py -h' for more information. 42 | """ 43 | import argparse 44 | import base64 45 | import csv 46 | import datetime 47 | import random 48 | import sys 49 | import time 50 | import os 51 | import datetime 52 | import yaml 53 | import googlemaps 54 | 55 | from apiclient import discovery 56 | from dateutil.parser import parse 57 | import httplib2 58 | from oauth2client import client as oauth2client 59 | 60 | with open("resources/setup.yaml", 'r') as varfile: 61 | cfg = yaml.load(varfile) 62 | 63 | # Defaults to an environment variable. 64 | # Change to your traffic topic name. Can override on command line. 65 | TRAFFIC_TOPIC = cfg["env"]["PUBSUB_TOPIC"] 66 | PUBSUB_SCOPES = ['https://www.googleapis.com/auth/pubsub'] 67 | NUM_RETRIES = 3 68 | ROOTDIR = cfg["env"]["ROOTDIR"] 69 | 70 | # [START createclient] 71 | def create_pubsub_client(http=None): 72 | credentials = oauth2client.GoogleCredentials.get_application_default() 73 | if credentials.create_scoped_required(): 74 | credentials = credentials.create_scoped(PUBSUB_SCOPES) 75 | if not http: 76 | http = httplib2.Http() 77 | credentials.authorize(http) 78 | return discovery.build('pubsub', 'v1', http=http) 79 | # [END createclient] 80 | 81 | # [START publish] 82 | def publish(client, pubsub_topic, data_line, msg_attributes=None): 83 | """Publish to the given pubsub topic.""" 84 | data = base64.b64encode(data_line) 85 | msg_payload = {'data': data} 86 | if msg_attributes: 87 | msg_payload['attributes'] = msg_attributes 88 | body = {'messages': [msg_payload]} 89 | resp = client.projects().topics().publish( 90 | topic=pubsub_topic, body=body).execute(num_retries=NUM_RETRIES) 91 | return resp 92 | # [END publish] 93 | 94 | def create_timestamp(hms,dmy): 95 | """Format two time/date columns as a datetime object""" 96 | h = int(hms[0:2]) 97 | m = int(hms[2:4]) 98 | s = int(hms[4:6]) 99 | 100 | d= int(dmy[0:2]) 101 | m = int(dmy[2:4]) 102 | y = int(dmy[4:6]) + 2000 103 | 104 | return (str(datetime.datetime(y,m,d,h,m,s))) 105 | 106 | 107 | def main(argv): 108 | parser = argparse.ArgumentParser() 109 | 110 | parser.add_argument("--fileloc", default=ROOTDIR, help="input folder with csv files") 111 | parser.add_argument("--topic", default=TRAFFIC_TOPIC, 112 | help="The pubsub 'traffic' topic to publish to. " + 113 | "Should already exist.") 114 | 115 | args = parser.parse_args() 116 | 117 | pubsub_topic = args.topic 118 | print "Publishing to pubsub 'traffic' topic: %s" % pubsub_topic 119 | 120 | rootdir = args.fileloc 121 | print "Folder to process: %s" % rootdir 122 | 123 | 124 | client = create_pubsub_client() 125 | 126 | for subdir, dirs, files in os.walk(rootdir): 127 | for file in files: 128 | # San Diego data file names include trip ID, so use this to identify each journey. 129 | name_ext = file.split(".") 130 | vehicleID = name_ext[0][15:] 131 | 132 | myfile = os.path.join(subdir,file) 133 | print myfile 134 | line_count = 0 135 | # [START processcsv] 136 | with open(myfile) as data_file: 137 | reader = csv.reader(data_file) 138 | for line in reader: 139 | line_count += 1 140 | 141 | if line_count > 1: 142 | # Convert NMEA GPS format to decimal degrees. 143 | # See http://www.gpsinformation.org/dale/nmea.htm#position for NMEA GPS format details. 144 | lat = float(line[3][0:2]) 145 | lng = float(line[5][0:3]) 146 | lng_minutes = float(line[5][3:])/60 147 | lat_minutes = float(line[3][2:])/60 148 | latitude = lat + lat_minutes 149 | longitude = 0 - (lng + lng_minutes) 150 | ts = create_timestamp(line[1],line[9]) 151 | msg_attributes = {'timestamp': ts} 152 | print "Vehicle ID: {0}, location: {1}, {2}; speed: {3} mph, bearing: {4} degrees".format(vehicleID, latitude,longitude, line[7], line[8]) 153 | proc_line = "{0}, {1}, {2}, {3} ,{4} ".format(vehicleID, latitude,longitude, line[7], line[8]) 154 | publish(client, pubsub_topic, proc_line, msg_attributes) 155 | # [END processcsv] 156 | 157 | if __name__ == '__main__': 158 | main(sys.argv) 159 | -------------------------------------------------------------------------------- /images/geo_bq-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/2b5a124682050e5e98661c5396eb6f883177a171/images/geo_bq-arch.png -------------------------------------------------------------------------------- /images/geo_bq-push-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/2b5a124682050e5e98661c5396eb6f883177a171/images/geo_bq-push-4.png -------------------------------------------------------------------------------- /images/geo_bq-schema-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/2b5a124682050e5e98661c5396eb6f883177a171/images/geo_bq-schema-6.png -------------------------------------------------------------------------------- /images/geo_bq-subs-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/2b5a124682050e5e98661c5396eb6f883177a171/images/geo_bq-subs-3.png -------------------------------------------------------------------------------- /images/geo_bq-topic-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/2b5a124682050e5e98661c5396eb6f883177a171/images/geo_bq-topic-2.png -------------------------------------------------------------------------------- /images/geo_bq_pull-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/2b5a124682050e5e98661c5396eb6f883177a171/images/geo_bq_pull-5.png -------------------------------------------------------------------------------- /images/visual-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/2b5a124682050e5e98661c5396eb6f883177a171/images/visual-map.png -------------------------------------------------------------------------------- /resources/Freeways-Metadata-2010_01_01-copyright-san-diego.txt: -------------------------------------------------------------------------------- 1 | This file contains the copyright information for the data "San Diego" data sets. 2 | 3 | Data Set: "Freeway Data - 30 sec." 4 | Original Data Source: California DOT (Caltrans) Performance Measurement System (PeMS) 5 | Copyright owner: Public domain 6 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 7 | 8 | Data Set: "Freeway Data - 5 min." 9 | Original Data Source: California DOT (Caltrans) Performance Measurement System (PeMS) 10 | Copyright owner: Public domain 11 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 12 | 13 | Data Set: "Freeway Data - Daily" 14 | Original Data Source: California DOT (Caltrans) Performance Measurement System (PeMS) 15 | Copyright owner: Public domain 16 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 17 | 18 | Data Set: "Freeway Data - Hourly" 19 | Original Data Source: California DOT (Caltrans) Performance Measurement System (PeMS) 20 | Copyright owner: Public domain 21 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 22 | 23 | Data Set: "Freeway Detector Configuration" 24 | Original Data Source: California DOT (Caltrans) Performance Measurement System (PeMS) 25 | Copyright owner: Public domain 26 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 27 | 28 | Data Set: "Freeway Incident and Lane Closure Detector Locations" 29 | Original Data Source: California DOT (Caltrans) Performance Measurement System (PeMS) 30 | Copyright owner: Public domain 31 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 32 | 33 | Data Set: "Freeway incidents" 34 | Original Data Source: California Highway Patrol (CHP) 35 | Copyright owner: Public domain 36 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 37 | 38 | Data Set: "Freeway Lane Closures" 39 | Original Data Source: California DOT (Caltrans) Lane Closure System 40 | Copyright owner: Public domain 41 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 42 | 43 | Data Set: "GPS Trips Dataset" 44 | Original Data Source: ALK Co-Pilot 45 | Copyright owner: ALK Technologies 46 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 47 | 48 | Data Set: "GPS Trips Gridded Dataset" 49 | Original Data Source: ALK Co-Pilot 50 | Copyright owner: ALK Technologies 51 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 52 | 53 | Data Set: "GPS Trips - One point per link" 54 | Original Data Source: ALK Co-Pilot 55 | Copyright owner: ALK Technologies 56 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 57 | 58 | Data Set: "Grip Map Data" 59 | Original Data Source: ALK Co-Pilot 60 | Copyright owner: ALK Technologies 61 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 62 | 63 | Data Set: "Hourly weather data" 64 | Original Data Source: National Weather Service 65 | Copyright owner: Public domain 66 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) 67 | 68 | Data Set: "Maps of Coverage Area" 69 | Original Data Source: AlK Technologies (Figure 4 only) 70 | Copyright owner: AlK Technologies (Figure 4 only) 71 | License: Creative Commons Attribution-ShareAlike 3.0 Unported license (http://creativecommons.org/licenses/by-sa/3.0/legalcode) -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip1.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,015204.9,A,3255.215798,N,11713.835992,W,23.0,324.1,220310,,,A*48 3 | $GPRMC,015207.9,A,3255.229087,N,11713.844421,W,17.4,331.9,220310,,,A*41 4 | $GPRMC,015231.9,A,3255.233306,N,11713.847421,W,5.6,299.0,220310,,,A*7D 5 | $GPRMC,015234.9,A,3255.238362,N,11713.856787,W,9.0,296.0,220310,,,A*7B 6 | $GPRMC,015237.9,A,3255.233708,N,11713.869397,W,12.4,266.0,220310,,,A*43 7 | $GPRMC,015240.9,A,3255.217416,N,11713.887839,W,21.6,230.3,220310,,,A*44 8 | $GPRMC,015243.9,A,3255.194624,N,11713.913800,W,31.1,223.5,220310,,,A*48 9 | $GPRMC,015246.9,A,3255.172415,N,11713.935976,W,32.9,224.2,220310,,,A*4A 10 | $GPRMC,015249.9,A,3255.152885,N,11713.962017,W,33.9,231.1,220310,,,A*48 11 | $GPRMC,015252.9,A,3255.138177,N,11713.983415,W,27.8,233.3,220310,,,A*47 12 | $GPRMC,015255.9,A,3255.127282,N,11714.002321,W,21.2,235.6,220310,,,A*4F 13 | $GPRMC,015258.9,A,3255.114905,N,11714.022819,W,23.7,234.8,220310,,,A*4C 14 | $GPRMC,015301.9,A,3255.100868,N,11714.044429,W,28.4,231.7,220310,,,A*43 15 | $GPRMC,015304.9,A,3255.085487,N,11714.067032,W,29.6,231.2,220310,,,A*4E 16 | $GPRMC,015312.9,A,3255.053546,N,11714.111338,W,19.3,222.5,220310,,,A*44 17 | $GPRMC,015342.9,A,3255.050615,N,11714.113036,W,7.9,202.0,220310,,,A*7A 18 | $GPRMC,015345.9,A,3255.043115,N,11714.111218,W,8.4,180.4,220310,,,A*7B 19 | $GPRMC,015348.9,A,3255.031574,N,11714.099058,W,12.4,147.1,220310,,,A*42 20 | $GPRMC,015351.9,A,3255.013283,N,11714.072046,W,23.1,134.1,220310,,,A*4C 21 | $GPRMC,015354.9,A,3254.981435,N,11714.016910,W,45.4,128.8,220310,,,A*48 22 | $GPRMC,015357.9,A,3254.951994,N,11713.970549,W,49.8,128.5,220310,,,A*43 23 | $GPRMC,015400.9,A,3254.922718,N,11713.928436,W,51.0,130.4,220310,,,A*45 24 | $GPRMC,015403.9,A,3254.891098,N,11713.887599,W,55.0,135.1,220310,,,A*44 25 | $GPRMC,015406.9,A,3254.852655,N,11713.851145,W,58.9,142.6,220310,,,A*44 26 | $GPRMC,015409.9,A,3254.810846,N,11713.816228,W,61.8,145.9,220310,,,A*49 27 | $GPRMC,015412.9,A,3254.763945,N,11713.785034,W,64.2,150.9,220310,,,A*4B 28 | $GPRMC,015415.9,A,3254.716500,N,11713.756206,W,61.9,152.4,220310,,,A*4F 29 | $GPRMC,015418.9,A,3254.672601,N,11713.729487,W,57.9,152.6,220310,,,A*43 30 | $GPRMC,015421.9,A,3254.629098,N,11713.707455,W,56.3,155.8,220310,,,A*40 31 | $GPRMC,015424.9,A,3254.586038,N,11713.684148,W,55.9,155.1,220310,,,A*4A 32 | $GPRMC,015427.9,A,3254.544476,N,11713.659620,W,56.1,153.8,220310,,,A*44 33 | $GPRMC,015430.9,A,3254.503499,N,11713.634808,W,55.7,153.1,220310,,,A*43 34 | $GPRMC,015433.9,A,3254.461969,N,11713.609088,W,55.7,152.8,220310,,,A*41 35 | $GPRMC,015436.9,A,3254.421119,N,11713.583749,W,55.7,152.4,220310,,,A*48 36 | $GPRMC,015439.9,A,3254.379418,N,11713.558845,W,56.1,153.3,220310,,,A*4F 37 | $GPRMC,015442.9,A,3254.337004,N,11713.534251,W,55.7,153.2,220310,,,A*41 38 | $GPRMC,015445.9,A,3254.295386,N,11713.508401,W,55.7,151.9,220310,,,A*43 39 | $GPRMC,015448.9,A,3254.254970,N,11713.480281,W,56.8,149.3,220310,,,A*40 40 | $GPRMC,015451.9,A,3254.216240,N,11713.448350,W,57.2,143.3,220310,,,A*4E 41 | $GPRMC,015454.9,A,3254.179906,N,11713.410902,W,58.1,138.0,220310,,,A*4B 42 | $GPRMC,015457.9,A,3254.143882,N,11713.371081,W,58.7,136.9,220310,,,A*4F 43 | $GPRMC,015500.9,A,3254.109081,N,11713.330098,W,58.9,137.0,220310,,,A*42 44 | $GPRMC,015503.9,A,3254.073244,N,11713.291240,W,59.3,137.2,220310,,,A*42 45 | $GPRMC,015506.9,A,3254.036595,N,11713.249791,W,59.2,136.7,220310,,,A*44 46 | $GPRMC,015509.9,A,3254.000987,N,11713.208014,W,59.8,136.2,220310,,,A*41 47 | $GPRMC,015512.9,A,3253.962343,N,11713.169254,W,59.8,138.9,220310,,,A*44 48 | $GPRMC,015515.9,A,3253.924811,N,11713.131429,W,60.8,140.4,220310,,,A*44 49 | $GPRMC,015518.9,A,3253.885034,N,11713.093218,W,62.0,141.2,220310,,,A*4C 50 | $GPRMC,015521.9,A,3253.843750,N,11713.055769,W,61.2,142.3,220310,,,A*43 51 | $GPRMC,015524.9,A,3253.804458,N,11713.019607,W,60.2,142.2,220310,,,A*4F 52 | $GPRMC,015527.9,A,3253.767121,N,11712.982392,W,59.5,140.0,220310,,,A*43 53 | $GPRMC,015530.9,A,3253.730258,N,11712.942225,W,59.4,136.5,220310,,,A*4E 54 | $GPRMC,015533.9,A,3253.696528,N,11712.899795,W,59.0,133.1,220310,,,A*4C 55 | $GPRMC,015536.9,A,3253.663079,N,11712.856237,W,58.9,130.2,220310,,,A*44 56 | $GPRMC,015539.9,A,3253.634799,N,11712.809661,W,57.6,125.3,220310,,,A*48 57 | $GPRMC,015542.9,A,3253.609660,N,11712.761619,W,57.1,120.7,220310,,,A*45 58 | $GPRMC,015545.9,A,3253.587130,N,11712.712436,W,57.6,119.0,220310,,,A*44 59 | $GPRMC,015548.9,A,3253.564591,N,11712.660135,W,58.5,116.4,220310,,,A*4E 60 | $GPRMC,015551.9,A,3253.543330,N,11712.607391,W,58.4,114.7,220310,,,A*43 61 | $GPRMC,015554.9,A,3253.523751,N,11712.554418,W,57.9,114.6,220310,,,A*43 62 | $GPRMC,015557.9,A,3253.501873,N,11712.501999,W,57.9,117.7,220310,,,A*49 63 | $GPRMC,015600.9,A,3253.476378,N,11712.454881,W,57.7,122.8,220310,,,A*47 64 | $GPRMC,015603.9,A,3253.447320,N,11712.408365,W,57.6,127.5,220310,,,A*4A 65 | $GPRMC,015606.9,A,3253.415793,N,11712.365566,W,57.1,132.2,220310,,,A*49 66 | $GPRMC,015609.9,A,3253.382766,N,11712.326346,W,56.8,136.2,220310,,,A*4A 67 | $GPRMC,015612.9,A,3253.345774,N,11712.290097,W,56.7,142.0,220310,,,A*45 68 | $GPRMC,015615.9,A,3253.306971,N,11712.258464,W,56.7,146.2,220310,,,A*44 69 | $GPRMC,015618.9,A,3253.266540,N,11712.230118,W,56.7,151.0,220310,,,A*44 70 | $GPRMC,015621.9,A,3253.223096,N,11712.206191,W,57.4,155.8,220310,,,A*4B 71 | $GPRMC,015624.9,A,3253.176498,N,11712.186055,W,58.7,160.5,220310,,,A*42 72 | $GPRMC,015627.9,A,3253.128224,N,11712.171940,W,58.9,164.8,220310,,,A*49 73 | $GPRMC,015630.9,A,3253.079457,N,11712.157227,W,58.9,165.8,220310,,,A*47 74 | $GPRMC,015633.9,A,3253.031170,N,11712.143574,W,59.4,166.5,220310,,,A*4E 75 | $GPRMC,015636.9,A,3252.982232,N,11712.127784,W,59.7,165.5,220310,,,A*41 76 | $GPRMC,015639.9,A,3252.933322,N,11712.114484,W,61.1,167.2,220310,,,A*4F 77 | $GPRMC,015642.9,A,3252.883033,N,11712.099056,W,62.7,166.5,220310,,,A*46 78 | $GPRMC,015645.9,A,3252.833524,N,11712.087646,W,59.9,168.4,220310,,,A*48 79 | $GPRMC,015648.9,A,3252.786044,N,11712.078467,W,55.6,171.0,220310,,,A*49 80 | $GPRMC,015651.9,A,3252.739804,N,11712.069674,W,52.8,169.6,220310,,,A*4F 81 | $GPRMC,015654.9,A,3252.699897,N,11712.058340,W,48.6,168.3,220310,,,A*4A 82 | $GPRMC,015657.9,A,3252.660069,N,11712.050151,W,48.1,170.5,220310,,,A*44 83 | $GPRMC,015700.9,A,3252.621394,N,11712.046073,W,45.4,177.2,220310,,,A*4D 84 | $GPRMC,015703.9,A,3252.584092,N,11712.051326,W,44.5,190.0,220310,,,A*49 85 | $GPRMC,015706.9,A,3252.549008,N,11712.065856,W,43.9,198.4,220310,,,A*42 86 | $GPRMC,015709.9,A,3252.522178,N,11712.096121,W,42.7,219.9,220310,,,A*4B 87 | $GPRMC,015712.9,A,3252.499584,N,11712.129855,W,42.8,229.5,220310,,,A*48 88 | $GPRMC,015715.9,A,3252.485078,N,11712.163602,W,38.6,238.9,220310,,,A*49 89 | $GPRMC,015718.9,A,3252.481029,N,11712.202824,W,39.1,254.9,220310,,,A*46 90 | $GPRMC,015721.9,A,3252.481644,N,11712.244580,W,39.6,260.6,220310,,,A*4F 91 | $GPRMC,015724.9,A,3252.478148,N,11712.283410,W,38.7,260.8,220310,,,A*4A 92 | $GPRMC,015727.9,A,3252.473242,N,11712.319274,W,37.8,259.7,220310,,,A*48 93 | $GPRMC,015730.9,A,3252.468606,N,11712.356340,W,36.2,261.3,220310,,,A*49 94 | $GPRMC,015733.9,A,3252.463145,N,11712.388608,W,33.0,261.5,220310,,,A*4A 95 | $GPRMC,015736.9,A,3252.462790,N,11712.417420,W,26.8,264.1,220310,,,A*44 96 | $GPRMC,015739.9,A,3252.464062,N,11712.432212,W,18.9,267.5,220310,,,A*4C 97 | $GPRMC,015742.9,A,3252.464374,N,11712.437148,W,8.5,266.9,220310,,,A*7D 98 | $GPRMC,015754.9,A,3252.456650,N,11712.445255,W,13.0,259.0,220310,,,A*48 99 | $GPRMC,015757.9,A,3252.453214,N,11712.465459,W,21.7,257.4,220310,,,A*4E 100 | $GPRMC,015800.9,A,3252.447173,N,11712.493658,W,26.7,259.7,220310,,,A*44 101 | $GPRMC,015803.9,A,3252.442932,N,11712.518752,W,25.9,259.5,220310,,,A*49 102 | $GPRMC,015806.9,A,3252.437806,N,11712.539879,W,22.4,257.7,220310,,,A*4B 103 | $GPRMC,015809.9,A,3252.435257,N,11712.556925,W,14.3,259.9,220310,,,A*4B 104 | $GPRMC,015812.9,A,3252.433800,N,11712.563002,W,4.4,258.6,220310,,,A*7D 105 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip10.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,194940.3,A,3335.8164,N,11727.8691,W,32.80,259.60,300110,,*28 3 | $GPRMC,194943.3,A,3335.7808,N,11727.8755,W,29.20,210.00,300110,,*25 4 | $GPRMC,194946.3,A,3335.7390,N,11727.8659,W,41.20,180.90,300110,,*2A 5 | $GPRMC,194949.3,A,3335.7011,N,11727.8680,W,42.10,187.80,300110,,*2D 6 | $GPRMC,194952.3,A,3335.6643,N,11727.8860,W,47.50,202.40,300110,,*24 7 | $GPRMC,194955.3,A,3335.6329,N,11727.9132,W,44.20,217.50,300110,,*24 8 | $GPRMC,194958.3,A,3335.6068,N,11727.9416,W,41.70,224.90,300110,,*20 9 | $GPRMC,195001.3,A,3335.5912,N,11727.9755,W,37.20,237.90,300110,,*21 10 | $GPRMC,195004.3,A,3335.5966,N,11728.0142,W,35.80,265.80,300110,,*2F 11 | $GPRMC,195007.3,A,3335.6076,N,11728.0560,W,39.40,275.10,300110,,*2B 12 | $GPRMC,195010.3,A,3335.6066,N,11728.0942,W,36.70,265.90,300110,,*25 13 | $GPRMC,195013.3,A,3335.5929,N,11728.1294,W,37.20,252.00,300110,,*2F 14 | $GPRMC,195016.3,A,3335.5614,N,11728.1475,W,33.70,219.70,300110,,*2B 15 | $GPRMC,195019.3,A,3335.5223,N,11728.1574,W,41.50,207.20,300110,,*29 16 | $GPRMC,195022.3,A,3335.4946,N,11728.1828,W,43.00,220.10,300110,,*2D 17 | $GPRMC,195025.3,A,3335.4827,N,11728.2184,W,35.00,239.70,300110,,*2F 18 | $GPRMC,195028.3,A,3335.4946,N,11728.2617,W,38.70,274.60,300110,,*2B 19 | $GPRMC,195031.3,A,3335.5180,N,11728.2994,W,41.80,298.90,300110,,*28 20 | $GPRMC,195034.3,A,3335.5353,N,11728.3387,W,44.30,292.20,300110,,*27 21 | $GPRMC,195037.3,A,3335.5398,N,11728.3775,W,39.60,281.00,300110,,*25 22 | $GPRMC,195040.3,A,3335.5217,N,11728.4142,W,41.20,256.60,300110,,*21 23 | $GPRMC,195043.3,A,3335.5113,N,11728.4554,W,41.70,256.00,300110,,*25 24 | $GPRMC,195046.3,A,3335.5170,N,11728.4966,W,41.80,276.00,300110,,*25 25 | $GPRMC,195049.3,A,3335.5360,N,11728.5389,W,45.60,288.80,300110,,*20 26 | $GPRMC,195052.3,A,3335.5502,N,11728.5827,W,47.50,289.00,300110,,*2F 27 | $GPRMC,195055.3,A,3335.5640,N,11728.6274,W,47.10,289.10,300110,,*27 28 | $GPRMC,195058.3,A,3335.5773,N,11728.6712,W,46.00,289.40,300110,,*2B 29 | $GPRMC,195101.3,A,3335.5936,N,11728.7113,W,43.80,300.20,300110,,*24 30 | $GPRMC,195104.3,A,3335.6166,N,11728.7478,W,45.90,306.90,300110,,*2D 31 | $GPRMC,195107.3,A,3335.6424,N,11728.7780,W,43.50,310.60,300110,,*2B 32 | $GPRMC,195110.3,A,3335.6658,N,11728.8133,W,45.80,304.70,300110,,*2A 33 | $GPRMC,195113.3,A,3335.6789,N,11728.8573,W,48.00,288.30,300110,,*20 34 | $GPRMC,195116.3,A,3335.6892,N,11728.9043,W,49.10,284.70,300110,,*2F 35 | $GPRMC,195119.3,A,3335.7017,N,11728.9493,W,45.90,290.50,300110,,*2E 36 | $GPRMC,195122.3,A,3335.7159,N,11728.9921,W,45.90,290.40,300110,,*28 37 | $GPRMC,195125.3,A,3335.7259,N,11729.0336,W,43.60,286.30,300110,,*21 38 | $GPRMC,195128.3,A,3335.7113,N,11729.0702,W,37.60,258.70,300110,,*26 39 | $GPRMC,195132.3,A,3335.6662,N,11729.1037,W,40.90,217.30,300110,,*2D 40 | $GPRMC,195135.3,A,3335.6405,N,11729.1301,W,39.00,225.90,300110,,*23 41 | $GPRMC,195138.3,A,3335.6235,N,11729.1644,W,40.30,238.60,300110,,*21 42 | $GPRMC,195141.3,A,3335.6238,N,11729.1976,W,31.50,257.10,300110,,*22 43 | $GPRMC,195144.3,A,3335.6402,N,11729.2342,W,38.80,278.70,300110,,*29 44 | $GPRMC,195147.3,A,3335.6448,N,11729.2730,W,39.40,274.30,300110,,*20 45 | $GPRMC,195150.3,A,3335.6326,N,11729.3106,W,40.50,257.40,300110,,*22 46 | $GPRMC,195153.3,A,3335.6097,N,11729.3484,W,44.50,246.70,300110,,*20 47 | $GPRMC,195157.3,A,3335.5983,N,11729.4040,W,43.10,257.80,300110,,*2C 48 | $GPRMC,195200.3,A,3335.6045,N,11729.4464,W,39.30,270.60,300110,,*2B 49 | $GPRMC,195203.3,A,3335.5980,N,11729.4819,W,36.70,258.40,300110,,*2E 50 | $GPRMC,195206.3,A,3335.5713,N,11729.5051,W,35.50,224.90,300110,,*2D 51 | $GPRMC,195209.3,A,3335.5477,N,11729.5328,W,39.90,229.00,300110,,*2A 52 | $GPRMC,195212.3,A,3335.5339,N,11729.5698,W,39.50,242.00,300110,,*22 53 | $GPRMC,195215.3,A,3335.5312,N,11729.6057,W,33.30,254.90,300110,,*28 54 | $GPRMC,195218.3,A,3335.5490,N,11729.6416,W,38.50,286.90,300110,,*2B 55 | $GPRMC,195221.3,A,3335.5638,N,11729.6796,W,38.70,281.40,300110,,*22 56 | $GPRMC,195224.3,A,3335.5665,N,11729.7189,W,39.80,273.40,300110,,*25 57 | $GPRMC,195227.3,A,3335.5539,N,11729.7556,W,39.30,255.00,300110,,*21 58 | $GPRMC,195230.3,A,3335.5434,N,11729.7938,W,40.00,256.00,300110,,*21 59 | $GPRMC,195233.3,A,3335.5326,N,11729.8291,W,36.20,248.00,300110,,*2D 60 | $GPRMC,195236.3,A,3335.5103,N,11729.8531,W,33.50,226.80,300110,,*22 61 | $GPRMC,195239.3,A,3335.4740,N,11729.8571,W,38.20,204.20,300110,,*2F 62 | $GPRMC,195242.3,A,3335.4479,N,11729.8795,W,40.80,218.00,300110,,*28 63 | $GPRMC,195245.3,A,3335.4339,N,11729.9151,W,40.90,240.30,300110,,*2C 64 | $GPRMC,195248.3,A,3335.4246,N,11729.9518,W,38.60,250.80,300110,,*2B 65 | $GPRMC,195251.3,A,3335.4193,N,11729.9878,W,35.20,262.90,300110,,*2A 66 | $GPRMC,195254.3,A,3335.4260,N,11730.0208,W,32.30,282.10,300110,,*2C 67 | $GPRMC,195257.3,A,3335.4392,N,11730.0547,W,34.50,281.00,300110,,*2D 68 | $GPRMC,195300.3,A,3335.4381,N,11730.0907,W,36.10,268.20,300110,,*27 69 | $GPRMC,195303.3,A,3335.4256,N,11730.1268,W,38.20,252.30,300110,,*29 70 | $GPRMC,195306.3,A,3335.4127,N,11730.1637,W,37.60,257.10,300110,,*2B 71 | $GPRMC,195309.3,A,3335.4103,N,11730.2017,W,39.80,267.90,300110,,*2E 72 | $GPRMC,195312.3,A,3335.4169,N,11730.2384,W,39.80,281.00,300110,,*20 73 | $GPRMC,195315.3,A,3335.4355,N,11730.2701,W,39.80,301.10,300110,,*2B 74 | $GPRMC,195318.3,A,3335.4543,N,11730.3046,W,42.40,301.80,300110,,*2B 75 | $GPRMC,195321.3,A,3335.4732,N,11730.3405,W,42.30,301.80,300110,,*21 76 | $GPRMC,195324.3,A,3335.4897,N,11730.3764,W,39.90,295.00,300110,,*22 77 | $GPRMC,195327.3,A,3335.4995,N,11730.4160,W,42.30,284.80,300110,,*29 78 | $GPRMC,195330.3,A,3335.4959,N,11730.4551,W,39.50,264.90,300110,,*2C 79 | $GPRMC,195333.3,A,3335.4895,N,11730.4931,W,38.50,262.50,300110,,*2F 80 | $GPRMC,195336.3,A,3335.4939,N,11730.5312,W,37.10,277.90,300110,,*24 81 | $GPRMC,195339.3,A,3335.5073,N,11730.5681,W,38.80,292.10,300110,,*27 82 | $GPRMC,195342.3,A,3335.5261,N,11730.6058,W,41.80,297.10,300110,,*20 83 | $GPRMC,195345.3,A,3335.5405,N,11730.6426,W,38.10,292.20,300110,,*2F 84 | $GPRMC,195348.3,A,3335.5463,N,11730.6839,W,39.50,279.20,300110,,*20 85 | $GPRMC,195351.3,A,3335.5382,N,11730.7255,W,41.00,259.90,300110,,*22 86 | $GPRMC,195354.3,A,3335.5215,N,11730.7643,W,43.10,245.00,300110,,*2C 87 | $GPRMC,195357.3,A,3335.5033,N,11730.8016,W,42.00,237.00,300110,,*25 88 | $GPRMC,195400.3,A,3335.4767,N,11730.8302,W,41.70,221.20,300110,,*20 89 | $GPRMC,195403.3,A,3335.4463,N,11730.8481,W,39.90,207.30,300110,,*2C 90 | $GPRMC,195406.3,A,3335.4130,N,11730.8581,W,40.90,202.20,300110,,*21 91 | $GPRMC,195409.3,A,3335.3830,N,11730.8772,W,40.80,211.20,300110,,*2D 92 | $GPRMC,195412.3,A,3335.3546,N,11730.9076,W,43.90,219.90,300110,,*28 93 | $GPRMC,195415.3,A,3335.3383,N,11730.9484,W,44.40,240.50,300110,,*23 94 | $GPRMC,195418.3,A,3335.3211,N,11730.9887,W,43.50,236.60,300110,,*2F 95 | $GPRMC,195421.3,A,3335.2994,N,11731.0242,W,45.90,236.20,300110,,*27 96 | $GPRMC,195424.3,A,3335.2756,N,11731.0530,W,43.80,234.70,300110,,*20 97 | $GPRMC,195427.3,A,3335.2588,N,11731.0891,W,43.10,241.00,300110,,*28 98 | $GPRMC,195430.3,A,3335.2439,N,11731.1298,W,44.00,246.90,300110,,*2F 99 | $GPRMC,195433.3,A,3335.2337,N,11731.1696,W,43.40,250.30,300110,,*21 100 | $GPRMC,195436.3,A,3335.2232,N,11731.2093,W,41.50,252.10,300110,,*23 101 | $GPRMC,195439.3,A,3335.2135,N,11731.2474,W,40.30,251.80,300110,,*28 102 | $GPRMC,195442.3,A,3335.1983,N,11731.2833,W,40.60,238.50,300110,,*2A 103 | $GPRMC,195445.3,A,3335.1764,N,11731.3112,W,36.40,226.20,300110,,*2A 104 | $GPRMC,195449.3,A,3335.1321,N,11731.3252,W,34.90,192.50,300110,,*20 105 | $GPRMC,195452.3,A,3335.0965,N,11731.3282,W,40.30,189.10,300110,,*2B 106 | $GPRMC,195455.3,A,3335.0640,N,11731.3408,W,40.10,202.30,300110,,*20 107 | $GPRMC,195458.3,A,3335.0354,N,11731.3667,W,45.60,218.20,300110,,*2E 108 | $GPRMC,195501.3,A,3335.0165,N,11731.4039,W,43.50,232.10,300110,,*27 109 | $GPRMC,195504.3,A,3334.9916,N,11731.4374,W,45.00,227.60,300110,,*2C 110 | $GPRMC,195507.3,A,3334.9695,N,11731.4744,W,45.80,236.80,300110,,*2A 111 | $GPRMC,195510.3,A,3334.9531,N,11731.5157,W,46.60,243.30,300110,,*20 112 | $GPRMC,195513.3,A,3334.9355,N,11731.5597,W,49.10,243.80,300110,,*2C 113 | $GPRMC,195516.3,A,3334.9160,N,11731.6074,W,53.70,243.30,300110,,*20 114 | $GPRMC,195519.3,A,3334.8952,N,11731.6562,W,56.60,243.40,300110,,*26 115 | $GPRMC,195522.3,A,3334.8745,N,11731.7065,W,56.40,243.30,300110,,*20 116 | $GPRMC,195525.3,A,3334.8532,N,11731.7564,W,54.70,243.20,300110,,*21 117 | $GPRMC,195528.3,A,3334.8335,N,11731.8048,W,52.60,243.50,300110,,*29 118 | $GPRMC,195531.3,A,3334.8145,N,11731.8498,W,49.70,243.00,300110,,*23 119 | $GPRMC,195534.3,A,3334.7957,N,11731.8935,W,49.50,242.40,300110,,*2F 120 | $GPRMC,195537.3,A,3334.7772,N,11731.9368,W,48.50,243.20,300110,,*20 121 | $GPRMC,195540.3,A,3334.7595,N,11731.9794,W,47.40,243.70,300110,,*27 122 | $GPRMC,195543.3,A,3334.7425,N,11732.0208,W,46.20,243.10,300110,,*25 123 | $GPRMC,195546.3,A,3334.7250,N,11732.0612,W,45.90,244.00,300110,,*25 124 | $GPRMC,195549.3,A,3334.7078,N,11732.1022,W,46.40,243.10,300110,,*2E 125 | $GPRMC,195552.3,A,3334.6905,N,11732.1430,W,44.50,243.20,300110,,*21 126 | $GPRMC,195555.3,A,3334.6743,N,11732.1820,W,45.10,244.50,300110,,*22 127 | $GPRMC,195558.3,A,3334.6544,N,11732.2150,W,41.00,232.30,300110,,*25 128 | $GPRMC,195601.3,A,3334.6321,N,11732.2446,W,40.50,224.90,300110,,*24 129 | $GPRMC,195604.3,A,3334.6072,N,11732.2716,W,39.40,220.90,300110,,*29 130 | $GPRMC,195607.3,A,3334.5829,N,11732.2967,W,38.70,222.20,300110,,*2C 131 | $GPRMC,195610.3,A,3334.5600,N,11732.3248,W,40.50,227.00,300110,,*22 132 | $GPRMC,195613.3,A,3334.5366,N,11732.3568,W,44.00,229.50,300110,,*2B 133 | $GPRMC,195616.3,A,3334.5119,N,11732.3910,W,45.00,229.50,300110,,*26 134 | $GPRMC,195619.3,A,3334.4870,N,11732.4240,W,43.40,228.40,300110,,*25 135 | $GPRMC,195622.3,A,3334.4621,N,11732.4514,W,40.00,220.60,300110,,*2C 136 | $GPRMC,195625.3,A,3334.4340,N,11732.4728,W,39.60,210.70,300110,,*2E 137 | $GPRMC,195628.3,A,3334.3988,N,11732.4911,W,44.30,204.80,300110,,*2B 138 | $GPRMC,195631.3,A,3334.3629,N,11732.5113,W,46.20,205.20,300110,,*24 139 | $GPRMC,195634.3,A,3334.3293,N,11732.5292,W,44.90,204.90,300110,,*2D 140 | $GPRMC,195637.3,A,3334.2929,N,11732.5463,W,46.20,201.90,300110,,*21 141 | $GPRMC,195640.3,A,3334.2544,N,11732.5645,W,51.40,203.80,300110,,*23 142 | $GPRMC,195643.3,A,3334.2143,N,11732.5867,W,53.00,205.00,300110,,*25 143 | $GPRMC,195646.3,A,3334.1719,N,11732.6079,W,54.20,203.60,300110,,*2B 144 | $GPRMC,195649.3,A,3334.1288,N,11732.6301,W,57.20,204.20,300110,,*25 145 | $GPRMC,195653.3,A,3334.0702,N,11732.6620,W,58.00,203.60,300110,,*20 146 | $GPRMC,195656.3,A,3334.0266,N,11732.6835,W,56.90,201.80,300110,,*23 147 | $GPRMC,195659.3,A,3333.9829,N,11732.7026,W,56.80,200.00,300110,,*20 148 | $GPRMC,195702.3,A,3333.9382,N,11732.7216,W,57.00,198.70,300110,,*28 149 | $GPRMC,195705.3,A,3333.8932,N,11732.7399,W,57.20,198.70,300110,,*2B 150 | $GPRMC,195708.3,A,3333.8480,N,11732.7579,W,57.10,198.50,300110,,*2B 151 | $GPRMC,195711.3,A,3333.8021,N,11732.7766,W,57.60,198.70,300110,,*25 152 | $GPRMC,195714.3,A,3333.7570,N,11732.7954,W,57.30,199.50,300110,,*27 153 | $GPRMC,195717.3,A,3333.7127,N,11732.8141,W,57.40,200.20,300110,,*22 154 | $GPRMC,195720.3,A,3333.6678,N,11732.8331,W,57.30,200.00,300110,,*2A 155 | $GPRMC,195723.3,A,3333.6225,N,11732.8532,W,57.10,199.30,300110,,*22 156 | $GPRMC,195726.3,A,3333.5779,N,11732.8719,W,56.60,198.70,300110,,*20 157 | $GPRMC,195729.3,A,3333.5328,N,11732.8899,W,57.20,199.90,300110,,*22 158 | $GPRMC,195732.3,A,3333.4875,N,11732.9089,W,56.90,198.50,300110,,*25 159 | $GPRMC,195735.3,A,3333.4425,N,11732.9269,W,57.30,198.60,300110,,*2F 160 | $GPRMC,195738.3,A,3333.3957,N,11732.9414,W,57.60,191.30,300110,,*28 161 | $GPRMC,195741.3,A,3333.3489,N,11732.9512,W,56.70,188.20,300110,,*26 162 | $GPRMC,195744.3,A,3333.3016,N,11732.9535,W,56.20,181.90,300110,,*23 163 | $GPRMC,195747.3,A,3333.2545,N,11732.9498,W,57.20,177.70,300110,,*22 164 | $GPRMC,195750.3,A,3333.2072,N,11732.9473,W,57.50,176.50,300110,,*24 165 | $GPRMC,195753.3,A,3333.1598,N,11732.9444,W,57.00,177.30,300110,,*23 166 | $GPRMC,195756.3,A,3333.1125,N,11732.9416,W,57.00,177.30,300110,,*23 167 | $GPRMC,195759.3,A,3333.0645,N,11732.9381,W,57.00,176.50,300110,,*22 168 | $GPRMC,195802.3,A,3333.0183,N,11732.9349,W,57.20,175.40,300110,,*2A 169 | $GPRMC,195805.3,A,3332.9701,N,11732.9325,W,57.20,177.10,300110,,*24 170 | $GPRMC,195808.3,A,3332.9217,N,11732.9297,W,59.20,177.20,300110,,*2E 171 | $GPRMC,195811.3,A,3332.8724,N,11732.9273,W,59.60,178.40,300110,,*25 172 | $GPRMC,195814.3,A,3332.8236,N,11732.9313,W,57.70,186.40,300110,,*2F 173 | $GPRMC,195817.3,A,3332.7775,N,11732.9412,W,54.80,191.30,300110,,*2A 174 | $GPRMC,195820.3,A,3332.7307,N,11732.9548,W,57.50,193.10,300110,,*2F 175 | $GPRMC,195823.3,A,3332.6839,N,11732.9670,W,57.30,191.40,300110,,*22 176 | $GPRMC,195826.3,A,3332.6366,N,11732.9721,W,57.20,184.10,300110,,*23 177 | $GPRMC,195829.3,A,3332.5892,N,11732.9592,W,58.00,168.20,300110,,*29 178 | $GPRMC,195832.3,A,3332.5445,N,11732.9405,W,56.60,162.90,300110,,*23 179 | $GPRMC,195835.3,A,3332.4995,N,11732.9243,W,56.50,165.20,300110,,*2E 180 | $GPRMC,195838.3,A,3332.4516,N,11732.9154,W,58.20,175.80,300110,,*23 181 | $GPRMC,195841.3,A,3332.4035,N,11732.9180,W,59.50,184.70,300110,,*27 182 | $GPRMC,195844.3,A,3332.3577,N,11732.9334,W,57.00,194.80,300110,,*2E 183 | $GPRMC,195847.3,A,3332.3113,N,11732.9486,W,57.40,194.20,300110,,*2B 184 | $GPRMC,195850.3,A,3332.2648,N,11732.9596,W,57.20,186.80,300110,,*2A 185 | $GPRMC,195853.3,A,3332.2176,N,11732.9633,W,57.00,182.90,300110,,*28 186 | $GPRMC,195857.3,A,3332.1555,N,11732.9666,W,55.50,182.60,300110,,*22 187 | $GPRMC,195900.3,A,3332.1104,N,11732.9709,W,53.50,186.60,300110,,*2B 188 | $GPRMC,195903.3,A,3332.0657,N,11732.9792,W,54.30,190.40,300110,,*2E 189 | $GPRMC,195906.3,A,3332.0213,N,11732.9929,W,54.90,196.00,300110,,*29 190 | $GPRMC,195909.3,A,3331.9778,N,11733.0119,W,54.50,201.30,300110,,*25 191 | $GPRMC,195912.3,A,3331.9369,N,11733.0350,W,54.30,207.80,300110,,*2F 192 | $GPRMC,195915.3,A,3331.8971,N,11733.0610,W,54.40,211.00,300110,,*23 193 | $GPRMC,195918.3,A,3331.8582,N,11733.0883,W,54.10,210.50,300110,,*2B 194 | $GPRMC,195921.3,A,3331.8193,N,11733.1163,W,54.00,210.80,300110,,*2F 195 | $GPRMC,195924.3,A,3331.7804,N,11733.1429,W,53.20,210.80,300110,,*2C 196 | $GPRMC,195927.3,A,3331.7408,N,11733.1665,W,53.60,204.50,300110,,*29 197 | $GPRMC,195930.3,A,3331.6978,N,11733.1793,W,53.30,192.00,300110,,*20 198 | $GPRMC,195933.3,A,3331.6542,N,11733.1875,W,53.00,188.50,300110,,*2C 199 | $GPRMC,195936.3,A,3331.6108,N,11733.1969,W,52.60,193.40,300110,,*23 200 | $GPRMC,195939.3,A,3331.5674,N,11733.2153,W,53.90,201.80,300110,,*2B 201 | $GPRMC,195942.3,A,3331.5270,N,11733.2381,W,54.20,208.60,300110,,*21 202 | $GPRMC,195945.3,A,3331.4891,N,11733.2689,W,56.00,216.80,300110,,*2E 203 | $GPRMC,195948.3,A,3331.4602,N,11733.3098,W,55.10,229.90,300110,,*2F 204 | $GPRMC,195951.3,A,3331.4370,N,11733.3575,W,54.00,241.40,300110,,*22 205 | $GPRMC,195954.3,A,3331.4158,N,11733.4047,W,53.10,240.90,300110,,*26 206 | $GPRMC,195957.3,A,3331.3954,N,11733.4493,W,48.50,240.30,300110,,*2F 207 | $GPRMC,200000.3,A,3331.3766,N,11733.4892,W,44.10,240.00,300110,,*22 208 | $GPRMC,200003.3,A,3331.3572,N,11733.5255,W,42.80,235.50,300110,,*2E 209 | $GPRMC,200006.3,A,3331.3335,N,11733.5558,W,40.80,224.60,300110,,*25 210 | $GPRMC,200009.3,A,3331.3046,N,11733.5785,W,40.20,213.30,300110,,*24 211 | $GPRMC,200012.3,A,3331.2737,N,11733.5944,W,41.10,197.10,300110,,*22 212 | $GPRMC,200015.3,A,3331.2390,N,11733.6052,W,42.90,196.60,300110,,*2C 213 | $GPRMC,200018.3,A,3331.2061,N,11733.6189,W,42.00,200.50,300110,,*2D 214 | $GPRMC,200021.3,A,3331.1741,N,11733.6373,W,42.10,205.10,300110,,*26 215 | $GPRMC,200024.3,A,3331.1457,N,11733.6610,W,43.10,216.00,300110,,*25 216 | $GPRMC,200027.3,A,3331.1200,N,11733.6913,W,43.70,226.40,300110,,*2F 217 | $GPRMC,200030.3,A,3331.0960,N,11733.7241,W,43.70,228.90,300110,,*2B 218 | $GPRMC,200033.3,A,3331.0719,N,11733.7568,W,43.70,226.60,300110,,*25 219 | $GPRMC,200036.3,A,3331.0464,N,11733.7891,W,44.80,225.90,300110,,*26 220 | $GPRMC,200039.3,A,3331.0186,N,11733.8188,W,44.30,220.00,300110,,*29 221 | $GPRMC,200042.3,A,3330.9838,N,11733.8443,W,47.80,213.20,300110,,*29 222 | $GPRMC,200045.3,A,3330.9500,N,11733.8701,W,49.20,214.70,300110,,*2B 223 | $GPRMC,200048.3,A,3330.9188,N,11733.9028,W,49.80,224.60,300110,,*27 224 | $GPRMC,200051.3,A,3330.8966,N,11733.9437,W,48.60,239.10,300110,,*28 225 | $GPRMC,200054.3,A,3330.8809,N,11733.9871,W,45.90,250.10,300110,,*26 226 | $GPRMC,200057.3,A,3330.8707,N,11734.0319,W,46.50,256.50,300110,,*22 227 | $GPRMC,200100.3,A,3330.8647,N,11734.0771,W,45.10,261.60,300110,,*2E 228 | $GPRMC,200103.3,A,3330.8617,N,11734.1221,W,46.40,266.60,300110,,*28 229 | $GPRMC,200106.3,A,3330.8624,N,11734.1691,W,47.00,269.70,300110,,*29 230 | $GPRMC,200109.3,A,3330.8635,N,11734.2163,W,45.90,271.30,300110,,*29 231 | $GPRMC,200112.3,A,3330.8656,N,11734.2603,W,42.10,272.00,300110,,*28 232 | $GPRMC,200115.3,A,3330.8689,N,11734.3005,W,40.10,277.20,300110,,*29 233 | $GPRMC,200118.3,A,3330.8771,N,11734.3369,W,37.80,282.10,300110,,*2B 234 | $GPRMC,200121.3,A,3330.8846,N,11734.3725,W,37.70,281.10,300110,,*2A 235 | $GPRMC,200124.3,A,3330.8874,N,11734.4112,W,38.70,271.10,300110,,*2B 236 | $GPRMC,200127.3,A,3330.8821,N,11734.4511,W,40.90,257.10,300110,,*2A 237 | $GPRMC,200130.3,A,3330.8727,N,11734.4913,W,42.60,253.50,300110,,*26 238 | $GPRMC,200133.3,A,3330.8629,N,11734.5336,W,44.60,257.20,300110,,*23 239 | $GPRMC,200136.3,A,3330.8566,N,11734.5774,W,45.00,262.50,300110,,*2A 240 | $GPRMC,200139.3,A,3330.8515,N,11734.6226,W,45.70,262.00,300110,,*22 241 | $GPRMC,200142.3,A,3330.8460,N,11734.6683,W,45.70,262.50,300110,,*23 242 | $GPRMC,200145.3,A,3330.8414,N,11734.7123,W,44.00,262.00,300110,,*28 243 | $GPRMC,200148.3,A,3330.8363,N,11734.7554,W,43.70,262.60,300110,,*20 244 | $GPRMC,200151.3,A,3330.8322,N,11734.7986,W,44.30,263.20,300110,,*28 245 | $GPRMC,200154.3,A,3330.8272,N,11734.8424,W,44.20,262.60,300110,,*27 246 | $GPRMC,200157.3,A,3330.8230,N,11734.8863,W,44.40,263.70,300110,,*2B 247 | $GPRMC,200200.3,A,3330.8206,N,11734.9310,W,45.10,267.50,300110,,*23 248 | $GPRMC,200203.3,A,3330.8261,N,11734.9738,W,43.20,280.70,300110,,*21 249 | $GPRMC,200206.3,A,3330.8385,N,11735.0136,W,41.40,292.80,300110,,*27 250 | $GPRMC,200209.3,A,3330.8526,N,11735.0509,W,40.00,293.80,300110,,*2B 251 | $GPRMC,200212.3,A,3330.8706,N,11735.0882,W,40.80,289.80,300110,,*2C 252 | $GPRMC,200215.3,A,3330.8801,N,11735.1277,W,41.10,279.20,300110,,*2F 253 | $GPRMC,200218.3,A,3330.8819,N,11735.1693,W,42.50,267.10,300110,,*2E 254 | $GPRMC,200221.3,A,3330.8794,N,11735.2122,W,43.60,267.30,300110,,*20 255 | $GPRMC,200224.3,A,3330.8814,N,11735.2553,W,44.20,278.50,300110,,*2B 256 | $GPRMC,200227.3,A,3330.8895,N,11735.2982,W,43.50,285.20,300110,,*24 257 | $GPRMC,200230.3,A,3330.9015,N,11735.3419,W,45.60,287.40,300110,,*2C 258 | $GPRMC,200233.3,A,3330.9146,N,11735.3875,W,47.30,288.20,300110,,*20 259 | $GPRMC,200236.3,A,3330.9269,N,11735.4325,W,46.90,288.20,300110,,*29 260 | $GPRMC,200239.3,A,3330.9409,N,11735.4755,W,46.10,293.10,300110,,*24 261 | $GPRMC,200242.3,A,3330.9598,N,11735.5128,W,43.40,302.20,300110,,*26 262 | $GPRMC,200245.3,A,3330.9841,N,11735.5473,W,43.90,307.80,300110,,*21 263 | $GPRMC,200248.3,A,3331.0033,N,11735.5848,W,44.80,299.00,300110,,*25 264 | $GPRMC,200251.3,A,3331.0185,N,11735.6250,W,46.00,292.70,300110,,*27 265 | $GPRMC,200254.3,A,3331.0329,N,11735.6693,W,47.40,290.20,300110,,*2F 266 | $GPRMC,200257.3,A,3331.0468,N,11735.7136,W,48.10,290.50,300110,,*2A 267 | $GPRMC,200300.3,A,3331.0602,N,11735.7583,W,48.40,290.90,300110,,*24 268 | $GPRMC,200303.3,A,3331.0748,N,11735.8037,W,47.90,290.30,300110,,*25 269 | $GPRMC,200306.3,A,3331.0889,N,11735.8467,W,46.10,290.70,300110,,*2E 270 | $GPRMC,200309.3,A,3331.1016,N,11735.8892,W,44.90,289.40,300110,,*29 271 | $GPRMC,200312.3,A,3331.1143,N,11735.9303,W,43.70,289.90,300110,,*24 272 | $GPRMC,200315.3,A,3331.1276,N,11735.9721,W,44.90,290.00,300110,,*2A 273 | $GPRMC,200318.3,A,3331.1410,N,11736.0153,W,45.90,290.30,300110,,*2A 274 | $GPRMC,200321.3,A,3331.1537,N,11736.0579,W,45.70,290.40,300110,,*21 275 | $GPRMC,200324.3,A,3331.1675,N,11736.0980,W,43.80,295.40,300110,,*27 276 | $GPRMC,200327.3,A,3331.1919,N,11736.1352,W,46.10,305.30,300110,,*26 277 | $GPRMC,200330.3,A,3331.2212,N,11736.1625,W,44.30,317.50,300110,,*23 278 | $GPRMC,200333.3,A,3331.2500,N,11736.1912,W,44.30,317.90,300110,,*23 279 | $GPRMC,200336.3,A,3331.2775,N,11736.2203,W,43.90,317.60,300110,,*2C 280 | $GPRMC,200339.3,A,3331.3042,N,11736.2494,W,42.90,317.00,300110,,*2E 281 | $GPRMC,200342.3,A,3331.3241,N,11736.2836,W,42.50,305.70,300110,,*2F 282 | $GPRMC,200345.3,A,3331.3399,N,11736.3203,W,42.00,289.30,300110,,*25 283 | $GPRMC,200348.3,A,3331.3487,N,11736.3612,W,42.00,280.20,300110,,*2C 284 | $GPRMC,200351.3,A,3331.3531,N,11736.4023,W,41.50,274.20,300110,,*26 285 | $GPRMC,200354.3,A,3331.3527,N,11736.4439,W,40.60,263.90,300110,,*24 286 | $GPRMC,200357.3,A,3331.3456,N,11736.4826,W,36.80,254.20,300110,,*22 287 | $GPRMC,200400.3,A,3331.3308,N,11736.5201,W,40.40,244.30,300110,,*28 288 | $GPRMC,200403.3,A,3331.3163,N,11736.5571,W,38.70,249.50,300110,,*23 289 | $GPRMC,200406.3,A,3331.3097,N,11736.5971,W,41.60,263.60,300110,,*24 290 | $GPRMC,200409.3,A,3331.3118,N,11736.6412,W,43.70,276.40,300110,,*23 291 | $GPRMC,200412.3,A,3331.3169,N,11736.6845,W,43.10,276.50,300110,,*26 292 | $GPRMC,200415.3,A,3331.3214,N,11736.7270,W,42.10,276.60,300110,,*27 293 | $GPRMC,200418.3,A,3331.3223,N,11736.7684,W,40.60,268.50,300110,,*28 294 | $GPRMC,200421.3,A,3331.3164,N,11736.8061,W,37.30,257.70,300110,,*2B 295 | $GPRMC,200424.3,A,3331.3036,N,11736.8401,W,35.30,240.60,300110,,*2F 296 | $GPRMC,200427.3,A,3331.2871,N,11736.8692,W,36.20,234.70,300110,,*2E 297 | $GPRMC,200430.3,A,3331.2703,N,11736.8995,W,36.60,238.50,300110,,*20 298 | $GPRMC,200433.3,A,3331.2554,N,11736.9310,W,35.90,242.90,300110,,*28 299 | $GPRMC,200436.3,A,3331.2433,N,11736.9640,W,35.70,249.70,300110,,*26 300 | $GPRMC,200439.3,A,3331.2335,N,11736.9979,W,36.00,251.70,300110,,*20 301 | $GPRMC,200442.3,A,3331.2241,N,11737.0321,W,36.60,251.00,300110,,*20 302 | $GPRMC,200445.3,A,3331.2141,N,11737.0673,W,37.40,252.00,300110,,*26 303 | $GPRMC,200448.3,A,3331.2048,N,11737.1019,W,35.30,252.90,300110,,*24 304 | $GPRMC,200451.3,A,3331.1967,N,11737.1339,W,30.90,254.30,300110,,*29 305 | $GPRMC,200454.3,A,3331.1909,N,11737.1599,W,24.20,252.80,300110,,*2B 306 | $GPRMC,200457.3,A,3331.1864,N,11737.1760,W,15.80,244.10,300110,,*20 307 | $GPRMC,200709.3,A,3331.1862,N,11737.1822,W,5.00,229.10,300110,,*15 308 | $GPRMC,200712.3,A,3331.1832,N,11737.1946,W,10.90,247.30,300110,,*2E 309 | $GPRMC,200715.3,A,3331.1790,N,11737.2216,W,23.50,252.90,300110,,*21 310 | $GPRMC,200718.3,A,3331.1749,N,11737.2545,W,32.20,259.50,300110,,*29 311 | $GPRMC,200721.3,A,3331.1699,N,11737.2883,W,35.30,260.70,300110,,*26 312 | $GPRMC,200724.3,A,3331.1657,N,11737.3242,W,36.90,262.00,300110,,*2B 313 | $GPRMC,200727.3,A,3331.1617,N,11737.3608,W,36.60,262.30,300110,,*2A 314 | $GPRMC,200730.3,A,3331.1577,N,11737.3968,W,36.10,262.10,300110,,*25 315 | $GPRMC,200733.3,A,3331.1538,N,11737.4332,W,37.40,263.80,300110,,*23 316 | $GPRMC,200736.3,A,3331.1502,N,11737.4710,W,38.70,263.30,300110,,*2C 317 | $GPRMC,200739.3,A,3331.1459,N,11737.5100,W,40.20,262.10,300110,,*23 318 | $GPRMC,200742.3,A,3331.1408,N,11737.5507,W,41.30,260.00,300110,,*2B 319 | $GPRMC,200745.3,A,3331.1320,N,11737.5906,W,41.60,250.90,300110,,*23 320 | $GPRMC,200748.3,A,3331.1192,N,11737.6293,W,42.60,244.80,300110,,*26 321 | $GPRMC,200751.3,A,3331.1015,N,11737.6667,W,43.40,236.70,300110,,*26 322 | $GPRMC,200754.3,A,3331.0803,N,11737.7032,W,45.50,235.10,300110,,*28 323 | $GPRMC,200757.3,A,3331.0560,N,11737.7385,W,46.30,232.70,300110,,*28 324 | $GPRMC,200800.3,A,3331.0327,N,11737.7728,W,45.30,231.70,300110,,*23 325 | $GPRMC,200803.3,A,3331.0075,N,11737.8061,W,45.10,231.00,300110,,*24 326 | $GPRMC,200806.3,A,3330.9847,N,11737.8407,W,43.50,231.30,300110,,*25 327 | $GPRMC,200809.3,A,3330.9631,N,11737.8724,W,42.70,232.40,300110,,*20 328 | $GPRMC,200812.3,A,3330.9428,N,11737.9068,W,42.30,234.30,300110,,*2B 329 | $GPRMC,200815.3,A,3330.9220,N,11737.9390,W,40.00,233.20,300110,,*21 330 | $GPRMC,200818.3,A,3330.9056,N,11737.9708,W,38.80,236.50,300110,,*2F 331 | $GPRMC,200821.3,A,3330.8921,N,11738.0061,W,38.40,247.90,300110,,*25 332 | $GPRMC,200824.3,A,3330.8798,N,11738.0422,W,39.40,250.50,300110,,*24 333 | $GPRMC,200827.3,A,3330.8685,N,11738.0790,W,38.60,250.20,300110,,*24 334 | $GPRMC,200830.3,A,3330.8586,N,11738.1141,W,36.30,250.70,300110,,*27 335 | $GPRMC,200833.3,A,3330.8490,N,11738.1479,W,34.80,248.10,300110,,*2A 336 | $GPRMC,200836.3,A,3330.8373,N,11738.1784,W,33.80,242.90,300110,,*21 337 | $GPRMC,200839.3,A,3330.8232,N,11738.2082,W,34.40,239.00,300110,,*26 338 | $GPRMC,200842.3,A,3330.8080,N,11738.2379,W,34.90,238.10,300110,,*2B 339 | $GPRMC,200845.3,A,3330.7944,N,11738.2684,W,35.10,244.30,300110,,*25 340 | $GPRMC,200848.3,A,3330.7828,N,11738.3008,W,36.10,248.90,300110,,*25 341 | $GPRMC,200851.3,A,3330.7731,N,11738.3347,W,35.70,253.90,300110,,*2D 342 | $GPRMC,200854.3,A,3330.7653,N,11738.3688,W,34.90,255.50,300110,,*2E 343 | $GPRMC,200857.3,A,3330.7594,N,11738.4025,W,34.20,254.80,300110,,*24 344 | $GPRMC,200900.3,A,3330.7504,N,11738.4359,W,34.40,252.90,300110,,*27 345 | $GPRMC,200903.3,A,3330.7401,N,11738.4693,W,37.30,248.70,300110,,*22 346 | $GPRMC,200906.3,A,3330.7266,N,11738.5053,W,40.30,245.70,300110,,*26 347 | $GPRMC,200909.3,A,3330.7117,N,11738.5410,W,39.70,241.40,300110,,*22 348 | $GPRMC,200912.3,A,3330.6946,N,11738.5761,W,39.90,239.30,300110,,*26 349 | $GPRMC,200915.3,A,3330.6770,N,11738.6107,W,39.50,238.00,300110,,*21 350 | $GPRMC,200918.3,A,3330.6603,N,11738.6435,W,39.00,237.80,300110,,*2F 351 | $GPRMC,200921.3,A,3330.6429,N,11738.6766,W,39.90,238.00,300110,,*24 352 | $GPRMC,200924.3,A,3330.6245,N,11738.7091,W,40.20,237.70,300110,,*2E 353 | $GPRMC,200927.3,A,3330.6063,N,11738.7433,W,40.40,238.30,300110,,*2A 354 | $GPRMC,200930.3,A,3330.5880,N,11738.7776,W,40.40,237.40,300110,,*20 355 | $GPRMC,200933.3,A,3330.5681,N,11738.8118,W,41.10,234.40,300110,,*2A 356 | $GPRMC,200936.3,A,3330.5487,N,11738.8440,W,40.30,233.50,300110,,*26 357 | $GPRMC,200939.3,A,3330.5290,N,11738.8759,W,39.40,232.50,300110,,*2A 358 | $GPRMC,200942.3,A,3330.5094,N,11738.9097,W,40.60,235.30,300110,,*29 359 | $GPRMC,200945.3,A,3330.4901,N,11738.9437,W,41.50,236.00,300110,,*26 360 | $GPRMC,200948.3,A,3330.4709,N,11738.9764,W,40.70,234.90,300110,,*20 361 | $GPRMC,200951.3,A,3330.4499,N,11739.0068,W,39.70,233.40,300110,,*25 362 | $GPRMC,200954.3,A,3330.4305,N,11739.0368,W,37.70,231.30,300110,,*2A 363 | $GPRMC,200957.3,A,3330.4077,N,11739.0641,W,36.80,225.60,300110,,*2F 364 | $GPRMC,201000.3,A,3330.3827,N,11739.0845,W,35.20,214.50,300110,,*2D 365 | $GPRMC,201003.3,A,3330.3566,N,11739.1015,W,34.40,207.90,300110,,*23 366 | $GPRMC,201006.3,A,3330.3309,N,11739.1184,W,35.50,212.00,300110,,*2D 367 | $GPRMC,201009.3,A,3330.3067,N,11739.1393,W,37.60,217.00,300110,,*29 368 | $GPRMC,201012.3,A,3330.2819,N,11739.1635,W,39.30,221.10,300110,,*25 369 | $GPRMC,201015.3,A,3330.2618,N,11739.1931,W,38.10,233.90,300110,,*2E 370 | $GPRMC,201018.3,A,3330.2458,N,11739.2245,W,36.10,241.10,300110,,*2D 371 | $GPRMC,201021.3,A,3330.2340,N,11739.2529,W,30.20,244.30,300110,,*26 372 | $GPRMC,201024.3,A,3330.2259,N,11739.2733,W,22.50,241.80,300110,,*29 373 | $GPRMC,201027.3,A,3330.2257,N,11739.2805,W,10.00,267.00,300110,,*26 374 | $GPRMC,201106.3,A,3330.2227,N,11739.2835,W,10.00,236.40,300110,,*20 375 | $GPRMC,201109.3,A,3330.2171,N,11739.3031,W,18.50,248.30,300110,,*21 376 | $GPRMC,201112.3,A,3330.2105,N,11739.3248,W,26.20,249.00,300110,,*2C 377 | $GPRMC,201115.3,A,3330.2019,N,11739.3517,W,27.80,249.00,300110,,*21 378 | $GPRMC,201118.3,A,3330.1935,N,11739.3779,W,28.40,249.60,300110,,*27 379 | $GPRMC,201121.3,A,3330.1856,N,11739.4038,W,27.00,249.80,300110,,*29 380 | $GPRMC,201124.3,A,3330.1782,N,11739.4281,W,23.60,250.60,300110,,*2E 381 | $GPRMC,201127.3,A,3330.1725,N,11739.4482,W,19.80,251.60,300110,,*23 382 | $GPRMC,201130.3,A,3330.1687,N,11739.4629,W,10.70,251.30,300110,,*2C 383 | $GPRMC,201139.3,A,3330.1696,N,11739.4740,W,9.20,305.30,300110,,*16 384 | $GPRMC,201142.3,A,3330.1804,N,11739.4778,W,16.60,344.20,300110,,*2A 385 | $GPRMC,201145.3,A,3330.1943,N,11739.4825,W,17.70,343.30,300110,,*2E 386 | $GPRMC,201148.3,A,3330.2157,N,11739.4905,W,28.20,341.60,300110,,*20 387 | $GPRMC,201151.3,A,3330.2392,N,11739.5004,W,29.30,340.60,300110,,*2B 388 | $GPRMC,201154.3,A,3330.2643,N,11739.5109,W,33.80,339.20,300110,,*21 389 | $GPRMC,201157.3,A,3330.2922,N,11739.5243,W,38.30,338.30,300110,,*27 390 | $GPRMC,201200.3,A,3330.3220,N,11739.5376,W,39.20,339.80,300110,,*23 391 | $GPRMC,201203.3,A,3330.3540,N,11739.5519,W,42.70,340.00,300110,,*21 392 | $GPRMC,201206.3,A,3330.3893,N,11739.5671,W,46.50,340.10,300110,,*2D 393 | $GPRMC,201209.3,A,3330.4268,N,11739.5833,W,48.50,340.60,300110,,*2A 394 | $GPRMC,201212.3,A,3330.4649,N,11739.5994,W,48.40,340.30,300110,,*2F 395 | $GPRMC,201215.3,A,3330.5035,N,11739.6158,W,50.40,340.30,300110,,*26 396 | $GPRMC,201218.3,A,3330.5440,N,11739.6330,W,51.70,340.40,300110,,*24 397 | $GPRMC,201221.3,A,3330.5853,N,11739.6502,W,52.20,341.00,300110,,*24 398 | $GPRMC,201224.3,A,3330.6269,N,11739.6679,W,53.00,339.80,300110,,*2A 399 | $GPRMC,201227.3,A,3330.6686,N,11739.6863,W,53.50,340.20,300110,,*28 400 | $GPRMC,201230.3,A,3330.7109,N,11739.7041,W,54.10,340.50,300110,,*22 401 | $GPRMC,201233.3,A,3330.7534,N,11739.7218,W,54.30,340.50,300110,,*27 402 | $GPRMC,201236.3,A,3330.7962,N,11739.7405,W,54.90,340.20,300110,,*2A 403 | $GPRMC,201239.3,A,3330.8396,N,11739.7589,W,55.10,340.80,300110,,*2D 404 | $GPRMC,201242.3,A,3330.8831,N,11739.7775,W,55.10,340.40,300110,,*2A 405 | $GPRMC,201245.3,A,3330.9258,N,11739.7958,W,54.30,340.50,300110,,*2A 406 | $GPRMC,201248.3,A,3330.9686,N,11739.8144,W,54.20,340.50,300110,,*2B 407 | $GPRMC,201251.3,A,3331.0112,N,11739.8324,W,54.50,340.20,300110,,*25 408 | $GPRMC,201254.3,A,3331.0541,N,11739.8509,W,54.90,340.20,300110,,*27 409 | $GPRMC,201257.3,A,3331.0978,N,11739.8692,W,55.20,340.40,300110,,*2F 410 | $GPRMC,201300.3,A,3331.1413,N,11739.8878,W,55.60,340.00,300110,,*27 411 | $GPRMC,201303.3,A,3331.1854,N,11739.9068,W,55.90,340.20,300110,,*2E 412 | $GPRMC,201306.3,A,3331.2294,N,11739.9259,W,56.50,340.10,300110,,*22 413 | $GPRMC,201309.3,A,3331.2736,N,11739.9445,W,56.40,340.30,300110,,*28 414 | $GPRMC,201312.3,A,3331.3182,N,11739.9634,W,56.50,340.50,300110,,*29 415 | $GPRMC,201315.3,A,3331.3627,N,11739.9818,W,55.80,340.60,300110,,*2B 416 | $GPRMC,201318.3,A,3331.4062,N,11740.0003,W,54.60,340.50,300110,,*2F 417 | $GPRMC,201321.3,A,3331.4485,N,11740.0185,W,54.10,340.30,300110,,*26 418 | $GPRMC,201324.3,A,3331.4908,N,11740.0379,W,55.10,336.90,300110,,*20 419 | $GPRMC,201327.3,A,3331.5326,N,11740.0621,W,56.10,331.90,300110,,*28 420 | $GPRMC,201330.3,A,3331.5733,N,11740.0909,W,56.90,327.10,300110,,*2C 421 | $GPRMC,201333.3,A,3331.6115,N,11740.1235,W,56.10,323.00,300110,,*26 422 | $GPRMC,201336.3,A,3331.6475,N,11740.1605,W,56.70,317.10,300110,,*27 423 | $GPRMC,201339.3,A,3331.6802,N,11740.2014,W,56.90,312.80,300110,,*23 424 | $GPRMC,201342.3,A,3331.7102,N,11740.2445,W,56.50,309.60,300110,,*2F 425 | $GPRMC,201345.3,A,3331.7388,N,11740.2869,W,54.80,309.10,300110,,*22 426 | $GPRMC,201348.3,A,3331.7675,N,11740.3278,W,53.90,310.20,300110,,*2E 427 | $GPRMC,201351.3,A,3331.7975,N,11740.3681,W,51.80,312.60,300110,,*2E 428 | $GPRMC,201354.3,A,3331.8320,N,11740.4035,W,54.40,323.40,300110,,*29 429 | $GPRMC,201357.3,A,3331.8704,N,11740.4339,W,56.20,329.70,300110,,*2A 430 | $GPRMC,201400.3,A,3331.9121,N,11740.4563,W,54.30,339.90,300110,,*2A 431 | $GPRMC,201403.3,A,3331.9559,N,11740.4711,W,54.20,347.20,300110,,*26 432 | $GPRMC,201406.3,A,3332.0004,N,11740.4804,W,54.30,351.90,300110,,*22 433 | $GPRMC,201409.3,A,3332.0453,N,11740.4810,W,54.70,0.10,300110,,*25 434 | $GPRMC,201412.3,A,3332.0919,N,11740.4806,W,55.80,1.70,300110,,*22 435 | $GPRMC,201415.3,A,3332.1389,N,11740.4783,W,56.80,2.70,300110,,*25 436 | $GPRMC,201418.3,A,3332.1861,N,11740.4724,W,56.80,5.80,300110,,*20 437 | $GPRMC,201421.3,A,3332.2371,N,11740.4667,W,59.60,6.60,300110,,*29 438 | $GPRMC,201424.3,A,3332.2898,N,11740.4584,W,61.80,8.80,300110,,*2B 439 | $GPRMC,201427.3,A,3332.3409,N,11740.4490,W,61.50,10.20,300110,,*17 440 | $GPRMC,201430.3,A,3332.3916,N,11740.4382,W,61.10,10.50,300110,,*15 441 | $GPRMC,201433.3,A,3332.4411,N,11740.4267,W,60.20,10.30,300110,,*15 442 | $GPRMC,201436.3,A,3332.4904,N,11740.4161,W,59.60,9.40,300110,,*2D 443 | $GPRMC,201439.3,A,3332.5391,N,11740.4096,W,59.20,6.40,300110,,*27 444 | $GPRMC,201442.3,A,3332.5878,N,11740.4045,W,57.90,6.10,300110,,*29 445 | $GPRMC,201445.3,A,3332.6349,N,11740.3964,W,57.50,9.70,300110,,*2C 446 | $GPRMC,201448.3,A,3332.6812,N,11740.3871,W,56.30,9.50,300110,,*24 447 | $GPRMC,201451.3,A,3332.7280,N,11740.3784,W,57.30,8.80,300110,,*24 448 | $GPRMC,201454.3,A,3332.7744,N,11740.3697,W,56.30,7.80,300110,,*21 449 | $GPRMC,201457.3,A,3332.8207,N,11740.3640,W,55.80,5.00,300110,,*27 450 | $GPRMC,201500.3,A,3332.8679,N,11740.3595,W,56.70,4.70,300110,,*28 451 | $GPRMC,201503.3,A,3332.9174,N,11740.3532,W,60.10,7.30,300110,,*29 452 | $GPRMC,201506.3,A,3332.9665,N,11740.3545,W,59.20,1.10,300110,,*26 453 | $GPRMC,201509.3,A,3333.0162,N,11740.3560,W,59.30,359.20,300110,,*2A 454 | $GPRMC,201512.3,A,3333.0665,N,11740.3574,W,60.30,358.90,300110,,*25 455 | $GPRMC,201517.3,A,3333.1504,N,11740.3598,W,60.90,359.00,300110,,*25 456 | $GPRMC,201520.3,A,3333.2010,N,11740.3609,W,61.00,359.10,300110,,*20 457 | $GPRMC,201523.3,A,3333.2520,N,11740.3620,W,61.00,358.60,300110,,*28 458 | $GPRMC,201526.3,A,3333.3029,N,11740.3639,W,61.20,358.00,300110,,*2C 459 | $GPRMC,201529.3,A,3333.3537,N,11740.3666,W,61.00,357.40,300110,,*2A 460 | $GPRMC,201532.3,A,3333.4022,N,11740.3681,W,58.70,358.00,300110,,*29 461 | $GPRMC,201535.3,A,3333.4514,N,11740.3699,W,58.20,357.90,300110,,*24 462 | $GPRMC,201538.3,A,3333.5024,N,11740.3730,W,60.50,358.00,300110,,*26 463 | $GPRMC,201541.3,A,3333.5526,N,11740.3733,W,61.10,0.30,300110,,*24 464 | $GPRMC,201544.3,A,3333.6034,N,11740.3717,W,62.10,2.40,300110,,*24 465 | $GPRMC,201547.3,A,3333.6521,N,11740.3681,W,60.20,3.20,300110,,*2E 466 | $GPRMC,201550.3,A,3333.6991,N,11740.3626,W,58.00,4.40,300110,,*2A 467 | $GPRMC,201553.3,A,3333.7469,N,11740.3570,W,57.90,6.70,300110,,*25 468 | $GPRMC,201556.3,A,3333.7948,N,11740.3512,W,56.60,6.10,300110,,*22 469 | $GPRMC,201559.3,A,3333.8420,N,11740.3447,W,56.00,7.10,300110,,*27 470 | $GPRMC,201602.3,A,3333.8892,N,11740.3379,W,56.20,6.40,300110,,*23 471 | $GPRMC,201605.3,A,3333.9358,N,11740.3315,W,56.50,6.20,300110,,*23 472 | $GPRMC,201608.3,A,3333.9823,N,11740.3265,W,56.40,6.50,300110,,*29 473 | $GPRMC,201611.3,A,3334.0281,N,11740.3193,W,55.30,5.70,300110,,*22 474 | $GPRMC,201614.3,A,3334.0744,N,11740.3143,W,55.60,5.50,300110,,*21 475 | $GPRMC,201617.3,A,3334.1207,N,11740.3090,W,55.70,4.90,300110,,*22 476 | $GPRMC,201620.3,A,3334.1670,N,11740.3067,W,55.00,1.80,300110,,*29 477 | $GPRMC,201623.3,A,3334.2122,N,11740.3054,W,54.90,0.50,300110,,*2D 478 | $GPRMC,201626.3,A,3334.2572,N,11740.3048,W,55.50,0.00,300110,,*2C 479 | $GPRMC,201629.3,A,3334.3026,N,11740.3062,W,56.10,0.20,300110,,*2B 480 | $GPRMC,201632.3,A,3334.3519,N,11740.3051,W,56.40,359.80,300110,,*28 481 | $GPRMC,201635.3,A,3334.3993,N,11740.3026,W,56.40,1.00,300110,,*27 482 | $GPRMC,201638.3,A,3334.4438,N,11740.3026,W,54.80,0.20,300110,,*2C 483 | $GPRMC,201641.3,A,3334.4894,N,11740.3017,W,54.80,0.50,300110,,*2D 484 | $GPRMC,201644.3,A,3334.5349,N,11740.3012,W,54.20,1.00,300110,,*29 485 | $GPRMC,201647.3,A,3334.5798,N,11740.3009,W,54.70,0.00,300110,,*2C 486 | $GPRMC,201650.3,A,3334.6243,N,11740.2995,W,53.90,0.50,300110,,*2B 487 | $GPRMC,201653.3,A,3334.6698,N,11740.2988,W,54.50,0.80,300110,,*20 488 | $GPRMC,201656.3,A,3334.7147,N,11740.2990,W,55.20,0.60,300110,,*20 489 | $GPRMC,201659.3,A,3334.7615,N,11740.2985,W,56.50,0.20,300110,,*2B 490 | $GPRMC,201702.3,A,3334.8081,N,11740.2972,W,55.80,0.20,300110,,*26 491 | $GPRMC,201705.3,A,3334.8545,N,11740.2944,W,55.60,2.10,300110,,*26 492 | $GPRMC,201708.3,A,3334.9023,N,11740.2955,W,57.70,0.70,300110,,*28 493 | $GPRMC,201711.3,A,3334.9513,N,11740.2950,W,58.50,0.60,300110,,*2F 494 | $GPRMC,201714.3,A,3335.0006,N,11740.2937,W,59.30,0.60,300110,,*25 495 | $GPRMC,201717.3,A,3335.0503,N,11740.2933,W,59.50,0.60,300110,,*24 496 | $GPRMC,201720.3,A,3335.1002,N,11740.2924,W,59.80,1.00,300110,,*29 497 | $GPRMC,201723.3,A,3335.1507,N,11740.2909,W,59.70,0.80,300110,,*23 498 | $GPRMC,201726.3,A,3335.2006,N,11740.2903,W,59.00,1.40,300110,,*21 499 | $GPRMC,201729.3,A,3335.2495,N,11740.2899,W,58.60,0.50,300110,,*25 500 | $GPRMC,201732.3,A,3335.2980,N,11740.2893,W,58.80,0.80,300110,,*2F 501 | $GPRMC,201735.3,A,3335.3474,N,11740.2882,W,59.00,0.70,300110,,*29 502 | $GPRMC,201738.3,A,3335.3960,N,11740.2884,W,58.10,359.90,300110,,*2B 503 | $GPRMC,201741.3,A,3335.4439,N,11740.2881,W,57.30,358.40,300110,,*27 504 | $GPRMC,201744.3,A,3335.4913,N,11740.2917,W,56.90,356.20,300110,,*2A 505 | $GPRMC,201747.3,A,3335.5370,N,11740.3023,W,55.30,348.80,300110,,*24 506 | $GPRMC,201750.3,A,3335.5816,N,11740.3158,W,52.20,346.50,300110,,*21 507 | $GPRMC,201753.3,A,3335.6250,N,11740.3354,W,53.50,338.60,300110,,*2B 508 | $GPRMC,201756.3,A,3335.6665,N,11740.3595,W,54.60,333.50,300110,,*2B 509 | $GPRMC,201759.3,A,3335.7062,N,11740.3879,W,55.00,326.70,300110,,*2A 510 | $GPRMC,201802.3,A,3335.7442,N,11740.4205,W,55.30,324.40,300110,,*29 511 | $GPRMC,201805.3,A,3335.7804,N,11740.4544,W,54.60,320.20,300110,,*24 512 | $GPRMC,201808.3,A,3335.8152,N,11740.4913,W,55.80,317.90,300110,,*22 513 | $GPRMC,201811.3,A,3335.8486,N,11740.5304,W,56.20,313.80,300110,,*27 514 | $GPRMC,201814.3,A,3335.8797,N,11740.5717,W,55.70,311.30,300110,,*28 515 | $GPRMC,201817.3,A,3335.9082,N,11740.6154,W,55.70,306.70,300110,,*29 516 | $GPRMC,201820.3,A,3335.9350,N,11740.6613,W,54.80,305.30,300110,,*2C 517 | $GPRMC,201823.3,A,3335.9564,N,11740.7142,W,58.40,296.10,300110,,*25 518 | $GPRMC,201826.3,A,3335.9762,N,11740.7691,W,59.90,295.30,300110,,*20 519 | $GPRMC,201829.3,A,3335.9967,N,11740.8235,W,60.50,294.40,300110,,*21 520 | $GPRMC,201832.3,A,3336.0180,N,11740.8802,W,62.60,294.50,300110,,*2E 521 | $GPRMC,201835.3,A,3336.0393,N,11740.9357,W,60.40,294.60,300110,,*20 522 | $GPRMC,201838.3,A,3336.0623,N,11740.9903,W,61.40,294.90,300110,,*26 523 | $GPRMC,201841.3,A,3336.0840,N,11741.0447,W,61.20,295.10,300110,,*29 524 | $GPRMC,201844.3,A,3336.1058,N,11741.1013,W,61.60,294.20,300110,,*2E 525 | $GPRMC,201847.3,A,3336.1270,N,11741.1566,W,60.80,294.10,300110,,*2E 526 | $GPRMC,201850.3,A,3336.1498,N,11741.2114,W,60.80,299.00,300110,,*26 527 | $GPRMC,201853.3,A,3336.1759,N,11741.2636,W,61.00,302.30,300110,,*25 528 | $GPRMC,201856.3,A,3336.2037,N,11741.3152,W,62.20,303.70,300110,,*2C 529 | $GPRMC,201859.3,A,3336.2349,N,11741.3621,W,60.20,309.50,300110,,*20 530 | $GPRMC,201902.3,A,3336.2665,N,11741.4083,W,59.30,308.80,300110,,*2A 531 | $GPRMC,201905.3,A,3336.2982,N,11741.4556,W,61.60,308.10,300110,,*21 532 | $GPRMC,201908.3,A,3336.3291,N,11741.5051,W,62.20,306.10,300110,,*2E 533 | $GPRMC,201911.3,A,3336.3594,N,11741.5565,W,62.90,304.00,300110,,*2E 534 | $GPRMC,201914.3,A,3336.3878,N,11741.6103,W,63.20,301.70,300110,,*2B 535 | $GPRMC,201917.3,A,3336.4150,N,11741.6640,W,63.50,299.50,300110,,*29 536 | $GPRMC,201920.3,A,3336.4405,N,11741.7197,W,63.40,298.50,300110,,*24 537 | $GPRMC,201923.3,A,3336.4649,N,11741.7752,W,62.60,298.20,300110,,*26 538 | $GPRMC,201926.3,A,3336.4895,N,11741.8295,W,61.70,300.10,300110,,*2C 539 | $GPRMC,201929.3,A,3336.5112,N,11741.8823,W,59.30,297.90,300110,,*2B 540 | $GPRMC,201932.3,A,3336.5344,N,11741.9374,W,60.50,297.50,300110,,*28 541 | $GPRMC,201935.3,A,3336.5571,N,11741.9917,W,60.60,296.80,300110,,*2F 542 | $GPRMC,201938.3,A,3336.5816,N,11742.0453,W,61.00,300.40,300110,,*2C 543 | $GPRMC,201941.3,A,3336.6082,N,11742.0974,W,61.60,302.80,300110,,*24 544 | $GPRMC,201944.3,A,3336.6380,N,11742.1468,W,62.10,306.40,300110,,*2D 545 | $GPRMC,201947.3,A,3336.6711,N,11742.1933,W,62.60,310.20,300110,,*27 546 | $GPRMC,201950.3,A,3336.7063,N,11742.2382,W,62.40,315.00,300110,,*24 547 | $GPRMC,201953.3,A,3336.7445,N,11742.2859,W,67.90,313.30,300110,,*27 548 | $GPRMC,201956.3,A,3336.7816,N,11742.3290,W,62.10,315.70,300110,,*29 549 | $GPRMC,201959.3,A,3336.8187,N,11742.3720,W,61.70,315.70,300110,,*23 550 | $GPRMC,202002.3,A,3336.8545,N,11742.4147,W,60.90,315.60,300110,,*23 551 | $GPRMC,202005.3,A,3336.8909,N,11742.4568,W,60.50,315.40,300110,,*27 552 | $GPRMC,202008.3,A,3336.9269,N,11742.4993,W,60.20,316.60,300110,,*28 553 | $GPRMC,202011.3,A,3336.9635,N,11742.5399,W,59.00,316.70,300110,,*25 554 | $GPRMC,202014.3,A,3337.0010,N,11742.5786,W,59.10,321.70,300110,,*26 555 | $GPRMC,202017.3,A,3337.0410,N,11742.6142,W,60.30,322.80,300110,,*28 556 | $GPRMC,202020.3,A,3337.0811,N,11742.6508,W,60.60,322.20,300110,,*24 557 | $GPRMC,202023.3,A,3337.1213,N,11742.6876,W,61.10,322.40,300110,,*2A 558 | $GPRMC,202026.3,A,3337.1621,N,11742.7248,W,61.90,322.30,300110,,*23 559 | $GPRMC,202029.3,A,3337.2031,N,11742.7626,W,62.80,322.40,300110,,*21 560 | $GPRMC,202032.3,A,3337.2443,N,11742.8010,W,62.20,321.90,300110,,*22 561 | $GPRMC,202035.3,A,3337.2858,N,11742.8407,W,63.00,321.20,300110,,*29 562 | $GPRMC,202038.3,A,3337.3260,N,11742.8791,W,61.10,320.90,300110,,*21 563 | $GPRMC,202041.3,A,3337.3694,N,11742.9180,W,61.60,321.90,300110,,*21 564 | $GPRMC,202044.3,A,3337.4098,N,11742.9551,W,61.70,322.30,300110,,*29 565 | $GPRMC,202047.3,A,3337.4508,N,11742.9925,W,61.20,322.60,300110,,*29 566 | $GPRMC,202050.3,A,3337.4919,N,11743.0297,W,61.80,322.10,300110,,*24 567 | $GPRMC,202053.3,A,3337.5332,N,11743.0672,W,62.80,322.50,300110,,*2D 568 | $GPRMC,202056.3,A,3337.5752,N,11743.1054,W,63.70,322.20,300110,,*20 569 | $GPRMC,202059.3,A,3337.6175,N,11743.1439,W,64.20,322.50,300110,,*25 570 | $GPRMC,202102.3,A,3337.6601,N,11743.1831,W,64.80,322.30,300110,,*26 571 | $GPRMC,202105.3,A,3337.7030,N,11743.2235,W,65.70,321.80,300110,,*2F 572 | $GPRMC,202108.3,A,3337.7462,N,11743.2642,W,65.60,322.40,300110,,*2B 573 | $GPRMC,202111.3,A,3337.7889,N,11743.3048,W,65.50,319.90,300110,,*21 574 | $GPRMC,202114.3,A,3337.8294,N,11743.3488,W,65.80,315.40,300110,,*29 575 | $GPRMC,202117.3,A,3337.8683,N,11743.3961,W,67.10,314.40,300110,,*28 576 | $GPRMC,202120.3,A,3337.9083,N,11743.4443,W,68.60,315.00,300110,,*2C 577 | $GPRMC,202123.3,A,3337.9492,N,11743.4926,W,69.80,315.50,300110,,*2F 578 | $GPRMC,202126.3,A,3337.9918,N,11743.5402,W,70.00,319.20,300110,,*24 579 | $GPRMC,202129.3,A,3338.0374,N,11743.5840,W,70.00,323.20,300110,,*2E 580 | $GPRMC,202132.3,A,3338.0852,N,11743.6236,W,69.30,326.50,300110,,*2A 581 | $GPRMC,202135.3,A,3338.1333,N,11743.6615,W,68.70,326.90,300110,,*2C 582 | $GPRMC,202138.3,A,3338.1814,N,11743.6983,W,67.70,326.80,300110,,*21 583 | $GPRMC,202141.3,A,3338.2286,N,11743.7355,W,67.00,326.80,300110,,*2A 584 | $GPRMC,202144.3,A,3338.2751,N,11743.7726,W,66.30,326.80,300110,,*22 585 | $GPRMC,202147.3,A,3338.3211,N,11743.8088,W,65.80,326.60,300110,,*2B 586 | $GPRMC,202150.3,A,3338.3673,N,11743.8447,W,66.10,326.40,300110,,*22 587 | $GPRMC,202153.3,A,3338.4133,N,11743.8812,W,66.30,326.40,300110,,*2B 588 | $GPRMC,202156.3,A,3338.4596,N,11743.9178,W,66.60,325.70,300110,,*24 589 | $GPRMC,202159.3,A,3338.5052,N,11743.9553,W,66.90,325.70,300110,,*25 590 | $GPRMC,202202.3,A,3338.5507,N,11743.9939,W,67.20,324.90,300110,,*28 591 | $GPRMC,202205.3,A,3338.5978,N,11744.0328,W,67.90,325.50,300110,,*29 592 | $GPRMC,202208.3,A,3338.6431,N,11744.0695,W,66.80,326.70,300110,,*25 593 | $GPRMC,202211.3,A,3338.6900,N,11744.1058,W,66.30,325.60,300110,,*2D 594 | $GPRMC,202214.3,A,3338.7381,N,11744.1420,W,67.20,326.50,300110,,*21 595 | $GPRMC,202217.3,A,3338.7856,N,11744.1797,W,67.20,326.30,300110,,*2A 596 | $GPRMC,202220.3,A,3338.8336,N,11744.2163,W,67.50,327.30,300110,,*24 597 | $GPRMC,202223.3,A,3338.8806,N,11744.2528,W,65.90,326.60,300110,,*2E 598 | $GPRMC,202226.3,A,3338.9258,N,11744.2884,W,64.30,326.70,300110,,*2A 599 | $GPRMC,202229.3,A,3338.9708,N,11744.3244,W,65.00,327.10,300110,,*27 600 | $GPRMC,202232.3,A,3339.0157,N,11744.3588,W,63.00,327.00,300110,,*29 601 | $GPRMC,202235.3,A,3339.0580,N,11744.3913,W,55.90,326.60,300110,,*25 602 | $GPRMC,202238.3,A,3339.0930,N,11744.4189,W,45.80,326.80,300110,,*2D 603 | $GPRMC,202241.3,A,3339.1238,N,11744.4428,W,43.10,327.70,300110,,*2E 604 | $GPRMC,202244.3,A,3339.1542,N,11744.4648,W,42.00,330.10,300110,,*25 605 | $GPRMC,202247.3,A,3339.1846,N,11744.4849,W,41.30,331.30,300110,,*23 606 | $GPRMC,202250.3,A,3339.2148,N,11744.5043,W,40.30,332.00,300110,,*23 607 | $GPRMC,202253.3,A,3339.2445,N,11744.5201,W,37.90,341.90,300110,,*2B 608 | $GPRMC,202256.3,A,3339.2738,N,11744.5277,W,34.60,352.30,300110,,*22 609 | $GPRMC,202259.3,A,3339.3014,N,11744.5237,W,31.40,6.90,300110,,*2E 610 | $GPRMC,202302.3,A,3339.3287,N,11744.5188,W,33.00,7.50,300110,,*25 611 | $GPRMC,202305.3,A,3339.3448,N,11744.5162,W,21.20,8.60,300110,,*2E 612 | $GPRMC,202314.3,A,3339.3477,N,11744.5155,W,8.90,3.80,300110,,*13 613 | $GPRMC,202317.3,A,3339.3542,N,11744.5197,W,13.70,322.90,300110,,*2C 614 | $GPRMC,202320.3,A,3339.3574,N,11744.5335,W,16.20,279.70,300110,,*26 615 | $GPRMC,202323.3,A,3339.3578,N,11744.5539,W,21.70,275.40,300110,,*2D 616 | $GPRMC,202326.3,A,3339.3542,N,11744.5856,W,31.30,264.20,300110,,*26 617 | $GPRMC,202330.3,A,3339.3492,N,11744.6255,W,29.20,262.70,300110,,*2C 618 | $GPRMC,202333.3,A,3339.3468,N,11744.6522,W,23.50,262.50,300110,,*22 619 | $GPRMC,202336.3,A,3339.3442,N,11744.6728,W,20.30,262.10,300110,,*26 620 | $GPRMC,202339.3,A,3339.3410,N,11744.6937,W,21.00,259.50,300110,,*20 621 | $GPRMC,202342.3,A,3339.3374,N,11744.7198,W,28.80,264.00,300110,,*2F 622 | $GPRMC,202345.3,A,3339.3337,N,11744.7507,W,30.90,262.80,300110,,*2B 623 | $GPRMC,202348.3,A,3339.3317,N,11744.7835,W,32.00,264.70,300110,,*2A 624 | $GPRMC,202351.3,A,3339.3299,N,11744.8157,W,33.40,266.40,300110,,*23 625 | $GPRMC,202354.3,A,3339.3285,N,11744.8492,W,34.20,267.10,300110,,*22 626 | $GPRMC,202357.3,A,3339.3278,N,11744.8833,W,33.50,270.90,300110,,*2A 627 | $GPRMC,202400.3,A,3339.3278,N,11744.9121,W,25.40,268.80,300110,,*2A 628 | $GPRMC,202403.3,A,3339.3275,N,11744.9281,W,12.70,264.20,300110,,*2C 629 | $GPRMC,202406.3,A,3339.3344,N,11744.9302,W,10.00,339.70,300110,,*29 630 | $GPRMC,202409.3,A,3339.3491,N,11744.9310,W,18.70,357.30,300110,,*29 631 | $GPRMC,202412.3,A,3339.3708,N,11744.9318,W,27.00,355.70,300110,,*25 632 | $GPRMC,202415.3,A,3339.3957,N,11744.9344,W,30.00,353.50,300110,,*2D 633 | $GPRMC,202418.3,A,3339.4201,N,11744.9398,W,30.80,348.70,300110,,*2E 634 | $GPRMC,202421.3,A,3339.4442,N,11744.9482,W,29.80,346.10,300110,,*29 635 | $GPRMC,202424.3,A,3339.4622,N,11744.9521,W,23.30,349.10,300110,,*2E 636 | $GPRMC,202433.3,A,3339.4604,N,11744.9555,W,5.40,333.20,300110,,*12 637 | $GPRMC,202436.3,A,3339.4685,N,11744.9593,W,9.80,339.10,300110,,*1D 638 | $GPRMC,202439.3,A,3339.4877,N,11744.9662,W,20.60,339.40,300110,,*2C 639 | $GPRMC,202442.3,A,3339.5046,N,11744.9740,W,22.20,336.60,300110,,*21 640 | $GPRMC,202445.3,A,3339.5218,N,11744.9830,W,20.10,333.10,300110,,*24 641 | $GPRMC,202448.3,A,3339.5345,N,11744.9914,W,14.80,331.60,300110,,*2C 642 | $GPRMC,202509.3,A,3339.5519,N,11745.0044,W,13.80,323.10,300110,,*20 643 | $GPRMC,202512.3,A,3339.5672,N,11745.0147,W,21.10,327.40,300110,,*2F 644 | $GPRMC,202515.3,A,3339.5847,N,11745.0289,W,30.00,324.80,300110,,*2F 645 | $GPRMC,202518.3,A,3339.6060,N,11745.0476,W,32.70,321.80,300110,,*2A 646 | $GPRMC,202521.3,A,3339.6290,N,11745.0736,W,39.70,316.10,300110,,*2C 647 | $GPRMC,202524.3,A,3339.6531,N,11745.1033,W,42.50,311.30,300110,,*2D 648 | $GPRMC,202527.3,A,3339.6761,N,11745.1367,W,43.90,309.60,300110,,*2A 649 | $GPRMC,202530.3,A,3339.6995,N,11745.1709,W,43.90,309.90,300110,,*2A 650 | $GPRMC,202533.3,A,3339.7217,N,11745.2044,W,42.90,308.60,300110,,*2B 651 | $GPRMC,202536.3,A,3339.7442,N,11745.2378,W,43.00,308.90,300110,,*23 652 | $GPRMC,202539.3,A,3339.7670,N,11745.2708,W,41.30,310.10,300110,,*2C 653 | $GPRMC,202542.3,A,3339.7888,N,11745.3015,W,38.20,308.00,300110,,*24 654 | $GPRMC,202545.3,A,3339.8086,N,11745.3314,W,38.40,307.70,300110,,*26 655 | $GPRMC,202548.3,A,3339.8284,N,11745.3624,W,38.90,307.80,300110,,*2F 656 | $GPRMC,202551.3,A,3339.8489,N,11745.3937,W,39.90,309.40,300110,,*22 657 | $GPRMC,202554.3,A,3339.8699,N,11745.4243,W,40.30,309.80,300110,,*23 658 | $GPRMC,202557.3,A,3339.8916,N,11745.4553,W,40.10,310.30,300110,,*2F 659 | $GPRMC,202600.3,A,3339.9125,N,11745.4853,W,38.10,309.40,300110,,*2A 660 | $GPRMC,202603.3,A,3339.9321,N,11745.5140,W,35.70,309.50,300110,,*2F 661 | $GPRMC,202606.3,A,3339.9505,N,11745.5403,W,32.90,310.00,300110,,*2C 662 | $GPRMC,202609.3,A,3339.9674,N,11745.5644,W,30.40,309.80,300110,,*28 663 | $GPRMC,202612.3,A,3339.9834,N,11745.5879,W,31.60,309.50,300110,,*26 664 | $GPRMC,202615.3,A,3340.0005,N,11745.6119,W,31.30,310.50,300110,,*2D 665 | $GPRMC,202618.3,A,3340.0172,N,11745.6367,W,32.10,310.40,300110,,*2A 666 | $GPRMC,202621.3,A,3340.0343,N,11745.6613,W,32.00,310.20,300110,,*21 667 | $GPRMC,202624.3,A,3340.0516,N,11745.6859,W,31.10,310.10,300110,,*23 668 | $GPRMC,202627.3,A,3340.0688,N,11745.7093,W,30.60,310.30,300110,,*2F 669 | $GPRMC,202630.3,A,3340.0860,N,11745.7335,W,33.00,309.80,300110,,*28 670 | $GPRMC,202633.3,A,3340.1043,N,11745.7600,W,35.60,309.70,300110,,*2F 671 | $GPRMC,202636.3,A,3340.1244,N,11745.7880,W,38.00,309.90,300110,,*2C 672 | $GPRMC,202639.3,A,3340.1449,N,11745.8180,W,39.40,309.90,300110,,*2B 673 | $GPRMC,202642.3,A,3340.1654,N,11745.8479,W,39.20,309.60,300110,,*23 674 | $GPRMC,202645.3,A,3340.1863,N,11745.8777,W,39.00,309.70,300110,,*20 675 | $GPRMC,202648.3,A,3340.2072,N,11745.9078,W,39.30,309.60,300110,,*2D 676 | $GPRMC,202651.3,A,3340.2282,N,11745.9380,W,39.00,309.20,300110,,*2B 677 | $GPRMC,202654.3,A,3340.2485,N,11745.9685,W,39.20,310.10,300110,,*26 678 | $GPRMC,202657.3,A,3340.2697,N,11745.9978,W,38.50,310.50,300110,,*2B 679 | $GPRMC,202700.3,A,3340.2906,N,11746.0285,W,38.30,309.80,300110,,*2F 680 | $GPRMC,202703.3,A,3340.3104,N,11746.0569,W,34.70,309.80,300110,,*2A 681 | $GPRMC,202706.3,A,3340.3264,N,11746.0801,W,24.90,310.10,300110,,*27 682 | $GPRMC,202709.3,A,3340.3362,N,11746.0946,W,13.70,309.80,300110,,*26 683 | $GPRMC,202754.3,A,3340.3430,N,11746.1041,W,4.40,289.70,300110,,*12 684 | $GPRMC,202757.3,A,3340.3511,N,11746.1166,W,15.20,309.50,300110,,*2A 685 | $GPRMC,202800.3,A,3340.3676,N,11746.1398,W,29.50,310.30,300110,,*20 686 | $GPRMC,202803.3,A,3340.3846,N,11746.1649,W,31.90,308.90,300110,,*21 687 | $GPRMC,202806.3,A,3340.4027,N,11746.1907,W,33.40,309.50,300110,,*2B 688 | $GPRMC,202809.3,A,3340.4199,N,11746.2169,W,32.90,309.50,300110,,*2F 689 | $GPRMC,202812.3,A,3340.4376,N,11746.2409,W,31.10,309.40,300110,,*2F 690 | $GPRMC,202815.3,A,3340.4537,N,11746.2633,W,28.20,310.40,300110,,*23 691 | $GPRMC,202818.3,A,3340.4681,N,11746.2837,W,25.20,310.10,300110,,*22 692 | $GPRMC,202821.3,A,3340.4812,N,11746.3028,W,24.50,307.50,300110,,*2F 693 | $GPRMC,202824.3,A,3340.4969,N,11746.3249,W,30.50,309.70,300110,,*2B 694 | $GPRMC,202827.3,A,3340.5142,N,11746.3492,W,33.60,311.00,300110,,*26 695 | $GPRMC,202830.3,A,3340.5328,N,11746.3760,W,35.40,308.70,300110,,*2B 696 | $GPRMC,202833.3,A,3340.5529,N,11746.4045,W,39.00,310.60,300110,,*28 697 | $GPRMC,202836.3,A,3340.5689,N,11746.4340,W,35.30,304.30,300110,,*2D 698 | $GPRMC,202839.3,A,3340.5876,N,11746.4628,W,35.50,305.40,300110,,*27 699 | $GPRMC,202842.3,A,3340.6123,N,11746.4923,W,39.10,310.20,300110,,*2F 700 | $GPRMC,202845.3,A,3340.6341,N,11746.5221,W,39.50,309.50,300110,,*2D 701 | $GPRMC,202848.3,A,3340.6552,N,11746.5526,W,39.80,309.50,300110,,*29 702 | $GPRMC,202851.3,A,3340.6766,N,11746.5832,W,40.00,310.20,300110,,*25 703 | $GPRMC,202854.3,A,3340.6973,N,11746.6126,W,37.60,309.70,300110,,*2E 704 | $GPRMC,202857.3,A,3340.7167,N,11746.6403,W,34.80,309.80,300110,,*21 705 | $GPRMC,202900.3,A,3340.7339,N,11746.6654,W,30.00,307.40,300110,,*25 706 | $GPRMC,202903.3,A,3340.7480,N,11746.6879,W,25.70,307.90,300110,,*2C 707 | $GPRMC,202906.3,A,3340.7598,N,11746.7051,W,20.50,309.80,300110,,*2A 708 | $GPRMC,202909.3,A,3340.7671,N,11746.7142,W,11.40,315.70,300110,,*23 709 | $GPRMC,203030.3,A,3340.7709,N,11746.7265,W,9.80,287.50,300110,,*14 710 | $GPRMC,203033.3,A,3340.7657,N,11746.7407,W,13.10,238.60,300110,,*2A 711 | $GPRMC,203036.3,A,3340.7447,N,11746.7612,W,30.50,220.40,300110,,*24 712 | $GPRMC,203039.3,A,3340.7233,N,11746.7827,W,33.70,220.60,300110,,*25 713 | $GPRMC,203042.3,A,3340.7001,N,11746.8058,W,36.10,219.70,300110,,*2D 714 | $GPRMC,203045.3,A,3340.6762,N,11746.8299,W,38.00,219.20,300110,,*2C 715 | $GPRMC,203048.3,A,3340.6514,N,11746.8543,W,37.60,219.40,300110,,*2D 716 | $GPRMC,203051.3,A,3340.6265,N,11746.8788,W,38.80,220.40,300110,,*2A 717 | $GPRMC,203054.3,A,3340.6010,N,11746.9042,W,40.10,220.10,300110,,*2C 718 | $GPRMC,203057.3,A,3340.5751,N,11746.9303,W,40.10,219.20,300110,,*21 719 | $GPRMC,203100.3,A,3340.5483,N,11746.9561,W,41.20,219.00,300110,,*2C 720 | $GPRMC,203103.3,A,3340.5219,N,11746.9826,W,39.50,220.10,300110,,*27 721 | $GPRMC,203106.3,A,3340.4976,N,11747.0072,W,38.00,220.70,300110,,*22 722 | $GPRMC,203109.3,A,3340.4749,N,11747.0315,W,34.70,221.60,300110,,*26 723 | $GPRMC,203112.3,A,3340.4568,N,11747.0495,W,25.20,213.60,300110,,*26 724 | $GPRMC,203115.3,A,3340.4401,N,11747.0636,W,22.10,219.70,300110,,*2B 725 | $GPRMC,203118.3,A,3340.4274,N,11747.0762,W,20.10,220.80,300110,,*25 726 | $GPRMC,203121.3,A,3340.4119,N,11747.0921,W,27.90,220.20,300110,,*2B 727 | $GPRMC,203124.3,A,3340.3935,N,11747.1120,W,31.00,222.40,300110,,*2D 728 | $GPRMC,203127.3,A,3340.3732,N,11747.1317,W,31.70,219.70,300110,,*2D 729 | $GPRMC,203130.3,A,3340.3528,N,11747.1518,W,31.30,220.30,300110,,*21 730 | $GPRMC,203133.3,A,3340.3326,N,11747.1723,W,32.00,220.10,300110,,*22 731 | $GPRMC,203136.3,A,3340.3128,N,11747.1925,W,31.10,220.10,300110,,*21 732 | $GPRMC,203139.3,A,3340.2944,N,11747.2109,W,26.80,219.60,300110,,*2A 733 | $GPRMC,203142.3,A,3340.2785,N,11747.2261,W,21.90,220.50,300110,,*27 734 | $GPRMC,203145.3,A,3340.2666,N,11747.2378,W,16.30,217.40,300110,,*2E 735 | $GPRMC,203148.3,A,3340.2628,N,11747.2417,W,4.80,220.60,300110,,*19 736 | $GPRMC,203151.3,A,3340.2590,N,11747.2455,W,9.80,221.60,300110,,*1B 737 | $GPRMC,203154.3,A,3340.2515,N,11747.2534,W,14.80,220.20,300110,,*2C 738 | $GPRMC,203157.3,A,3340.2419,N,11747.2629,W,14.70,219.70,300110,,*2D 739 | $GPRMC,203200.3,A,3340.2324,N,11747.2729,W,17.20,219.50,300110,,*20 740 | $GPRMC,203203.3,A,3340.2203,N,11747.2848,W,18.60,221.00,300110,,*2A 741 | $GPRMC,203206.3,A,3340.2118,N,11747.2948,W,8.90,222.80,300110,,*12 742 | $GPRMC,203218.3,A,3340.2068,N,11747.3019,W,4.70,221.70,300110,,*19 743 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip100.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,190045.9,A,3343.365608,N,11722.015312,W,67.7,314.8,280510,,,A*40 3 | $GPRMC,190048.9,A,3343.402875,N,11722.066660,W,67.3,311.8,280510,,,A*4A 4 | $GPRMC,190051.9,A,3343.439079,N,11722.118501,W,66.9,309.4,280510,,,A*4C 5 | $GPRMC,190054.9,A,3343.474122,N,11722.167744,W,65.5,307.6,280510,,,A*47 6 | $GPRMC,190057.9,A,3343.503726,N,11722.218558,W,64.4,304.4,280510,,,A*42 7 | $GPRMC,190100.9,A,3343.533659,N,11722.274867,W,66.1,302.1,280510,,,A*44 8 | $GPRMC,190103.9,A,3343.559059,N,11722.330174,W,64.3,299.3,280510,,,A*46 9 | $GPRMC,190106.9,A,3343.583456,N,11722.388422,W,64.5,296.2,280510,,,A*42 10 | $GPRMC,190109.2,A,3343.599184,N,11722.434435,W,64.9,293.9,280510,,,A*43 11 | $GPRMC,190112.9,A,3343.624403,N,11722.510083,W,66.0,291.6,280510,,,A*45 12 | $GPRMC,190115.9,A,3343.639683,N,11722.574286,W,65.5,287.3,280510,,,A*45 13 | $GPRMC,190118.9,A,3343.652945,N,11722.636594,W,64.4,284.4,280510,,,A*45 14 | $GPRMC,190121.9,A,3343.665131,N,11722.700303,W,65.9,282.9,280510,,,A*4B 15 | $GPRMC,190124.9,A,3343.678070,N,11722.765158,W,66.7,283.4,280510,,,A*48 16 | $GPRMC,190127.9,A,3343.691192,N,11722.828668,W,65.1,283.5,280510,,,A*47 17 | $GPRMC,190130.9,A,3343.704651,N,11722.894593,W,67.1,284.2,280510,,,A*46 18 | $GPRMC,190133.9,A,3343.716767,N,11722.959053,W,66.4,283.2,280510,,,A*48 19 | $GPRMC,190136.9,A,3343.730309,N,11723.023990,W,66.4,283.5,280510,,,A*41 20 | $GPRMC,190139.9,A,3343.744011,N,11723.087053,W,66.5,283.8,280510,,,A*43 21 | $GPRMC,190142.9,A,3343.756666,N,11723.152785,W,67.3,283.3,280510,,,A*43 22 | $GPRMC,190145.9,A,3343.769918,N,11723.217415,W,66.3,283.0,280510,,,A*44 23 | $GPRMC,190148.9,A,3343.780337,N,11723.283713,W,67.5,282.0,280510,,,A*47 24 | $GPRMC,190151.9,A,3343.793132,N,11723.347459,W,66.3,282.4,280510,,,A*4D 25 | $GPRMC,190154.9,A,3343.804764,N,11723.410927,W,66.5,278.9,280510,,,A*43 26 | $GPRMC,190157.9,A,3343.811479,N,11723.476126,W,65.9,275.0,280510,,,A*49 27 | $GPRMC,190200.9,A,3343.812150,N,11723.540012,W,64.4,270.5,280510,,,A*4B 28 | $GPRMC,190203.9,A,3343.811227,N,11723.603978,W,64.2,269.0,280510,,,A*42 29 | $GPRMC,190206.9,A,3343.810356,N,11723.670711,W,65.3,270.0,280510,,,A*4C 30 | $GPRMC,190209.9,A,3343.813060,N,11723.735531,W,64.7,273.8,280510,,,A*48 31 | $GPRMC,190212.9,A,3343.817248,N,11723.799969,W,64.5,276.5,280510,,,A*43 32 | $GPRMC,190215.9,A,3343.829823,N,11723.864408,W,64.5,283.0,280510,,,A*46 33 | $GPRMC,190218.9,A,3343.845384,N,11723.927483,W,65.6,286.1,280510,,,A*44 34 | $GPRMC,190221.9,A,3343.863488,N,11723.992086,W,68.3,290.7,280510,,,A*47 35 | $GPRMC,190224.9,A,3343.892853,N,11724.057104,W,70.8,297.7,280510,,,A*4F 36 | $GPRMC,190227.9,A,3343.923708,N,11724.115388,W,70.2,300.6,280510,,,A*43 37 | $GPRMC,190230.9,A,3343.950433,N,11724.174459,W,68.9,297.8,280510,,,A*45 38 | $GPRMC,190233.9,A,3343.972331,N,11724.235143,W,68.3,292.6,280510,,,A*4A 39 | $GPRMC,190236.9,A,3343.988613,N,11724.300184,W,68.5,287.7,280510,,,A*40 40 | $GPRMC,190239.9,A,3344.001703,N,11724.364800,W,67.8,282.7,280510,,,A*40 41 | $GPRMC,190242.9,A,3344.011842,N,11724.433179,W,66.4,278.6,280510,,,A*4C 42 | $GPRMC,190245.9,A,3344.014662,N,11724.498311,W,65.2,272.9,280510,,,A*4F 43 | $GPRMC,190248.9,A,3344.014320,N,11724.560954,W,63.9,269.3,280510,,,A*41 44 | $GPRMC,190251.9,A,3344.012624,N,11724.626091,W,63.4,268.0,280510,,,A*40 45 | $GPRMC,190254.9,A,3344.012316,N,11724.689055,W,61.8,268.7,280510,,,A*45 46 | $GPRMC,190257.9,A,3344.012228,N,11724.746562,W,57.2,269.5,280510,,,A*45 47 | $GPRMC,190300.9,A,3344.009497,N,11724.803647,W,59.0,268.3,280510,,,A*4F 48 | $GPRMC,190303.9,A,3344.006987,N,11724.866272,W,62.0,268.3,280510,,,A*46 49 | $GPRMC,190306.9,A,3344.007905,N,11724.929225,W,63.6,271.4,280510,,,A*48 50 | $GPRMC,190309.9,A,3344.013212,N,11724.989723,W,63.3,277.4,280510,,,A*45 51 | $GPRMC,190312.9,A,3344.023506,N,11725.054065,W,64.1,282.3,280510,,,A*4B 52 | $GPRMC,190315.9,A,3344.038529,N,11725.117806,W,64.9,286.7,280510,,,A*48 53 | $GPRMC,190318.9,A,3344.059985,N,11725.178815,W,64.6,292.6,280510,,,A*48 54 | $GPRMC,190321.9,A,3344.083364,N,11725.234030,W,63.0,296.8,280510,,,A*4F 55 | $GPRMC,190324.9,A,3344.114197,N,11725.291797,W,65.4,301.7,280510,,,A*4C 56 | $GPRMC,190327.9,A,3344.141255,N,11725.344002,W,62.8,304.8,280510,,,A*41 57 | $GPRMC,190330.9,A,3344.171962,N,11725.394631,W,63.0,306.7,280510,,,A*44 58 | $GPRMC,190333.9,A,3344.205767,N,11725.446188,W,64.6,307.7,280510,,,A*41 59 | $GPRMC,190336.9,A,3344.237305,N,11725.497195,W,64.5,307.1,280510,,,A*40 60 | $GPRMC,190339.9,A,3344.270761,N,11725.550114,W,65.9,307.5,280510,,,A*40 61 | $GPRMC,190342.9,A,3344.307555,N,11725.604928,W,69.1,308.1,280510,,,A*42 62 | $GPRMC,190345.9,A,3344.347576,N,11725.659625,W,72.3,310.4,280510,,,A*4E 63 | $GPRMC,190348.9,A,3344.376609,N,11725.711244,W,66.7,307.0,280510,,,A*47 64 | $GPRMC,190351.9,A,3344.409985,N,11725.767971,W,68.5,304.4,280510,,,A*4C 65 | $GPRMC,190354.9,A,3344.439029,N,11725.824300,W,66.4,301.0,280510,,,A*4F 66 | $GPRMC,190357.9,A,3344.465933,N,11725.883418,W,66.5,297.2,280510,,,A*49 67 | $GPRMC,190400.9,A,3344.484306,N,11725.941726,W,64.0,291.7,280510,,,A*4A 68 | $GPRMC,190403.9,A,3344.500488,N,11726.003068,W,64.6,288.7,280510,,,A*4A 69 | $GPRMC,190406.2,A,3344.512913,N,11726.055320,W,67.6,285.6,280510,,,A*4B 70 | $GPRMC,190409.9,A,3344.531198,N,11726.133573,W,66.3,283.5,280510,,,A*45 71 | $GPRMC,190412.9,A,3344.541062,N,11726.196095,W,65.4,280.9,280510,,,A*45 72 | $GPRMC,190415.9,A,3344.550297,N,11726.259788,W,64.1,281.2,280510,,,A*4F 73 | $GPRMC,190418.9,A,3344.561079,N,11726.321816,W,63.1,282.8,280510,,,A*4A 74 | $GPRMC,190422.2,A,3344.577063,N,11726.391557,W,64.5,285.5,280510,,,A*4E 75 | $GPRMC,190425.9,A,3344.599432,N,11726.462605,W,62.1,292.1,280510,,,A*4D 76 | $GPRMC,190428.9,A,3344.623319,N,11726.517668,W,63.2,296.6,280510,,,A*45 77 | $GPRMC,190431.9,A,3344.651955,N,11726.572779,W,63.7,300.1,280510,,,A*44 78 | $GPRMC,190434.9,A,3344.675702,N,11726.631498,W,64.9,296.9,280510,,,A*4C 79 | $GPRMC,190437.9,A,3344.699100,N,11726.687205,W,64.0,297.5,280510,,,A*42 80 | $GPRMC,190440.9,A,3344.725472,N,11726.744078,W,66.1,298.8,280510,,,A*43 81 | $GPRMC,190443.9,A,3344.750733,N,11726.802488,W,64.6,297.7,280510,,,A*47 82 | $GPRMC,190446.9,A,3344.778280,N,11726.862066,W,67.4,298.3,280510,,,A*4D 83 | $GPRMC,190449.9,A,3344.806644,N,11726.923996,W,70.1,298.4,280510,,,A*4E 84 | $GPRMC,190452.9,A,3344.836687,N,11726.986859,W,70.9,299.6,280510,,,A*4E 85 | $GPRMC,190455.9,A,3344.865579,N,11727.048368,W,70.1,300.5,280510,,,A*44 86 | $GPRMC,190458.9,A,3344.900256,N,11727.104043,W,69.6,307.5,280510,,,A*4A 87 | $GPRMC,190501.2,A,3344.932364,N,11727.144690,W,71.5,311.7,280510,,,A*4E 88 | $GPRMC,190504.9,A,3344.980519,N,11727.205151,W,68.4,316.1,280510,,,A*41 89 | $GPRMC,190507.9,A,3345.025636,N,11727.248651,W,69.9,322.4,280510,,,A*4B 90 | $GPRMC,190510.9,A,3345.076310,N,11727.287022,W,70.6,327.7,280510,,,A*4A 91 | $GPRMC,190513.9,A,3345.128044,N,11727.321130,W,69.3,329.9,280510,,,A*43 92 | $GPRMC,190516.9,A,3345.174752,N,11727.357011,W,65.0,327.9,280510,,,A*4D 93 | $GPRMC,190519.9,A,3345.216792,N,11727.392927,W,63.6,324.1,280510,,,A*47 94 | $GPRMC,190522.9,A,3345.257351,N,11727.434369,W,64.9,319.5,280510,,,A*48 95 | $GPRMC,190525.9,A,3345.298782,N,11727.479202,W,66.4,315.8,280510,,,A*4D 96 | $GPRMC,190528.9,A,3345.333032,N,11727.528964,W,65.8,309.7,280510,,,A*4F 97 | $GPRMC,190531.9,A,3345.370614,N,11727.581012,W,68.4,308.6,280510,,,A*48 98 | $GPRMC,190534.9,A,3345.408460,N,11727.632233,W,70.3,309.8,280510,,,A*4F 99 | $GPRMC,190537.9,A,3345.447648,N,11727.691623,W,74.4,308.2,280510,,,A*4B 100 | $GPRMC,190540.9,A,3345.483474,N,11727.747260,W,71.9,308.1,280510,,,A*4C 101 | $GPRMC,190543.9,A,3345.519999,N,11727.803733,W,71.2,308.1,280510,,,A*44 102 | $GPRMC,190546.9,A,3345.551709,N,11727.862143,W,70.9,304.4,280510,,,A*4F 103 | $GPRMC,190549.9,A,3345.583658,N,11727.923435,W,71.7,300.6,280510,,,A*43 104 | $GPRMC,190552.9,A,3345.615197,N,11727.988438,W,73.1,297.5,280510,,,A*45 105 | $GPRMC,190555.9,A,3345.639226,N,11728.053550,W,71.9,293.3,280510,,,A*42 106 | $GPRMC,190558.9,A,3345.658519,N,11728.118540,W,70.1,289.3,280510,,,A*4E 107 | $GPRMC,190601.9,A,3345.673730,N,11728.185609,W,71.9,286.9,280510,,,A*47 108 | $GPRMC,190604.2,A,3345.692340,N,11728.236714,W,71.0,295.3,280510,,,A*42 109 | $GPRMC,190607.2,A,3345.719847,N,11728.300389,W,71.1,301.4,280510,,,A*41 110 | $GPRMC,190610.2,A,3345.752305,N,11728.359029,W,71.4,305.1,280510,,,A*44 111 | $GPRMC,190614.2,A,3345.801376,N,11728.431356,W,69.7,311.2,280510,,,A*43 112 | $GPRMC,190617.9,A,3345.852244,N,11728.491665,W,69.6,317.9,280510,,,A*4E 113 | $GPRMC,190620.9,A,3345.900198,N,11728.536584,W,71.3,322.4,280510,,,A*49 114 | $GPRMC,190623.9,A,3345.951179,N,11728.578686,W,72.6,324.4,280510,,,A*4A 115 | $GPRMC,190626.2,A,3345.986543,N,11728.610067,W,72.3,322.8,280510,,,A*48 116 | $GPRMC,190629.9,A,3346.041993,N,11728.663767,W,71.3,320.1,280510,,,A*47 117 | $GPRMC,190632.9,A,3346.084996,N,11728.715379,W,71.8,313.3,280510,,,A*43 118 | $GPRMC,190635.9,A,3346.121348,N,11728.768673,W,70.8,308.3,280510,,,A*4D 119 | $GPRMC,190638.9,A,3346.152428,N,11728.828318,W,71.8,305.3,280510,,,A*4A 120 | $GPRMC,190641.9,A,3346.188403,N,11728.884130,W,70.9,307.2,280510,,,A*47 121 | $GPRMC,190644.9,A,3346.229294,N,11728.938317,W,71.6,312.1,280510,,,A*4A 122 | $GPRMC,190647.9,A,3346.271214,N,11728.990747,W,71.1,315.6,280510,,,A*48 123 | $GPRMC,190650.9,A,3346.316817,N,11729.038282,W,71.4,320.8,280510,,,A*4C 124 | $GPRMC,190653.9,A,3346.369252,N,11729.078402,W,72.5,327.5,280510,,,A*4E 125 | $GPRMC,190656.9,A,3346.422603,N,11729.112880,W,72.5,330.5,280510,,,A*4E 126 | $GPRMC,190659.9,A,3346.472974,N,11729.147639,W,69.5,331.3,280510,,,A*4A 127 | $GPRMC,190702.9,A,3346.526652,N,11729.178904,W,71.2,332.3,280510,,,A*4E 128 | $GPRMC,190705.9,A,3346.577552,N,11729.212578,W,70.0,331.8,280510,,,A*4D 129 | $GPRMC,190708.9,A,3346.628747,N,11729.243797,W,68.5,333.0,280510,,,A*4E 130 | $GPRMC,190711.9,A,3346.678938,N,11729.275887,W,69.3,332.4,280510,,,A*4C 131 | $GPRMC,190714.9,A,3346.729588,N,11729.308756,W,69.2,331.8,280510,,,A*4D 132 | $GPRMC,190717.9,A,3346.780250,N,11729.340259,W,68.2,332.2,280510,,,A*41 133 | $GPRMC,190720.9,A,3346.830072,N,11729.371904,W,69.3,332.7,280510,,,A*47 134 | $GPRMC,190723.9,A,3346.881196,N,11729.404521,W,69.5,332.6,280510,,,A*4C 135 | $GPRMC,190726.9,A,3346.934214,N,11729.434836,W,69.3,333.0,280510,,,A*46 136 | $GPRMC,190729.9,A,3346.986497,N,11729.464480,W,69.7,333.1,280510,,,A*4C 137 | $GPRMC,190732.9,A,3347.039249,N,11729.498891,W,70.4,330.7,280510,,,A*4E 138 | $GPRMC,190735.9,A,3347.087877,N,11729.536256,W,69.1,327.5,280510,,,A*46 139 | $GPRMC,190738.9,A,3347.137062,N,11729.575271,W,69.9,327.0,280510,,,A*42 140 | $GPRMC,190742.2,A,3347.189800,N,11729.617442,W,68.2,326.5,280510,,,A*42 141 | $GPRMC,190745.9,A,3347.247837,N,11729.663982,W,66.1,326.7,280510,,,A*46 142 | $GPRMC,190748.9,A,3347.293694,N,11729.700532,W,66.2,327.1,280510,,,A*42 143 | $GPRMC,190751.9,A,3347.340585,N,11729.734558,W,66.0,327.6,280510,,,A*48 144 | $GPRMC,190755.2,A,3347.389873,N,11729.773060,W,64.7,326.2,280510,,,A*4B 145 | $GPRMC,190758.2,A,3347.436704,N,11729.808999,W,64.6,327.0,280510,,,A*44 146 | $GPRMC,190801.2,A,3347.481374,N,11729.843555,W,64.3,327.1,280510,,,A*4F 147 | $GPRMC,190804.9,A,3347.536821,N,11729.880834,W,63.6,327.7,280510,,,A*46 148 | $GPRMC,190807.9,A,3347.582070,N,11729.916885,W,64.2,326.3,280510,,,A*44 149 | $GPRMC,190810.9,A,3347.627312,N,11729.952185,W,64.4,326.5,280510,,,A*40 150 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip1000.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,171209.63,A,3315.2707,N,11717.9659,W,20.762,7.382,041110,0,W,A*1C 3 | $GPRMC,171212.63,A,3315.2836,N,11717.9630,W,10.614,9.595,041110,0,W,A*19 4 | $GPRMC,171230.63,A,3315.2884,N,11717.9616,W,8.356,5.204,041110,0,W,A*2D 5 | $GPRMC,171233.63,A,3315.3002,N,11717.9600,W,20.302,8.176,041110,0,W,A*1E 6 | $GPRMC,171236.63,A,3315.3220,N,11717.9562,W,29.947,8.300,041110,0,W,A*1F 7 | $GPRMC,171239.63,A,3315.3506,N,11717.9513,W,36.215,8.478,041110,0,W,A*1F 8 | $GPRMC,171242.63,A,3315.3834,N,11717.9449,W,39.721,8.912,041110,0,W,A*1D 9 | $GPRMC,171245.63,A,3315.4185,N,11717.9379,W,42.195,8.880,041110,0,W,A*15 10 | $GPRMC,171248.63,A,3315.4551,N,11717.9312,W,44.049,8.484,041110,0,W,A*16 11 | $GPRMC,171251.63,A,3315.4914,N,11717.9240,W,43.260,9.548,041110,0,W,A*1B 12 | $GPRMC,171254.63,A,3315.5273,N,11717.9170,W,42.849,8.601,041110,0,W,A*1A 13 | $GPRMC,171257.63,A,3315.5630,N,11717.9098,W,42.573,8.913,041110,0,W,A*15 14 | $GPRMC,171300.63,A,3315.5980,N,11717.9027,W,41.505,8.710,041110,0,W,A*19 15 | $GPRMC,171303.63,A,3315.6325,N,11717.8960,W,41.120,8.787,041110,0,W,A*1A 16 | $GPRMC,171306.63,A,3315.6667,N,11717.8890,W,41.301,8.859,041110,0,W,A*1F 17 | $GPRMC,171309.63,A,3315.7010,N,11717.8823,W,41.788,8.966,041110,0,W,A*17 18 | $GPRMC,171312.63,A,3315.7361,N,11717.8752,W,43.305,9.319,041110,0,W,A*11 19 | $GPRMC,171315.63,A,3315.7723,N,11717.8677,W,43.767,9.137,041110,0,W,A*1C 20 | $GPRMC,171318.63,A,3315.8086,N,11717.8604,W,43.647,9.151,041110,0,W,A*11 21 | $GPRMC,171321.63,A,3315.8447,N,11717.8535,W,43.705,8.879,041110,0,W,A*16 22 | $GPRMC,171324.63,A,3315.8809,N,11717.8464,W,44.284,9.052,041110,0,W,A*1B 23 | $GPRMC,171327.63,A,3315.9176,N,11717.8395,W,44.755,8.743,041110,0,W,A*1E 24 | $GPRMC,171330.63,A,3315.9547,N,11717.8327,W,45.299,9.156,041110,0,W,A*10 25 | $GPRMC,171333.63,A,3315.9921,N,11717.8252,W,45.018,8.814,041110,0,W,A*19 26 | $GPRMC,171336.63,A,3316.0286,N,11717.8188,W,43.421,8.884,041110,0,W,A*15 27 | $GPRMC,171339.63,A,3316.0642,N,11717.8120,W,42.675,9.276,041110,0,W,A*10 28 | $GPRMC,171342.63,A,3316.0994,N,11717.8056,W,42.799,8.727,041110,0,W,A*1B 29 | $GPRMC,171345.63,A,3316.1346,N,11717.7990,W,42.399,8.835,041110,0,W,A*1C 30 | $GPRMC,171348.63,A,3316.1693,N,11717.7926,W,42.198,8.878,041110,0,W,A*1B 31 | $GPRMC,171351.63,A,3316.2046,N,11717.7863,W,43.455,8.860,041110,0,W,A*12 32 | $GPRMC,171354.63,A,3316.2410,N,11717.7799,W,44.752,8.752,041110,0,W,A*17 33 | $GPRMC,171357.63,A,3316.2789,N,11717.7730,W,47.242,8.602,041110,0,W,A*17 34 | $GPRMC,171400.63,A,3316.3179,N,11717.7655,W,46.705,9.142,041110,0,W,A*1D 35 | $GPRMC,171403.63,A,3316.3533,N,11717.7596,W,37.752,8.526,041110,0,W,A*1B 36 | $GPRMC,171406.63,A,3316.3808,N,11717.7569,W,28.297,2.608,041110,0,W,A*1C 37 | $GPRMC,171409.63,A,3316.3992,N,11717.7564,W,16.932,2.686,041110,0,W,A*13 38 | $GPRMC,171412.63,A,3316.4083,N,11717.7571,W,6.131,358.290,041110,0,W,A*26 39 | $GPRMC,171442.63,A,3316.4165,N,11717.7574,W,15.915,357.852,041110,0,W,A*18 40 | $GPRMC,171445.63,A,3316.4332,N,11717.7588,W,24.091,356.706,041110,0,W,A*14 41 | $GPRMC,171448.63,A,3316.4559,N,11717.7640,W,31.055,353.021,041110,0,W,A*1E 42 | $GPRMC,171451.63,A,3316.4831,N,11717.7711,W,36.809,349.258,041110,0,W,A*11 43 | $GPRMC,171454.63,A,3316.5146,N,11717.7800,W,41.046,345.302,041110,0,W,A*12 44 | $GPRMC,171457.63,A,3316.5486,N,11717.7934,W,41.326,340.512,041110,0,W,A*19 45 | $GPRMC,171500.63,A,3316.5807,N,11717.8091,W,40.230,335.425,041110,0,W,A*16 46 | $GPRMC,171503.63,A,3316.6115,N,11717.8259,W,39.690,335.842,041110,0,W,A*17 47 | $GPRMC,171506.63,A,3316.6410,N,11717.8421,W,37.775,335.953,041110,0,W,A*1E 48 | $GPRMC,171509.63,A,3316.6692,N,11717.8582,W,36.775,335.221,041110,0,W,A*1E 49 | $GPRMC,171512.63,A,3316.6963,N,11717.8738,W,35.029,335.109,041110,0,W,A*12 50 | $GPRMC,171515.63,A,3316.7216,N,11717.8887,W,30.718,334.536,041110,0,W,A*1F 51 | $GPRMC,171518.63,A,3316.7409,N,11717.8999,W,21.978,335.076,041110,0,W,A*1C 52 | $GPRMC,171521.63,A,3316.7559,N,11717.9069,W,15.809,341.157,041110,0,W,A*14 53 | $GPRMC,171524.63,A,3316.7650,N,11717.9110,W,9.621,333.973,041110,0,W,A*26 54 | $GPRMC,171530.63,A,3316.7717,N,11717.9148,W,4.562,334.560,041110,0,W,A*2C 55 | $GPRMC,171548.63,A,3316.7788,N,11717.9174,W,4.715,333.224,041110,0,W,A*28 56 | $GPRMC,171551.63,A,3316.7854,N,11717.9214,W,11.064,334.619,041110,0,W,A*13 57 | $GPRMC,171554.63,A,3316.7967,N,11717.9283,W,19.544,335.608,041110,0,W,A*17 58 | $GPRMC,171557.63,A,3316.8135,N,11717.9392,W,25.679,334.427,041110,0,W,A*19 59 | $GPRMC,171600.63,A,3316.8350,N,11717.9522,W,32.055,335.260,041110,0,W,A*1E 60 | $GPRMC,171603.63,A,3316.8604,N,11717.9663,W,35.640,335.026,041110,0,W,A*1A 61 | $GPRMC,171606.63,A,3316.8896,N,11717.9826,W,39.177,335.851,041110,0,W,A*12 62 | $GPRMC,171609.63,A,3316.9202,N,11717.9997,W,40.347,334.941,041110,0,W,A*1E 63 | $GPRMC,171612.63,A,3316.9508,N,11718.0168,W,39.765,335.420,041110,0,W,A*16 64 | $GPRMC,171615.63,A,3316.9801,N,11718.0340,W,37.518,333.997,041110,0,W,A*1C 65 | $GPRMC,171618.63,A,3317.0073,N,11718.0510,W,36.309,329.364,041110,0,W,A*1D 66 | $GPRMC,171621.63,A,3317.0328,N,11718.0702,W,36.561,325.742,041110,0,W,A*1F 67 | $GPRMC,171624.63,A,3317.0585,N,11718.0939,W,37.914,322.386,041110,0,W,A*19 68 | $GPRMC,171627.63,A,3317.0841,N,11718.1194,W,39.632,319.526,041110,0,W,A*10 69 | $GPRMC,171630.63,A,3317.1099,N,11718.1454,W,41.163,318.617,041110,0,W,A*1F 70 | $GPRMC,171633.63,A,3317.1360,N,11718.1729,W,43.665,318.580,041110,0,W,A*1E 71 | $GPRMC,171636.63,A,3317.1644,N,11718.2023,W,47.209,318.564,041110,0,W,A*16 72 | $GPRMC,171639.63,A,3317.1946,N,11718.2347,W,50.598,318.608,041110,0,W,A*15 73 | $GPRMC,171642.63,A,3317.2264,N,11718.2686,W,51.165,318.393,041110,0,W,A*19 74 | $GPRMC,171645.63,A,3317.2591,N,11718.3023,W,50.790,319.289,041110,0,W,A*1D 75 | $GPRMC,171648.63,A,3317.2909,N,11718.3336,W,48.828,318.893,041110,0,W,A*1F 76 | $GPRMC,171651.63,A,3317.3211,N,11718.3649,W,47.444,318.473,041110,0,W,A*12 77 | $GPRMC,171654.63,A,3317.3504,N,11718.3963,W,47.385,316.095,041110,0,W,A*1B 78 | $GPRMC,171657.63,A,3317.3784,N,11718.4295,W,48.021,313.780,041110,0,W,A*13 79 | $GPRMC,171700.63,A,3317.4045,N,11718.4645,W,46.941,311.573,041110,0,W,A*19 80 | $GPRMC,171703.63,A,3317.4303,N,11718.4997,W,47.104,311.815,041110,0,W,A*1E 81 | $GPRMC,171706.63,A,3317.4561,N,11718.5350,W,46.638,311.430,041110,0,W,A*1B 82 | $GPRMC,171709.63,A,3317.4818,N,11718.5697,W,46.958,311.717,041110,0,W,A*16 83 | $GPRMC,171712.63,A,3317.5074,N,11718.6049,W,47.556,311.072,041110,0,W,A*1E 84 | $GPRMC,171715.63,A,3317.5326,N,11718.6403,W,45.922,311.657,041110,0,W,A*1B 85 | $GPRMC,171718.63,A,3317.5574,N,11718.6737,W,44.528,311.131,041110,0,W,A*13 86 | $GPRMC,171721.63,A,3317.5820,N,11718.7072,W,45.026,312.615,041110,0,W,A*1A 87 | $GPRMC,171724.63,A,3317.6088,N,11718.7390,W,44.556,318.505,041110,0,W,A*12 88 | $GPRMC,171727.63,A,3317.6403,N,11718.7632,W,43.793,331.569,041110,0,W,A*16 89 | $GPRMC,171730.63,A,3317.6749,N,11718.7804,W,43.402,340.576,041110,0,W,A*15 90 | $GPRMC,171733.63,A,3317.7100,N,11718.7905,W,42.833,346.567,041110,0,W,A*15 91 | $GPRMC,171736.63,A,3317.7458,N,11718.7988,W,42.553,346.767,041110,0,W,A*14 92 | $GPRMC,171739.63,A,3317.7810,N,11718.8060,W,42.707,350.038,041110,0,W,A*12 93 | $GPRMC,171742.63,A,3317.8168,N,11718.8095,W,42.227,355.707,041110,0,W,A*14 94 | $GPRMC,171745.63,A,3317.8533,N,11718.8089,W,41.658,1.933,041110,0,W,A*10 95 | $GPRMC,171748.63,A,3317.8874,N,11718.8047,W,41.170,7.500,041110,0,W,A*16 96 | $GPRMC,171751.63,A,3317.9193,N,11718.7986,W,38.027,7.801,041110,0,W,A*15 97 | $GPRMC,171754.63,A,3317.9477,N,11718.7925,W,30.262,9.802,041110,0,W,A*10 98 | $GPRMC,171757.63,A,3317.9703,N,11718.7875,W,23.440,11.428,041110,0,W,A*2E 99 | $GPRMC,171800.63,A,3317.9822,N,11718.7841,W,5.859,16.417,041110,0,W,A*13 100 | $GPRMC,171803.63,A,3317.9828,N,11718.7841,W,5.893,17.799,041110,0,W,A*18 101 | $GPRMC,171806.63,A,3317.9871,N,11718.7770,W,10.635,75.129,041110,0,W,A*23 102 | $GPRMC,171809.63,A,3317.9845,N,11718.7602,W,21.165,98.046,041110,0,W,A*24 103 | $GPRMC,171812.63,A,3317.9820,N,11718.7371,W,25.911,98.572,041110,0,W,A*21 104 | $GPRMC,171815.63,A,3317.9791,N,11718.7120,W,22.240,97.747,041110,0,W,A*26 105 | $GPRMC,171818.63,A,3317.9764,N,11718.6956,W,10.513,98.890,041110,0,W,A*23 106 | $GPRMC,171824.63,A,3317.9746,N,11718.6871,W,4.624,96.397,041110,0,W,A*18 107 | $GPRMC,171827.63,A,3317.9760,N,11718.6779,W,13.115,55.004,041110,0,W,A*2D 108 | $GPRMC,171830.63,A,3317.9877,N,11718.6656,W,22.351,32.405,041110,0,W,A*2A 109 | $GPRMC,171833.63,A,3318.0068,N,11718.6519,W,26.348,32.014,041110,0,W,A*29 110 | $GPRMC,171836.63,A,3318.0272,N,11718.6370,W,27.943,32.347,041110,0,W,A*29 111 | $GPRMC,171839.63,A,3318.0480,N,11718.6214,W,28.640,33.654,041110,0,W,A*2B 112 | $GPRMC,171842.63,A,3318.0680,N,11718.6062,W,26.896,33.641,041110,0,W,A*29 113 | $GPRMC,171845.63,A,3318.0864,N,11718.5917,W,26.008,32.845,041110,0,W,A*26 114 | $GPRMC,171848.63,A,3318.1057,N,11718.5768,W,27.487,33.233,041110,0,W,A*2C 115 | $GPRMC,171851.63,A,3318.1255,N,11718.5618,W,28.337,34.237,041110,0,W,A*22 116 | $GPRMC,171854.63,A,3318.1460,N,11718.5465,W,28.334,23.618,041110,0,W,A*23 117 | $GPRMC,171857.63,A,3318.1692,N,11718.5377,W,28.148,11.031,041110,0,W,A*2E 118 | $GPRMC,171900.63,A,3318.1930,N,11718.5337,W,28.245,8.777,041110,0,W,A*1D 119 | $GPRMC,171903.63,A,3318.2157,N,11718.5302,W,27.002,8.938,041110,0,W,A*19 120 | $GPRMC,171906.63,A,3318.2373,N,11718.5264,W,25.388,9.842,041110,0,W,A*17 121 | $GPRMC,171909.63,A,3318.2568,N,11718.5227,W,21.922,9.123,041110,0,W,A*13 122 | $GPRMC,171912.63,A,3318.2742,N,11718.5197,W,22.417,9.267,041110,0,W,A*10 123 | $GPRMC,171915.63,A,3318.2929,N,11718.5167,W,23.735,9.306,041110,0,W,A*1F 124 | $GPRMC,171918.63,A,3318.3104,N,11718.5138,W,21.849,9.518,041110,0,W,A*11 125 | $GPRMC,171921.63,A,3318.3276,N,11718.5099,W,20.990,9.796,041110,0,W,A*17 126 | $GPRMC,171924.63,A,3318.3440,N,11718.5070,W,19.528,9.095,041110,0,W,A*17 127 | $GPRMC,171927.63,A,3318.3598,N,11718.5044,W,19.089,9.278,041110,0,W,A*18 128 | $GPRMC,171930.63,A,3318.3764,N,11718.5006,W,18.669,9.725,041110,0,W,A*1D 129 | $GPRMC,171933.63,A,3318.3931,N,11718.4970,W,20.024,8.188,041110,0,W,A*1D 130 | $GPRMC,171936.63,A,3318.4109,N,11718.4936,W,20.860,9.224,041110,0,W,A*12 131 | $GPRMC,171939.63,A,3318.4287,N,11718.4903,W,21.517,8.895,041110,0,W,A*13 132 | $GPRMC,171942.63,A,3318.4475,N,11718.4862,W,22.572,9.415,041110,0,W,A*17 133 | $GPRMC,171945.63,A,3318.4683,N,11718.4817,W,25.566,8.644,041110,0,W,A*1C 134 | $GPRMC,171948.63,A,3318.4906,N,11718.4773,W,27.408,9.695,041110,0,W,A*18 135 | $GPRMC,171951.63,A,3318.5131,N,11718.4728,W,26.776,9.895,041110,0,W,A*16 136 | $GPRMC,171954.63,A,3318.5350,N,11718.4681,W,25.592,9.570,041110,0,W,A*19 137 | $GPRMC,171957.63,A,3318.5535,N,11718.4651,W,17.660,5.726,041110,0,W,A*10 138 | $GPRMC,172000.63,A,3318.5645,N,11718.4624,W,10.643,28.287,041110,0,W,A*29 139 | $GPRMC,172003.63,A,3318.5677,N,11718.4544,W,11.309,68.948,041110,0,W,A*28 140 | $GPRMC,172006.63,A,3318.5714,N,11718.4431,W,13.956,52.226,041110,0,W,A*22 141 | $GPRMC,172009.63,A,3318.5805,N,11718.4327,W,16.452,35.802,041110,0,W,A*23 142 | $GPRMC,172012.63,A,3318.5924,N,11718.4218,W,19.498,48.040,041110,0,W,A*2B 143 | $GPRMC,172015.63,A,3318.5999,N,11718.4030,W,21.617,74.848,041110,0,W,A*23 144 | $GPRMC,172018.63,A,3318.6014,N,11718.3799,W,22.156,84.394,041110,0,W,A*26 145 | $GPRMC,172021.63,A,3318.6024,N,11718.3568,W,22.495,83.876,041110,0,W,A*29 146 | $GPRMC,172024.63,A,3318.6037,N,11718.3341,W,22.387,84.726,041110,0,W,A*2A 147 | $GPRMC,172027.63,A,3318.6047,N,11718.3118,W,20.259,86.298,041110,0,W,A*22 148 | $GPRMC,172030.63,A,3318.6052,N,11718.2905,W,23.115,87.685,041110,0,W,A*24 149 | $GPRMC,172033.63,A,3318.6048,N,11718.2652,W,25.975,93.962,041110,0,W,A*2A 150 | $GPRMC,172036.63,A,3318.6011,N,11718.2399,W,26.810,98.219,041110,0,W,A*2C 151 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip1001.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,175200.63,A,3318.5976,N,11718.4095,W,23.610,258.285,041110,0,W,A*1E 3 | $GPRMC,175203.63,A,3318.5893,N,11718.4298,W,22.283,228.066,041110,0,W,A*1F 4 | $GPRMC,175206.63,A,3318.5734,N,11718.4439,W,21.014,218.548,041110,0,W,A*10 5 | $GPRMC,175209.63,A,3318.5629,N,11718.4579,W,16.684,239.600,041110,0,W,A*10 6 | $GPRMC,175218.63,A,3318.5596,N,11718.4707,W,10.625,265.237,041110,0,W,A*18 7 | $GPRMC,175221.63,A,3318.5597,N,11718.4871,W,20.147,277.219,041110,0,W,A*12 8 | $GPRMC,175224.63,A,3318.5631,N,11718.5085,W,24.130,279.171,041110,0,W,A*1D 9 | $GPRMC,175227.63,A,3318.5661,N,11718.5347,W,27.252,278.339,041110,0,W,A*1D 10 | $GPRMC,175230.63,A,3318.5683,N,11718.5612,W,26.076,279.947,041110,0,W,A*15 11 | $GPRMC,175233.63,A,3318.5717,N,11718.5875,W,26.292,278.262,041110,0,W,A*10 12 | $GPRMC,175236.63,A,3318.5752,N,11718.6130,W,24.197,278.938,041110,0,W,A*1F 13 | $GPRMC,175239.63,A,3318.5788,N,11718.6348,W,19.553,276.434,041110,0,W,A*17 14 | $GPRMC,175242.63,A,3318.5809,N,11718.6477,W,6.666,277.536,041110,0,W,A*2F 15 | $GPRMC,175303.63,A,3318.5810,N,11718.6586,W,12.555,243.345,041110,0,W,A*1F 16 | $GPRMC,175306.63,A,3318.5713,N,11718.6683,W,19.414,199.366,041110,0,W,A*1A 17 | $GPRMC,175309.63,A,3318.5531,N,11718.6730,W,24.792,192.942,041110,0,W,A*1A 18 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip1002.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,182324.62,A,3318.4220,N,11718.7936,W,7.043,9.104,041110,0,W,A*20 3 | $GPRMC,182327.62,A,3318.4279,N,11718.7933,W,4.828,8.963,041110,0,W,A*24 4 | $GPRMC,182357.62,A,3318.4407,N,11718.7916,W,5.705,7.516,041110,0,W,A*2B 5 | $GPRMC,182400.62,A,3318.4458,N,11718.7902,W,5.944,9.612,041110,0,W,A*23 6 | $GPRMC,182436.62,A,3318.4585,N,11718.7887,W,5.153,9.095,041110,0,W,A*2C 7 | $GPRMC,182439.62,A,3318.4630,N,11718.7881,W,4.658,10.208,041110,0,W,A*1B 8 | $GPRMC,182548.62,A,3318.4732,N,11718.7862,W,4.557,10.216,041110,0,W,A*11 9 | $GPRMC,182624.62,A,3318.4865,N,11718.7823,W,5.387,38.396,041110,0,W,A*19 10 | $GPRMC,182627.62,A,3318.4883,N,11718.7760,W,6.041,95.414,041110,0,W,A*1A 11 | $GPRMC,182633.62,A,3318.4871,N,11718.7708,W,5.726,100.159,041110,0,W,A*28 12 | $GPRMC,182636.62,A,3318.4856,N,11718.7608,W,13.940,99.478,041110,0,W,A*27 13 | $GPRMC,182639.62,A,3318.4828,N,11718.7455,W,14.233,98.770,041110,0,W,A*29 14 | $GPRMC,182642.62,A,3318.4801,N,11718.7315,W,12.704,98.173,041110,0,W,A*2F 15 | $GPRMC,182645.62,A,3318.4778,N,11718.7192,W,9.305,98.235,041110,0,W,A*1A 16 | $GPRMC,182748.62,A,3318.4762,N,11718.7092,W,6.432,99.325,041110,0,W,A*11 17 | $GPRMC,182751.62,A,3318.4747,N,11718.6980,W,14.509,97.411,041110,0,W,A*21 18 | $GPRMC,182754.62,A,3318.4743,N,11718.6834,W,13.871,76.928,041110,0,W,A*23 19 | $GPRMC,182757.62,A,3318.4832,N,11718.6734,W,16.380,18.430,041110,0,W,A*2A 20 | $GPRMC,182800.62,A,3318.5014,N,11718.6699,W,24.467,10.132,041110,0,W,A*2C 21 | $GPRMC,182803.62,A,3318.5255,N,11718.6648,W,31.785,13.040,041110,0,W,A*28 22 | $GPRMC,182806.62,A,3318.5553,N,11718.6574,W,36.735,12.478,041110,0,W,A*22 23 | $GPRMC,182809.62,A,3318.5875,N,11718.6490,W,37.289,12.746,041110,0,W,A*22 24 | $GPRMC,182812.62,A,3318.6192,N,11718.6409,W,37.004,12.862,041110,0,W,A*25 25 | $GPRMC,182815.62,A,3318.6501,N,11718.6330,W,34.695,12.551,041110,0,W,A*21 26 | $GPRMC,182818.62,A,3318.6738,N,11718.6277,W,20.488,10.929,041110,0,W,A*2C 27 | $GPRMC,182821.62,A,3318.6849,N,11718.6261,W,10.547,3.523,041110,0,W,A*1D 28 | $GPRMC,182906.62,A,3318.6940,N,11718.6248,W,10.472,11.795,041110,0,W,A*21 29 | $GPRMC,182909.62,A,3318.7077,N,11718.6209,W,19.723,13.540,041110,0,W,A*21 30 | $GPRMC,182912.62,A,3318.7210,N,11718.6176,W,12.665,11.026,041110,0,W,A*2C 31 | $GPRMC,183021.62,A,3318.7242,N,11718.6168,W,4.401,14.885,041110,0,W,A*1F 32 | $GPRMC,183024.62,A,3318.7334,N,11718.6143,W,15.322,13.070,041110,0,W,A*20 33 | $GPRMC,183027.62,A,3318.7466,N,11718.6105,W,16.129,12.104,041110,0,W,A*28 34 | $GPRMC,183030.62,A,3318.7576,N,11718.6116,W,12.515,322.797,041110,0,W,A*1F 35 | $GPRMC,183033.62,A,3318.7595,N,11718.6282,W,19.966,270.733,041110,0,W,A*14 36 | $GPRMC,183036.62,A,3318.7584,N,11718.6565,W,32.442,269.707,041110,0,W,A*12 37 | $GPRMC,183039.62,A,3318.7577,N,11718.6923,W,35.243,269.488,041110,0,W,A*1B 38 | $GPRMC,183042.62,A,3318.7571,N,11718.7266,W,31.986,269.723,041110,0,W,A*1E 39 | $GPRMC,183045.62,A,3318.7562,N,11718.7589,W,31.446,269.892,041110,0,W,A*19 40 | $GPRMC,183048.62,A,3318.7552,N,11718.7924,W,33.512,268.658,041110,0,W,A*17 41 | $GPRMC,183051.62,A,3318.7546,N,11718.8281,W,35.969,270.089,041110,0,W,A*14 42 | $GPRMC,183054.62,A,3318.7538,N,11718.8657,W,37.403,269.294,041110,0,W,A*12 43 | $GPRMC,183057.62,A,3318.7533,N,11718.9028,W,34.588,271.091,041110,0,W,A*1A 44 | $GPRMC,183100.62,A,3318.7554,N,11718.9363,W,33.272,283.934,041110,0,W,A*1A 45 | $GPRMC,183103.62,A,3318.7653,N,11718.9638,W,32.371,304.650,041110,0,W,A*16 46 | $GPRMC,183106.62,A,3318.7841,N,11718.9884,W,34.267,320.679,041110,0,W,A*1A 47 | $GPRMC,183109.62,A,3318.8093,N,11719.0064,W,34.387,331.605,041110,0,W,A*17 48 | $GPRMC,183112.62,A,3318.8344,N,11719.0221,W,33.365,331.263,041110,0,W,A*18 49 | $GPRMC,183115.62,A,3318.8572,N,11719.0427,W,35.379,314.758,041110,0,W,A*1D 50 | $GPRMC,183118.62,A,3318.8753,N,11719.0745,W,39.538,297.209,041110,0,W,A*12 51 | $GPRMC,183121.62,A,3318.8836,N,11719.1152,W,42.130,279.458,041110,0,W,A*17 52 | $GPRMC,183124.62,A,3318.8887,N,11719.1577,W,42.981,279.362,041110,0,W,A*17 53 | $GPRMC,183127.62,A,3318.8940,N,11719.2005,W,43.581,279.292,041110,0,W,A*1E 54 | $GPRMC,183130.62,A,3318.9000,N,11719.2438,W,44.310,279.563,041110,0,W,A*1E 55 | $GPRMC,183133.62,A,3318.9058,N,11719.2878,W,44.609,279.867,041110,0,W,A*1C 56 | $GPRMC,183136.62,A,3318.9115,N,11719.3323,W,45.277,276.072,041110,0,W,A*1A 57 | $GPRMC,183139.62,A,3318.9126,N,11719.3783,W,45.816,267.620,041110,0,W,A*17 58 | $GPRMC,183142.62,A,3318.9079,N,11719.4241,W,45.415,257.878,041110,0,W,A*13 59 | $GPRMC,183145.62,A,3318.9000,N,11719.4666,W,41.932,254.541,041110,0,W,A*13 60 | $GPRMC,183148.62,A,3318.8954,N,11719.5079,W,42.107,269.872,041110,0,W,A*10 61 | $GPRMC,183151.62,A,3318.8995,N,11719.5490,W,42.162,285.131,041110,0,W,A*19 62 | $GPRMC,183154.62,A,3318.9103,N,11719.5897,W,42.714,287.815,041110,0,W,A*1B 63 | $GPRMC,183157.62,A,3318.9188,N,11719.6310,W,40.175,281.658,041110,0,W,A*1E 64 | $GPRMC,183200.62,A,3318.9228,N,11719.6670,W,34.078,274.929,041110,0,W,A*19 65 | $GPRMC,183203.62,A,3318.9254,N,11719.6985,W,29.637,276.340,041110,0,W,A*12 66 | $GPRMC,183206.62,A,3318.9299,N,11719.7244,W,23.819,287.132,041110,0,W,A*10 67 | $GPRMC,183209.62,A,3318.9338,N,11719.7390,W,12.229,291.487,041110,0,W,A*1A 68 | $GPRMC,183212.62,A,3318.9387,N,11719.7519,W,16.958,291.886,041110,0,W,A*17 69 | $GPRMC,183215.62,A,3318.9425,N,11719.7682,W,18.742,269.837,041110,0,W,A*18 70 | $GPRMC,183218.62,A,3318.9364,N,11719.7872,W,23.955,232.187,041110,0,W,A*1A 71 | $GPRMC,183221.62,A,3318.9223,N,11719.8087,W,31.980,234.599,041110,0,W,A*19 72 | $GPRMC,183224.62,A,3318.9052,N,11719.8361,W,38.349,237.004,041110,0,W,A*17 73 | $GPRMC,183227.62,A,3318.8873,N,11719.8716,W,44.262,241.486,041110,0,W,A*16 74 | $GPRMC,183230.62,A,3318.8663,N,11719.9138,W,49.469,238.635,041110,0,W,A*10 75 | $GPRMC,183233.62,A,3318.8422,N,11719.9548,W,49.341,231.839,041110,0,W,A*11 76 | $GPRMC,183236.62,A,3318.8154,N,11719.9929,W,48.207,228.315,041110,0,W,A*14 77 | $GPRMC,183239.62,A,3318.7889,N,11720.0283,W,46.524,228.073,041110,0,W,A*1E 78 | $GPRMC,183242.62,A,3318.7631,N,11720.0625,W,45.540,228.226,041110,0,W,A*14 79 | $GPRMC,183245.62,A,3318.7377,N,11720.0962,W,46.118,228.164,041110,0,W,A*17 80 | $GPRMC,183248.62,A,3318.7115,N,11720.1307,W,46.888,228.133,041110,0,W,A*16 81 | $GPRMC,183251.62,A,3318.6848,N,11720.1648,W,47.239,225.427,041110,0,W,A*1C 82 | $GPRMC,183254.62,A,3318.6546,N,11720.1954,W,47.440,215.356,041110,0,W,A*12 83 | $GPRMC,183257.62,A,3318.6220,N,11720.2247,W,48.969,221.047,041110,0,W,A*11 84 | $GPRMC,183300.62,A,3318.5940,N,11720.2600,W,47.643,231.423,041110,0,W,A*14 85 | $GPRMC,183303.62,A,3318.5715,N,11720.2990,W,46.289,237.871,041110,0,W,A*11 86 | $GPRMC,183306.62,A,3318.5509,N,11720.3373,W,44.076,235.721,041110,0,W,A*15 87 | $GPRMC,183309.62,A,3318.5328,N,11720.3739,W,42.162,237.403,041110,0,W,A*16 88 | $GPRMC,183312.62,A,3318.5152,N,11720.4084,W,39.337,236.889,041110,0,W,A*14 89 | $GPRMC,183315.62,A,3318.4996,N,11720.4393,W,31.863,234.452,041110,0,W,A*1D 90 | $GPRMC,183318.62,A,3318.4854,N,11720.4622,W,25.758,228.619,041110,0,W,A*12 91 | $GPRMC,183321.62,A,3318.4724,N,11720.4762,W,18.555,222.336,041110,0,W,A*16 92 | $GPRMC,183324.62,A,3318.4631,N,11720.4848,W,10.764,221.154,041110,0,W,A*1C 93 | $GPRMC,183327.62,A,3318.4582,N,11720.4885,W,4.764,216.771,041110,0,W,A*25 94 | $GPRMC,183345.62,A,3318.4458,N,11720.5004,W,16.399,214.656,041110,0,W,A*14 95 | $GPRMC,183348.62,A,3318.4303,N,11720.5121,W,26.531,210.647,041110,0,W,A*15 96 | $GPRMC,183351.62,A,3318.4093,N,11720.5239,W,29.355,204.755,041110,0,W,A*11 97 | $GPRMC,183354.62,A,3318.3853,N,11720.5355,W,31.558,203.390,041110,0,W,A*14 98 | $GPRMC,183357.62,A,3318.3592,N,11720.5485,W,33.778,204.180,041110,0,W,A*1B 99 | $GPRMC,183400.62,A,3318.3317,N,11720.5629,W,34.124,205.709,041110,0,W,A*1F 100 | $GPRMC,183403.62,A,3318.3066,N,11720.5759,W,28.943,211.380,041110,0,W,A*1B 101 | $GPRMC,183406.62,A,3318.2887,N,11720.5879,W,22.255,210.153,041110,0,W,A*1E 102 | $GPRMC,183409.62,A,3318.2732,N,11720.5977,W,19.294,207.191,041110,0,W,A*12 103 | $GPRMC,183412.62,A,3318.2591,N,11720.6062,W,21.181,212.478,041110,0,W,A*17 104 | $GPRMC,183415.62,A,3318.2445,N,11720.6202,W,23.891,213.601,041110,0,W,A*1B 105 | $GPRMC,183418.62,A,3318.2269,N,11720.6336,W,23.961,213.091,041110,0,W,A*19 106 | $GPRMC,183421.62,A,3318.2089,N,11720.6459,W,22.811,213.159,041110,0,W,A*13 107 | $GPRMC,183424.62,A,3318.1927,N,11720.6568,W,18.109,213.814,041110,0,W,A*12 108 | $GPRMC,183427.62,A,3318.1849,N,11720.6627,W,8.204,211.027,041110,0,W,A*25 109 | $GPRMC,183430.62,A,3318.1777,N,11720.6669,W,7.294,214.459,041110,0,W,A*25 110 | $GPRMC,183554.62,A,3318.1742,N,11720.6700,W,8.656,198.269,041110,0,W,A*29 111 | $GPRMC,183557.62,A,3318.1651,N,11720.6669,W,14.648,144.802,041110,0,W,A*13 112 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip1003.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,184512.62,A,3318.1740,N,11720.6742,W,9.965,242.788,041110,0,W,A*28 3 | $GPRMC,184515.62,A,3318.1653,N,11720.6858,W,18.616,217.840,041110,0,W,A*18 4 | $GPRMC,184518.62,A,3318.1477,N,11720.6984,W,27.568,212.621,041110,0,W,A*1B 5 | $GPRMC,184521.62,A,3318.1259,N,11720.7133,W,32.224,213.429,041110,0,W,A*1E 6 | $GPRMC,184524.62,A,3318.1010,N,11720.7311,W,34.377,213.069,041110,0,W,A*17 7 | $GPRMC,184527.62,A,3318.0765,N,11720.7497,W,33.547,214.049,041110,0,W,A*1E 8 | $GPRMC,184530.62,A,3318.0533,N,11720.7660,W,30.417,209.163,041110,0,W,A*11 9 | $GPRMC,184533.62,A,3318.0322,N,11720.7807,W,26.569,213.473,041110,0,W,A*1B 10 | $GPRMC,184536.62,A,3318.0150,N,11720.7941,W,21.059,212.500,041110,0,W,A*1F 11 | $GPRMC,184539.62,A,3318.0039,N,11720.8029,W,11.066,212.839,041110,0,W,A*1E 12 | $GPRMC,184627.62,A,3317.9936,N,11720.8093,W,10.021,196.724,041110,0,W,A*1D 13 | $GPRMC,184630.62,A,3317.9827,N,11720.8057,W,16.639,147.728,041110,0,W,A*1B 14 | $GPRMC,184633.62,A,3317.9692,N,11720.7940,W,21.395,150.945,041110,0,W,A*1C 15 | $GPRMC,184636.62,A,3317.9512,N,11720.7848,W,23.921,168.891,041110,0,W,A*1F 16 | $GPRMC,184639.62,A,3317.9317,N,11720.7819,W,24.963,174.920,041110,0,W,A*10 17 | $GPRMC,184642.62,A,3317.9105,N,11720.7799,W,26.975,175.667,041110,0,W,A*12 18 | $GPRMC,184645.62,A,3317.8876,N,11720.7747,W,28.756,167.905,041110,0,W,A*13 19 | $GPRMC,184648.62,A,3317.8631,N,11720.7639,W,29.353,157.485,041110,0,W,A*1D 20 | $GPRMC,184651.62,A,3317.8404,N,11720.7501,W,30.279,150.816,041110,0,W,A*19 21 | $GPRMC,184654.62,A,3317.8191,N,11720.7356,W,28.835,153.020,041110,0,W,A*14 22 | $GPRMC,184657.62,A,3317.7966,N,11720.7250,W,27.316,166.975,041110,0,W,A*15 23 | $GPRMC,184700.62,A,3317.7740,N,11720.7219,W,27.720,175.518,041110,0,W,A*15 24 | $GPRMC,184703.62,A,3317.7517,N,11720.7190,W,27.628,175.253,041110,0,W,A*15 25 | $GPRMC,184706.62,A,3317.7293,N,11720.7174,W,26.998,173.474,041110,0,W,A*11 26 | $GPRMC,184709.62,A,3317.7086,N,11720.7113,W,26.712,164.221,041110,0,W,A*15 27 | $GPRMC,184712.62,A,3317.6896,N,11720.6995,W,24.950,145.631,041110,0,W,A*1C 28 | $GPRMC,184715.62,A,3317.6757,N,11720.6816,W,24.567,133.386,041110,0,W,A*13 29 | $GPRMC,184718.62,A,3317.6617,N,11720.6640,W,23.563,130.079,041110,0,W,A*15 30 | $GPRMC,184721.62,A,3317.6484,N,11720.6469,W,22.254,130.885,041110,0,W,A*17 31 | $GPRMC,184724.62,A,3317.6361,N,11720.6305,W,21.493,130.346,041110,0,W,A*19 32 | $GPRMC,184727.62,A,3317.6253,N,11720.6159,W,19.627,130.595,041110,0,W,A*1F 33 | $GPRMC,184730.62,A,3317.6162,N,11720.6029,W,17.141,129.053,041110,0,W,A*10 34 | $GPRMC,184733.62,A,3317.6079,N,11720.5911,W,16.058,133.112,041110,0,W,A*1E 35 | $GPRMC,184736.62,A,3317.5985,N,11720.5810,W,15.503,148.779,041110,0,W,A*1D 36 | $GPRMC,184739.62,A,3317.5850,N,11720.5793,W,15.970,194.270,041110,0,W,A*1A 37 | $GPRMC,184742.62,A,3317.5718,N,11720.5875,W,16.668,210.921,041110,0,W,A*17 38 | $GPRMC,184745.62,A,3317.5583,N,11720.5957,W,17.424,213.511,041110,0,W,A*16 39 | $GPRMC,184748.62,A,3317.5454,N,11720.6036,W,16.895,211.940,041110,0,W,A*10 40 | $GPRMC,184751.62,A,3317.5331,N,11720.6117,W,16.214,213.622,041110,0,W,A*14 41 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip1004.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,190551.62,A,3317.5540,N,11720.6061,W,15.768,32.437,041110,0,W,A*29 3 | $GPRMC,190554.62,A,3317.5639,N,11720.5979,W,15.915,33.001,041110,0,W,A*26 4 | $GPRMC,190557.62,A,3317.5750,N,11720.5894,W,14.499,34.081,041110,0,W,A*2E 5 | $GPRMC,190600.62,A,3317.5850,N,11720.5823,W,13.738,22.695,041110,0,W,A*27 6 | $GPRMC,190603.62,A,3317.5972,N,11720.5809,W,15.042,352.364,041110,0,W,A*1E 7 | $GPRMC,190606.62,A,3317.6081,N,11720.5897,W,16.313,314.205,041110,0,W,A*1A 8 | $GPRMC,190609.62,A,3317.6166,N,11720.6047,W,18.147,309.247,041110,0,W,A*1C 9 | $GPRMC,190612.62,A,3317.6262,N,11720.6207,W,20.391,311.072,041110,0,W,A*18 10 | $GPRMC,190615.62,A,3317.6374,N,11720.6375,W,20.535,309.672,041110,0,W,A*1A 11 | $GPRMC,190618.62,A,3317.6489,N,11720.6534,W,18.988,310.071,041110,0,W,A*1D 12 | $GPRMC,190621.62,A,3317.6590,N,11720.6678,W,17.925,310.450,041110,0,W,A*1A 13 | $GPRMC,190624.62,A,3317.6688,N,11720.6813,W,17.739,311.437,041110,0,W,A*15 14 | $GPRMC,190627.62,A,3317.6787,N,11720.6951,W,18.362,311.732,041110,0,W,A*1C 15 | $GPRMC,190630.62,A,3317.6895,N,11720.7093,W,19.967,322.100,041110,0,W,A*19 16 | $GPRMC,190633.62,A,3317.7048,N,11720.7204,W,20.991,335.030,041110,0,W,A*18 17 | $GPRMC,190636.62,A,3317.7228,N,11720.7276,W,21.476,350.058,041110,0,W,A*14 18 | $GPRMC,190639.62,A,3317.7421,N,11720.7294,W,24.488,352.598,041110,0,W,A*17 19 | $GPRMC,190642.62,A,3317.7635,N,11720.7318,W,27.611,354.421,041110,0,W,A*1D 20 | $GPRMC,190645.62,A,3317.7885,N,11720.7342,W,30.612,354.330,041110,0,W,A*12 21 | $GPRMC,190648.62,A,3317.8136,N,11720.7394,W,28.571,340.285,041110,0,W,A*1F 22 | $GPRMC,190651.62,A,3317.8354,N,11720.7516,W,28.540,332.757,041110,0,W,A*10 23 | $GPRMC,190654.62,A,3317.8558,N,11720.7646,W,28.063,332.412,041110,0,W,A*1F 24 | $GPRMC,190657.62,A,3317.8772,N,11720.7761,W,27.352,339.458,041110,0,W,A*19 25 | $GPRMC,190700.62,A,3317.8988,N,11720.7828,W,26.288,350.235,041110,0,W,A*16 26 | $GPRMC,190703.62,A,3317.9205,N,11720.7849,W,25.589,353.421,041110,0,W,A*18 27 | $GPRMC,190706.62,A,3317.9407,N,11720.7867,W,24.481,356.407,041110,0,W,A*1C 28 | $GPRMC,190709.62,A,3317.9609,N,11720.7891,W,25.113,348.820,041110,0,W,A*1F 29 | $GPRMC,190712.62,A,3317.9801,N,11720.7973,W,22.358,334.077,041110,0,W,A*15 30 | $GPRMC,190715.62,A,3317.9926,N,11720.8064,W,12.161,330.356,041110,0,W,A*19 31 | $GPRMC,190718.62,A,3317.9961,N,11720.8113,W,4.836,334.606,041110,0,W,A*2E 32 | $GPRMC,190721.62,A,3318.0049,N,11720.8114,W,13.808,21.605,041110,0,W,A*29 33 | $GPRMC,190724.62,A,3318.0183,N,11720.8009,W,21.951,32.808,041110,0,W,A*2B 34 | $GPRMC,190727.62,A,3318.0369,N,11720.7870,W,25.970,33.222,041110,0,W,A*23 35 | $GPRMC,190730.62,A,3318.0566,N,11720.7712,W,27.953,34.151,041110,0,W,A*24 36 | $GPRMC,190733.62,A,3318.0778,N,11720.7546,W,28.667,33.813,041110,0,W,A*26 37 | $GPRMC,190736.62,A,3318.0986,N,11720.7389,W,28.476,33.789,041110,0,W,A*27 38 | $GPRMC,190739.62,A,3318.1194,N,11720.7228,W,28.952,33.514,041110,0,W,A*25 39 | $GPRMC,190742.62,A,3318.1397,N,11720.7068,W,26.707,32.857,041110,0,W,A*25 40 | $GPRMC,190745.62,A,3318.1557,N,11720.6932,W,19.417,34.243,041110,0,W,A*28 41 | $GPRMC,190748.62,A,3318.1636,N,11720.6838,W,10.317,34.165,041110,0,W,A*23 42 | $GPRMC,190751.62,A,3318.1692,N,11720.6794,W,4.703,36.788,041110,0,W,A*1F 43 | $GPRMC,190821.62,A,3318.1717,N,11720.6776,W,5.038,33.597,041110,0,W,A*10 44 | $GPRMC,190824.62,A,3318.1799,N,11720.6708,W,17.483,34.675,041110,0,W,A*25 45 | $GPRMC,190827.62,A,3318.1961,N,11720.6588,W,27.717,33.864,041110,0,W,A*21 46 | $GPRMC,190830.62,A,3318.2167,N,11720.6407,W,32.681,34.164,041110,0,W,A*28 47 | $GPRMC,190833.62,A,3318.2422,N,11720.6206,W,37.976,33.322,041110,0,W,A*2D 48 | $GPRMC,190836.62,A,3318.2699,N,11720.5994,W,37.701,33.370,041110,0,W,A*20 49 | $GPRMC,190839.62,A,3318.2970,N,11720.5803,W,35.471,30.855,041110,0,W,A*21 50 | $GPRMC,190842.62,A,3318.3207,N,11720.5617,W,33.650,31.471,041110,0,W,A*20 51 | $GPRMC,190845.62,A,3318.3450,N,11720.5470,W,31.787,26.098,041110,0,W,A*2C 52 | $GPRMC,190848.62,A,3318.3679,N,11720.5344,W,27.399,24.584,041110,0,W,A*2E 53 | $GPRMC,190851.62,A,3318.3825,N,11720.5242,W,17.122,25.471,041110,0,W,A*2D 54 | $GPRMC,190854.62,A,3318.3903,N,11720.5200,W,5.810,24.972,041110,0,W,A*1F 55 | $GPRMC,190912.62,A,3318.3951,N,11720.5174,W,11.679,26.481,041110,0,W,A*2C 56 | $GPRMC,190915.62,A,3318.4083,N,11720.5103,W,23.199,22.939,041110,0,W,A*28 57 | $GPRMC,190918.62,A,3318.4299,N,11720.4979,W,31.787,27.687,041110,0,W,A*2D 58 | $GPRMC,190921.62,A,3318.4552,N,11720.4790,W,37.258,35.991,041110,0,W,A*24 59 | $GPRMC,190924.62,A,3318.4800,N,11720.4528,W,40.333,47.273,041110,0,W,A*24 60 | $GPRMC,190927.62,A,3318.4991,N,11720.4230,W,28.561,54.472,041110,0,W,A*2A 61 | $GPRMC,190930.62,A,3318.5095,N,11720.4048,W,13.710,54.129,041110,0,W,A*2A 62 | $GPRMC,190933.62,A,3318.5137,N,11720.3963,W,4.409,59.280,041110,0,W,A*17 63 | $GPRMC,190954.62,A,3318.5187,N,11720.3825,W,7.515,56.616,041110,0,W,A*15 64 | $GPRMC,190957.62,A,3318.5230,N,11720.3753,W,7.615,56.825,041110,0,W,A*1A 65 | $GPRMC,191000.62,A,3318.5269,N,11720.3704,W,4.433,58.963,041110,0,W,A*16 66 | $GPRMC,191030.62,A,3318.5304,N,11720.3605,W,5.573,60.511,041110,0,W,A*19 67 | $GPRMC,191033.62,A,3318.5331,N,11720.3547,W,8.077,59.442,041110,0,W,A*18 68 | $GPRMC,191036.62,A,3318.5374,N,11720.3479,W,5.657,57.917,041110,0,W,A*1A 69 | $GPRMC,191306.62,A,3318.5723,N,11720.2829,W,5.112,59.015,041110,0,W,A*17 70 | $GPRMC,191309.62,A,3318.5735,N,11720.2784,W,4.475,56.398,041110,0,W,A*1B 71 | $GPRMC,191312.62,A,3318.5752,N,11720.2741,W,4.642,55.230,041110,0,W,A*1F 72 | $GPRMC,191315.62,A,3318.5778,N,11720.2689,W,4.361,56.089,041110,0,W,A*12 73 | $GPRMC,191318.62,A,3318.5814,N,11720.2635,W,5.400,55.976,041110,0,W,A*16 74 | $GPRMC,191321.62,A,3318.5848,N,11720.2590,W,5.421,55.437,041110,0,W,A*12 75 | $GPRMC,191324.62,A,3318.5876,N,11720.2518,W,6.657,54.045,041110,0,W,A*1A 76 | $GPRMC,191327.62,A,3318.5905,N,11720.2449,W,6.639,51.788,041110,0,W,A*12 77 | $GPRMC,191330.62,A,3318.5934,N,11720.2387,W,5.702,51.529,041110,0,W,A*10 78 | $GPRMC,191333.62,A,3318.5975,N,11720.2343,W,5.187,49.959,041110,0,W,A*17 79 | $GPRMC,191336.62,A,3318.6010,N,11720.2303,W,5.891,51.565,041110,0,W,A*1B 80 | $GPRMC,191339.62,A,3318.6056,N,11720.2259,W,6.783,48.017,041110,0,W,A*1F 81 | $GPRMC,191342.62,A,3318.6096,N,11720.2217,W,5.410,45.581,041110,0,W,A*18 82 | $GPRMC,191348.62,A,3318.6143,N,11720.2170,W,4.351,44.458,041110,0,W,A*1E 83 | $GPRMC,191530.62,A,3318.6623,N,11720.1702,W,5.145,37.794,041110,0,W,A*17 84 | $GPRMC,191533.62,A,3318.6659,N,11720.1666,W,5.968,38.206,041110,0,W,A*1C 85 | $GPRMC,191639.62,A,3318.6973,N,11720.1371,W,5.133,50.252,041110,0,W,A*18 86 | $GPRMC,191642.62,A,3318.7009,N,11720.1334,W,5.246,48.989,041110,0,W,A*15 87 | $GPRMC,191645.62,A,3318.7041,N,11720.1299,W,4.593,43.585,041110,0,W,A*1D 88 | $GPRMC,191648.62,A,3318.7066,N,11720.1275,W,4.952,46.227,041110,0,W,A*1C 89 | $GPRMC,191651.62,A,3318.7091,N,11720.1238,W,5.562,46.439,041110,0,W,A*12 90 | $GPRMC,191654.62,A,3318.7119,N,11720.1209,W,4.891,46.573,041110,0,W,A*1B 91 | $GPRMC,191657.62,A,3318.7140,N,11720.1167,W,5.509,46.353,041110,0,W,A*16 92 | $GPRMC,191703.62,A,3318.7193,N,11720.1066,W,5.659,54.037,041110,0,W,A*1C 93 | $GPRMC,191706.62,A,3318.7216,N,11720.0985,W,7.066,70.758,041110,0,W,A*12 94 | $GPRMC,191712.62,A,3318.7233,N,11720.0861,W,7.306,91.086,041110,0,W,A*15 95 | $GPRMC,191715.62,A,3318.7223,N,11720.0790,W,7.986,81.763,041110,0,W,A*1D 96 | $GPRMC,191718.62,A,3318.7243,N,11720.0702,W,7.905,72.672,041110,0,W,A*1B 97 | $GPRMC,191721.62,A,3318.7269,N,11720.0639,W,7.641,67.672,041110,0,W,A*1B 98 | $GPRMC,191724.62,A,3318.7295,N,11720.0578,W,6.013,55.378,041110,0,W,A*15 99 | $GPRMC,191727.62,A,3318.7335,N,11720.0532,W,8.232,28.406,041110,0,W,A*18 100 | $GPRMC,191730.62,A,3318.7424,N,11720.0509,W,10.642,11.339,041110,0,W,A*2A 101 | $GPRMC,191733.62,A,3318.7519,N,11720.0501,W,11.018,2.502,041110,0,W,A*1A 102 | $GPRMC,191736.62,A,3318.7608,N,11720.0479,W,11.058,23.550,041110,0,W,A*22 103 | $GPRMC,191739.62,A,3318.7705,N,11720.0377,W,19.740,47.090,041110,0,W,A*25 104 | $GPRMC,191742.62,A,3318.7847,N,11720.0194,W,29.807,46.789,041110,0,W,A*2E 105 | $GPRMC,191745.62,A,3318.8031,N,11719.9952,W,34.278,47.927,041110,0,W,A*2B 106 | $GPRMC,191748.62,A,3318.8226,N,11719.9681,W,35.686,49.601,041110,0,W,A*22 107 | $GPRMC,191751.62,A,3318.8422,N,11719.9404,W,35.388,52.177,041110,0,W,A*20 108 | $GPRMC,191754.62,A,3318.8597,N,11719.9110,W,35.995,57.222,041110,0,W,A*2A 109 | $GPRMC,191757.62,A,3318.8768,N,11719.8794,W,36.695,58.466,041110,0,W,A*25 110 | $GPRMC,191800.62,A,3318.8924,N,11719.8481,W,35.579,59.154,041110,0,W,A*2E 111 | $GPRMC,191803.62,A,3318.9070,N,11719.8189,W,33.369,57.020,041110,0,W,A*24 112 | $GPRMC,191806.62,A,3318.9199,N,11719.7910,W,30.544,69.451,041110,0,W,A*25 113 | $GPRMC,191809.62,A,3318.9209,N,11719.7616,W,29.849,101.301,041110,0,W,A*1C 114 | $GPRMC,191812.62,A,3318.9118,N,11719.7322,W,32.208,110.030,041110,0,W,A*13 115 | $GPRMC,191815.62,A,3318.9011,N,11719.7013,W,34.445,110.994,041110,0,W,A*13 116 | $GPRMC,191818.62,A,3318.8915,N,11719.6701,W,36.337,111.477,041110,0,W,A*16 117 | $GPRMC,191821.62,A,3318.8798,N,11719.6369,W,38.470,110.935,041110,0,W,A*1D 118 | $GPRMC,191824.62,A,3318.8686,N,11719.5997,W,39.872,103.205,041110,0,W,A*1B 119 | $GPRMC,191827.62,A,3318.8630,N,11719.5580,W,40.415,93.889,041110,0,W,A*2A 120 | $GPRMC,191830.62,A,3318.8600,N,11719.5175,W,39.877,90.551,041110,0,W,A*2C 121 | $GPRMC,191833.62,A,3318.8606,N,11719.4773,W,40.441,81.818,041110,0,W,A*2F 122 | $GPRMC,191836.62,A,3318.8686,N,11719.4383,W,39.479,77.419,041110,0,W,A*28 123 | $GPRMC,191839.62,A,3318.8760,N,11719.4001,W,38.804,82.008,041110,0,W,A*2E 124 | $GPRMC,191842.62,A,3318.8772,N,11719.3618,W,37.784,92.664,041110,0,W,A*2D 125 | $GPRMC,191845.62,A,3318.8715,N,11719.3250,W,36.943,102.550,041110,0,W,A*1B 126 | $GPRMC,191848.62,A,3318.8645,N,11719.2890,W,36.476,100.345,041110,0,W,A*1E 127 | $GPRMC,191851.62,A,3318.8588,N,11719.2538,W,37.376,93.041,041110,0,W,A*21 128 | $GPRMC,191854.62,A,3318.8585,N,11719.2159,W,37.461,89.570,041110,0,W,A*27 129 | $GPRMC,191857.62,A,3318.8597,N,11719.1786,W,37.558,89.786,041110,0,W,A*20 130 | $GPRMC,191900.62,A,3318.8574,N,11719.1417,W,36.957,100.536,041110,0,W,A*1E 131 | $GPRMC,191903.62,A,3318.8503,N,11719.1055,W,36.906,105.162,041110,0,W,A*1B 132 | $GPRMC,191906.62,A,3318.8417,N,11719.0692,W,36.595,107.366,041110,0,W,A*14 133 | $GPRMC,191909.62,A,3318.8319,N,11719.0382,W,30.058,117.078,041110,0,W,A*19 134 | $GPRMC,191912.62,A,3318.8195,N,11719.0210,W,19.050,137.934,041110,0,W,A*1F 135 | $GPRMC,191915.62,A,3318.8050,N,11719.0190,W,16.614,191.646,041110,0,W,A*14 136 | $GPRMC,191918.62,A,3318.7908,N,11719.0287,W,21.243,210.454,041110,0,W,A*1E 137 | $GPRMC,191921.62,A,3318.7733,N,11719.0420,W,26.344,212.271,041110,0,W,A*1B 138 | $GPRMC,191924.62,A,3318.7528,N,11719.0570,W,29.884,212.054,041110,0,W,A*1F 139 | $GPRMC,191927.62,A,3318.7307,N,11719.0751,W,33.552,211.661,041110,0,W,A*18 140 | $GPRMC,191930.62,A,3318.7059,N,11719.0956,W,36.004,213.000,041110,0,W,A*1F 141 | $GPRMC,191933.62,A,3318.6810,N,11719.1157,W,34.502,213.086,041110,0,W,A*1F 142 | $GPRMC,191936.62,A,3318.6568,N,11719.1343,W,32.750,212.594,041110,0,W,A*1B 143 | $GPRMC,191939.62,A,3318.6343,N,11719.1531,W,30.434,212.777,041110,0,W,A*14 144 | $GPRMC,191942.62,A,3318.6132,N,11719.1695,W,28.210,213.383,041110,0,W,A*16 145 | $GPRMC,191945.62,A,3318.5939,N,11719.1850,W,26.494,212.809,041110,0,W,A*1A 146 | $GPRMC,191948.62,A,3318.5752,N,11719.1985,W,24.816,208.743,041110,0,W,A*13 147 | $GPRMC,191951.62,A,3318.5570,N,11719.2057,W,22.915,188.056,041110,0,W,A*10 148 | $GPRMC,191954.62,A,3318.5379,N,11719.2008,W,21.763,159.316,041110,0,W,A*17 149 | $GPRMC,191957.62,A,3318.5220,N,11719.1908,W,21.475,153.213,041110,0,W,A*19 150 | $GPRMC,192000.62,A,3318.5052,N,11719.1819,W,22.065,152.538,041110,0,W,A*1E 151 | $GPRMC,192003.62,A,3318.4883,N,11719.1700,W,23.140,155.046,041110,0,W,A*13 152 | $GPRMC,192006.62,A,3318.4704,N,11719.1604,W,22.561,163.133,041110,0,W,A*13 153 | $GPRMC,192009.62,A,3318.4521,N,11719.1546,W,22.445,162.703,041110,0,W,A*1F 154 | $GPRMC,192012.62,A,3318.4355,N,11719.1474,W,20.971,159.680,041110,0,W,A*1A 155 | $GPRMC,192015.62,A,3318.4233,N,11719.1420,W,11.951,162.098,041110,0,W,A*1A 156 | $GPRMC,192021.62,A,3318.4201,N,11719.1393,W,5.982,110.998,041110,0,W,A*24 157 | $GPRMC,192024.62,A,3318.4233,N,11719.1324,W,9.728,38.442,041110,0,W,A*1F 158 | $GPRMC,192027.62,A,3318.4334,N,11719.1238,W,13.399,39.263,041110,0,W,A*27 159 | $GPRMC,192030.62,A,3318.4444,N,11719.1136,W,15.577,44.341,041110,0,W,A*27 160 | $GPRMC,192033.62,A,3318.4537,N,11719.1012,W,17.221,53.907,041110,0,W,A*2E 161 | $GPRMC,192036.62,A,3318.4625,N,11719.0859,W,18.330,61.357,041110,0,W,A*2D 162 | $GPRMC,192039.62,A,3318.4701,N,11719.0687,W,19.557,67.325,041110,0,W,A*2D 163 | $GPRMC,192042.62,A,3318.4762,N,11719.0496,W,19.762,74.507,041110,0,W,A*26 164 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip1005.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,202518.61,A,3318.5604,N,11718.6545,W,34.774,12.693,041110,0,W,A*2B 3 | $GPRMC,202521.61,A,3318.5899,N,11718.6461,W,36.634,13.098,041110,0,W,A*27 4 | $GPRMC,202524.61,A,3318.6209,N,11718.6381,W,37.781,12.531,041110,0,W,A*22 5 | $GPRMC,202527.61,A,3318.6514,N,11718.6293,W,38.186,11.756,041110,0,W,A*26 6 | $GPRMC,202530.61,A,3318.6797,N,11718.6216,W,32.275,9.745,041110,0,W,A*1A 7 | $GPRMC,202533.61,A,3318.7031,N,11718.6180,W,22.894,12.421,041110,0,W,A*20 8 | $GPRMC,202536.61,A,3318.7194,N,11718.6155,W,15.395,11.997,041110,0,W,A*2E 9 | $GPRMC,202539.61,A,3318.7284,N,11718.6147,W,6.864,14.534,041110,0,W,A*17 10 | $GPRMC,202545.61,A,3318.7350,N,11718.6137,W,6.932,12.536,041110,0,W,A*15 11 | $GPRMC,202548.61,A,3318.7431,N,11718.6108,W,12.891,4.654,041110,0,W,A*19 12 | $GPRMC,202551.61,A,3318.7514,N,11718.6177,W,13.371,295.494,041110,0,W,A*1F 13 | $GPRMC,202554.61,A,3318.7526,N,11718.6369,W,21.957,269.738,041110,0,W,A*1F 14 | $GPRMC,202557.61,A,3318.7518,N,11718.6680,W,34.072,269.293,041110,0,W,A*1D 15 | $GPRMC,202600.61,A,3318.7522,N,11718.7072,W,38.959,269.933,041110,0,W,A*12 16 | $GPRMC,202603.61,A,3318.7520,N,11718.7475,W,38.363,269.509,041110,0,W,A*16 17 | $GPRMC,202606.61,A,3318.7526,N,11718.7859,W,36.712,269.212,041110,0,W,A*16 18 | $GPRMC,202609.61,A,3318.7528,N,11718.8222,W,34.857,270.036,041110,0,W,A*1E 19 | $GPRMC,202612.61,A,3318.7529,N,11718.8571,W,36.234,271.560,041110,0,W,A*1E 20 | $GPRMC,202615.61,A,3318.7541,N,11718.8968,W,40.355,271.557,041110,0,W,A*10 21 | $GPRMC,202618.61,A,3318.7567,N,11718.9376,W,38.959,281.952,041110,0,W,A*12 22 | $GPRMC,202621.61,A,3318.7698,N,11718.9729,W,38.226,305.593,041110,0,W,A*1A 23 | $GPRMC,202624.61,A,3318.7920,N,11718.9976,W,37.497,327.269,041110,0,W,A*16 24 | $GPRMC,202627.61,A,3318.8193,N,11719.0144,W,36.822,331.119,041110,0,W,A*1B 25 | $GPRMC,202630.61,A,3318.8467,N,11719.0322,W,37.332,324.605,041110,0,W,A*14 26 | $GPRMC,202633.61,A,3318.8689,N,11719.0603,W,39.265,307.142,041110,0,W,A*1B 27 | $GPRMC,202636.61,A,3318.8826,N,11719.0975,W,40.123,284.778,041110,0,W,A*11 28 | $GPRMC,202639.61,A,3318.8887,N,11719.1381,W,41.314,279.160,041110,0,W,A*1F 29 | $GPRMC,202642.61,A,3318.8943,N,11719.1804,W,43.476,279.515,041110,0,W,A*1B 30 | $GPRMC,202645.61,A,3318.9007,N,11719.2252,W,45.774,280.286,041110,0,W,A*12 31 | $GPRMC,202648.61,A,3318.9071,N,11719.2725,W,47.718,279.480,041110,0,W,A*15 32 | $GPRMC,202651.61,A,3318.9139,N,11719.3205,W,48.175,279.327,041110,0,W,A*1E 33 | $GPRMC,202654.61,A,3318.9165,N,11719.3674,W,47.623,269.723,041110,0,W,A*1A 34 | $GPRMC,202657.61,A,3318.9122,N,11719.4151,W,46.945,260.719,041110,0,W,A*13 35 | $GPRMC,202700.61,A,3318.9027,N,11719.4596,W,44.851,253.922,041110,0,W,A*1B 36 | $GPRMC,202703.61,A,3318.8949,N,11719.5025,W,44.462,266.741,041110,0,W,A*15 37 | $GPRMC,202706.61,A,3318.8975,N,11719.5462,W,44.300,283.670,041110,0,W,A*13 38 | $GPRMC,202709.61,A,3318.9077,N,11719.5891,W,43.254,287.942,041110,0,W,A*1B 39 | $GPRMC,202712.61,A,3318.9174,N,11719.6309,W,43.454,279.074,041110,0,W,A*11 40 | $GPRMC,202715.61,A,3318.9221,N,11719.6738,W,43.651,274.656,041110,0,W,A*1F 41 | $GPRMC,202718.61,A,3318.9265,N,11719.7161,W,39.819,281.961,041110,0,W,A*17 42 | $GPRMC,202721.61,A,3318.9361,N,11719.7471,W,25.874,293.283,041110,0,W,A*1E 43 | $GPRMC,202724.61,A,3318.9421,N,11719.7628,W,12.104,295.071,041110,0,W,A*15 44 | $GPRMC,202800.61,A,3318.9426,N,11719.7692,W,7.468,284.316,041110,0,W,A*23 45 | $GPRMC,202803.61,A,3318.9400,N,11719.7812,W,18.591,241.028,041110,0,W,A*1C 46 | $GPRMC,202806.61,A,3318.9274,N,11719.7989,W,28.186,233.016,041110,0,W,A*16 47 | $GPRMC,202809.61,A,3318.9115,N,11719.8239,W,34.220,234.715,041110,0,W,A*13 48 | $GPRMC,202812.61,A,3318.8937,N,11719.8546,W,39.582,237.994,041110,0,W,A*19 49 | $GPRMC,202815.61,A,3318.8754,N,11719.8890,W,41.530,239.268,041110,0,W,A*13 50 | $GPRMC,202818.61,A,3318.8565,N,11719.9250,W,42.327,237.412,041110,0,W,A*1F 51 | $GPRMC,202821.61,A,3318.8354,N,11719.9596,W,42.267,231.870,041110,0,W,A*17 52 | $GPRMC,202824.61,A,3318.8119,N,11719.9911,W,41.588,228.269,041110,0,W,A*15 53 | $GPRMC,202827.61,A,3318.7880,N,11720.0212,W,41.150,228.174,041110,0,W,A*15 54 | $GPRMC,202830.61,A,3318.7646,N,11720.0513,W,40.611,227.648,041110,0,W,A*15 55 | $GPRMC,202833.61,A,3318.7415,N,11720.0814,W,40.715,228.373,041110,0,W,A*1F 56 | $GPRMC,202836.61,A,3318.7182,N,11720.1119,W,41.324,228.073,041110,0,W,A*10 57 | $GPRMC,202839.61,A,3318.6945,N,11720.1430,W,42.646,227.924,041110,0,W,A*15 58 | $GPRMC,202842.61,A,3318.6696,N,11720.1736,W,42.070,222.586,041110,0,W,A*1F 59 | $GPRMC,202845.61,A,3318.6420,N,11720.2005,W,43.284,216.199,041110,0,W,A*16 60 | $GPRMC,202848.61,A,3318.6136,N,11720.2276,W,44.214,222.334,041110,0,W,A*13 61 | $GPRMC,202851.61,A,3318.5883,N,11720.2601,W,44.421,232.731,041110,0,W,A*1B 62 | $GPRMC,202854.61,A,3318.5674,N,11720.2978,W,45.440,237.813,041110,0,W,A*15 63 | $GPRMC,202857.61,A,3318.5472,N,11720.3374,W,45.656,237.765,041110,0,W,A*1E 64 | $GPRMC,202900.61,A,3318.5275,N,11720.3774,W,46.336,238.240,041110,0,W,A*15 65 | $GPRMC,202903.61,A,3318.5066,N,11720.4171,W,45.985,236.883,041110,0,W,A*18 66 | $GPRMC,202906.61,A,3318.4844,N,11720.4534,W,44.653,229.727,041110,0,W,A*1B 67 | $GPRMC,202909.61,A,3318.4588,N,11720.4838,W,41.236,222.372,041110,0,W,A*15 68 | $GPRMC,202912.61,A,3318.4351,N,11720.5058,W,30.055,213.204,041110,0,W,A*11 69 | $GPRMC,202915.61,A,3318.4170,N,11720.5161,W,19.960,206.284,041110,0,W,A*14 70 | $GPRMC,202918.61,A,3318.4086,N,11720.5205,W,6.972,205.021,041110,0,W,A*23 71 | $GPRMC,202945.61,A,3318.4003,N,11720.5241,W,13.981,203.423,041110,0,W,A*1E 72 | $GPRMC,202948.61,A,3318.3847,N,11720.5318,W,24.898,204.016,041110,0,W,A*19 73 | $GPRMC,202951.61,A,3318.3619,N,11720.5434,W,32.547,203.903,041110,0,W,A*1F 74 | $GPRMC,202954.61,A,3318.3348,N,11720.5576,W,36.178,204.915,041110,0,W,A*10 75 | $GPRMC,202957.61,A,3318.3071,N,11720.5743,W,37.015,210.486,041110,0,W,A*17 76 | $GPRMC,203000.61,A,3318.2813,N,11720.5934,W,36.375,212.021,041110,0,W,A*11 77 | $GPRMC,203003.61,A,3318.2562,N,11720.6128,W,35.891,213.288,041110,0,W,A*1D 78 | $GPRMC,203006.61,A,3318.2303,N,11720.6328,W,37.382,212.840,041110,0,W,A*1F 79 | $GPRMC,203009.61,A,3318.2041,N,11720.6535,W,38.335,213.529,041110,0,W,A*1F 80 | $GPRMC,203012.61,A,3318.1771,N,11720.6747,W,38.414,213.260,041110,0,W,A*1B 81 | $GPRMC,203015.61,A,3318.1502,N,11720.6958,W,38.209,212.766,041110,0,W,A*12 82 | $GPRMC,203018.61,A,3318.1233,N,11720.7164,W,37.545,213.277,041110,0,W,A*18 83 | $GPRMC,203021.61,A,3318.0977,N,11720.7365,W,36.118,213.358,041110,0,W,A*1A 84 | $GPRMC,203024.61,A,3318.0733,N,11720.7558,W,32.373,213.664,041110,0,W,A*18 85 | $GPRMC,203027.61,A,3318.0525,N,11720.7722,W,28.122,213.231,041110,0,W,A*18 86 | $GPRMC,203030.61,A,3318.0342,N,11720.7864,W,25.079,213.168,041110,0,W,A*19 87 | $GPRMC,203033.61,A,3318.0167,N,11720.8001,W,25.479,212.855,041110,0,W,A*19 88 | $GPRMC,203036.61,A,3317.9979,N,11720.8150,W,28.072,214.619,041110,0,W,A*1A 89 | $GPRMC,203039.61,A,3317.9789,N,11720.8320,W,28.003,218.339,041110,0,W,A*1C 90 | $GPRMC,203042.61,A,3317.9622,N,11720.8484,W,25.256,222.050,041110,0,W,A*13 91 | $GPRMC,203045.61,A,3317.9465,N,11720.8665,W,27.276,225.935,041110,0,W,A*15 92 | $GPRMC,203048.61,A,3317.9308,N,11720.8870,W,28.536,230.315,041110,0,W,A*1E 93 | $GPRMC,203051.61,A,3317.9158,N,11720.9106,W,30.736,234.419,041110,0,W,A*1C 94 | $GPRMC,203054.61,A,3317.9010,N,11720.9379,W,32.570,238.121,041110,0,W,A*1E 95 | $GPRMC,203057.61,A,3317.8880,N,11720.9666,W,31.480,240.613,041110,0,W,A*12 96 | $GPRMC,203100.61,A,3317.8766,N,11720.9932,W,28.583,241.541,041110,0,W,A*17 97 | $GPRMC,203103.61,A,3317.8650,N,11721.0193,W,31.973,240.946,041110,0,W,A*1A 98 | $GPRMC,203106.61,A,3317.8518,N,11721.0480,W,34.025,240.419,041110,0,W,A*1F 99 | $GPRMC,203109.61,A,3317.8376,N,11721.0787,W,36.508,240.750,041110,0,W,A*1C 100 | $GPRMC,203112.61,A,3317.8221,N,11721.1113,W,37.848,240.445,041110,0,W,A*10 101 | $GPRMC,203115.61,A,3317.8074,N,11721.1449,W,37.824,242.257,041110,0,W,A*12 102 | $GPRMC,203118.61,A,3317.7924,N,11721.1786,W,37.707,241.915,041110,0,W,A*1C 103 | $GPRMC,203121.61,A,3317.7782,N,11721.2112,W,36.087,243.142,041110,0,W,A*1A 104 | $GPRMC,203124.61,A,3317.7646,N,11721.2452,W,39.805,241.602,041110,0,W,A*1B 105 | $GPRMC,203127.61,A,3317.7484,N,11721.2803,W,39.155,241.127,041110,0,W,A*10 106 | $GPRMC,203130.61,A,3317.7320,N,11721.3133,W,36.408,237.785,041110,0,W,A*19 107 | $GPRMC,203133.61,A,3317.7163,N,11721.3431,W,33.601,239.954,041110,0,W,A*1A 108 | $GPRMC,203136.61,A,3317.7028,N,11721.3717,W,32.020,240.551,041110,0,W,A*15 109 | $GPRMC,203139.61,A,3317.6904,N,11721.3984,W,29.910,240.879,041110,0,W,A*1F 110 | $GPRMC,203142.61,A,3317.6780,N,11721.4241,W,30.117,240.631,041110,0,W,A*11 111 | $GPRMC,203145.61,A,3317.6658,N,11721.4498,W,28.649,241.024,041110,0,W,A*16 112 | $GPRMC,203148.61,A,3317.6540,N,11721.4754,W,31.014,240.603,041110,0,W,A*16 113 | $GPRMC,203151.61,A,3317.6410,N,11721.5020,W,30.355,240.759,041110,0,W,A*16 114 | $GPRMC,203154.61,A,3317.6285,N,11721.5283,W,30.219,240.716,041110,0,W,A*10 115 | $GPRMC,203157.61,A,3317.6155,N,11721.5558,W,33.097,241.024,041110,0,W,A*1C 116 | $GPRMC,203200.61,A,3317.6012,N,11721.5860,W,36.356,240.400,041110,0,W,A*11 117 | $GPRMC,203203.61,A,3317.5861,N,11721.6184,W,37.889,240.890,041110,0,W,A*10 118 | $GPRMC,203206.61,A,3317.5704,N,11721.6521,W,39.244,240.829,041110,0,W,A*15 119 | $GPRMC,203209.61,A,3317.5539,N,11721.6868,W,39.798,240.655,041110,0,W,A*17 120 | $GPRMC,203212.61,A,3317.5380,N,11721.7210,W,38.801,241.124,041110,0,W,A*13 121 | $GPRMC,203215.61,A,3317.5223,N,11721.7550,W,39.228,240.947,041110,0,W,A*13 122 | $GPRMC,203218.61,A,3317.5062,N,11721.7891,W,39.239,240.653,041110,0,W,A*13 123 | $GPRMC,203221.61,A,3317.4902,N,11721.8233,W,38.984,240.384,041110,0,W,A*19 124 | $GPRMC,203224.61,A,3317.4743,N,11721.8572,W,39.230,240.977,041110,0,W,A*16 125 | $GPRMC,203227.61,A,3317.4571,N,11721.8918,W,41.454,238.007,041110,0,W,A*1C 126 | $GPRMC,203230.61,A,3317.4384,N,11721.9285,W,43.664,240.093,041110,0,W,A*19 127 | $GPRMC,203233.61,A,3317.4207,N,11721.9674,W,44.265,240.830,041110,0,W,A*19 128 | $GPRMC,203236.61,A,3317.4030,N,11722.0064,W,44.418,240.792,041110,0,W,A*1C 129 | $GPRMC,203239.61,A,3317.3849,N,11722.0452,W,44.386,240.794,041110,0,W,A*15 130 | $GPRMC,203242.61,A,3317.3666,N,11722.0843,W,45.345,240.860,041110,0,W,A*1C 131 | $GPRMC,203245.61,A,3317.3477,N,11722.1248,W,46.372,241.008,041110,0,W,A*19 132 | $GPRMC,203248.61,A,3317.3281,N,11722.1658,W,47.460,240.189,041110,0,W,A*12 133 | $GPRMC,203251.61,A,3317.3076,N,11722.2057,W,45.542,236.720,041110,0,W,A*1D 134 | $GPRMC,203254.61,A,3317.2845,N,11722.2410,W,44.672,228.276,041110,0,W,A*1E 135 | $GPRMC,203257.61,A,3317.2571,N,11722.2705,W,43.829,219.554,041110,0,W,A*12 136 | $GPRMC,203300.61,A,3317.2269,N,11722.2967,W,44.740,211.079,041110,0,W,A*10 137 | $GPRMC,203303.61,A,3317.1914,N,11722.3166,W,49.849,203.518,041110,0,W,A*13 138 | $GPRMC,203306.61,A,3317.1498,N,11722.3336,W,53.156,195.603,041110,0,W,A*11 139 | $GPRMC,203309.61,A,3317.1042,N,11722.3419,W,55.758,185.521,041110,0,W,A*1B 140 | $GPRMC,203312.61,A,3317.0568,N,11722.3453,W,56.853,185.523,041110,0,W,A*16 141 | $GPRMC,203315.61,A,3317.0090,N,11722.3501,W,56.914,185.396,041110,0,W,A*1F 142 | $GPRMC,203318.61,A,3316.9608,N,11722.3537,W,57.778,181.553,041110,0,W,A*16 143 | $GPRMC,203321.61,A,3316.9120,N,11722.3504,W,57.093,177.009,041110,0,W,A*10 144 | $GPRMC,203324.61,A,3316.8642,N,11722.3464,W,56.186,176.814,041110,0,W,A*11 145 | $GPRMC,203327.61,A,3316.8174,N,11722.3426,W,55.068,176.389,041110,0,W,A*1B 146 | $GPRMC,203330.61,A,3316.7720,N,11722.3388,W,54.306,176.984,041110,0,W,A*1B 147 | $GPRMC,203333.61,A,3316.7270,N,11722.3357,W,53.130,177.847,041110,0,W,A*15 148 | $GPRMC,203336.61,A,3316.6833,N,11722.3374,W,52.354,188.564,041110,0,W,A*10 149 | $GPRMC,203339.61,A,3316.6410,N,11722.3508,W,51.777,194.283,041110,0,W,A*1A 150 | $GPRMC,203342.61,A,3316.5977,N,11722.3590,W,51.092,180.609,041110,0,W,A*17 151 | $GPRMC,203345.61,A,3316.5556,N,11722.3514,W,51.131,166.101,041110,0,W,A*1C 152 | $GPRMC,203348.61,A,3316.5141,N,11722.3343,W,54.283,161.106,041110,0,W,A*18 153 | $GPRMC,203351.61,A,3316.4705,N,11722.3156,W,55.435,161.532,041110,0,W,A*18 154 | $GPRMC,203354.61,A,3316.4264,N,11722.2970,W,56.089,161.112,041110,0,W,A*14 155 | $GPRMC,203357.61,A,3316.3822,N,11722.2783,W,56.304,161.302,041110,0,W,A*1F 156 | $GPRMC,203400.61,A,3316.3378,N,11722.2597,W,55.983,161.422,041110,0,W,A*1A 157 | $GPRMC,203403.61,A,3316.2938,N,11722.2417,W,55.795,161.311,041110,0,W,A*11 158 | $GPRMC,203406.61,A,3316.2496,N,11722.2235,W,55.991,160.877,041110,0,W,A*1B 159 | $GPRMC,203409.61,A,3316.2053,N,11722.2055,W,55.545,161.249,041110,0,W,A*1E 160 | $GPRMC,203412.61,A,3316.1616,N,11722.1881,W,55.132,161.320,041110,0,W,A*18 161 | $GPRMC,203415.61,A,3316.1182,N,11722.1710,W,54.876,161.217,041110,0,W,A*1F 162 | $GPRMC,203418.61,A,3316.0745,N,11722.1535,W,54.951,161.384,041110,0,W,A*14 163 | $GPRMC,203421.61,A,3316.0313,N,11722.1386,W,53.712,168.334,041110,0,W,A*1B 164 | $GPRMC,203424.61,A,3315.9868,N,11722.1315,W,52.729,175.639,041110,0,W,A*14 165 | $GPRMC,203427.61,A,3315.9427,N,11722.1321,W,51.436,183.946,041110,0,W,A*17 166 | $GPRMC,203430.61,A,3315.9005,N,11722.1399,W,51.874,188.551,041110,0,W,A*1D 167 | $GPRMC,203433.61,A,3315.8579,N,11722.1500,W,51.220,188.364,041110,0,W,A*1C 168 | $GPRMC,203436.61,A,3315.8157,N,11722.1590,W,51.156,188.566,041110,0,W,A*1E 169 | $GPRMC,203439.61,A,3315.7736,N,11722.1668,W,51.258,188.731,041110,0,W,A*16 170 | $GPRMC,203442.61,A,3315.7313,N,11722.1749,W,51.163,188.360,041110,0,W,A*10 171 | $GPRMC,203445.61,A,3315.6883,N,11722.1830,W,51.459,188.465,041110,0,W,A*1B 172 | $GPRMC,203448.61,A,3315.6462,N,11722.1904,W,50.763,188.241,041110,0,W,A*18 173 | $GPRMC,203451.61,A,3315.6044,N,11722.1980,W,50.444,188.454,041110,0,W,A*18 174 | $GPRMC,203454.61,A,3315.5628,N,11722.2057,W,49.765,188.205,041110,0,W,A*18 175 | $GPRMC,203457.61,A,3315.5222,N,11722.2130,W,49.707,188.378,041110,0,W,A*1A 176 | $GPRMC,203500.61,A,3315.4807,N,11722.2207,W,50.186,188.747,041110,0,W,A*1D 177 | $GPRMC,203503.61,A,3315.4391,N,11722.2287,W,50.469,188.939,041110,0,W,A*11 178 | $GPRMC,203506.61,A,3315.3974,N,11722.2386,W,51.111,193.734,041110,0,W,A*10 179 | $GPRMC,203509.61,A,3315.3566,N,11722.2537,W,50.885,199.806,041110,0,W,A*1D 180 | $GPRMC,203512.61,A,3315.3166,N,11722.2741,W,51.654,204.360,041110,0,W,A*1F 181 | $GPRMC,203515.61,A,3315.2791,N,11722.2988,W,51.643,211.209,041110,0,W,A*10 182 | $GPRMC,203518.61,A,3315.2440,N,11722.3282,W,51.199,216.006,041110,0,W,A*18 183 | $GPRMC,203521.61,A,3315.2119,N,11722.3614,W,51.044,223.561,041110,0,W,A*13 184 | $GPRMC,203524.61,A,3315.1817,N,11722.3982,W,50.620,227.137,041110,0,W,A*14 185 | $GPRMC,203527.61,A,3315.1534,N,11722.4358,W,50.404,227.654,041110,0,W,A*17 186 | $GPRMC,203530.61,A,3315.1255,N,11722.4730,W,50.435,227.781,041110,0,W,A*10 187 | $GPRMC,203533.61,A,3315.0968,N,11722.5107,W,51.807,227.808,041110,0,W,A*16 188 | $GPRMC,203536.61,A,3315.0672,N,11722.5495,W,52.120,227.608,041110,0,W,A*18 189 | $GPRMC,203539.61,A,3315.0381,N,11722.5877,W,52.570,227.667,041110,0,W,A*16 190 | $GPRMC,203542.61,A,3315.0083,N,11722.6270,W,53.139,227.765,041110,0,W,A*1E 191 | $GPRMC,203545.61,A,3314.9784,N,11722.6659,W,52.197,227.629,041110,0,W,A*12 192 | $GPRMC,203548.61,A,3314.9496,N,11722.7037,W,50.519,226.410,041110,0,W,A*19 193 | $GPRMC,203551.61,A,3314.9186,N,11722.7371,W,50.511,214.938,041110,0,W,A*1A 194 | $GPRMC,203554.61,A,3314.8812,N,11722.7596,W,49.853,199.876,041110,0,W,A*1B 195 | $GPRMC,203557.61,A,3314.8396,N,11722.7724,W,51.941,191.933,041110,0,W,A*17 196 | $GPRMC,203600.61,A,3314.7960,N,11722.7837,W,53.111,192.833,041110,0,W,A*1A 197 | $GPRMC,203603.61,A,3314.7524,N,11722.7943,W,52.644,191.291,041110,0,W,A*10 198 | $GPRMC,203606.61,A,3314.7090,N,11722.8043,W,52.581,191.106,041110,0,W,A*1E 199 | $GPRMC,203609.61,A,3314.6654,N,11722.8121,W,52.738,183.620,041110,0,W,A*1B 200 | $GPRMC,203612.61,A,3314.6198,N,11722.8086,W,53.066,176.534,041110,0,W,A*1B 201 | $GPRMC,203615.61,A,3314.5757,N,11722.8038,W,51.119,176.040,041110,0,W,A*12 202 | $GPRMC,203618.61,A,3314.5331,N,11722.8004,W,50.483,178.527,041110,0,W,A*19 203 | $GPRMC,203621.61,A,3314.4924,N,11722.8057,W,49.306,194.855,041110,0,W,A*12 204 | $GPRMC,203624.61,A,3314.4537,N,11722.8233,W,49.770,205.175,041110,0,W,A*1C 205 | $GPRMC,203627.61,A,3314.4169,N,11722.8459,W,49.831,207.456,041110,0,W,A*16 206 | $GPRMC,203630.61,A,3314.3804,N,11722.8687,W,49.947,207.979,041110,0,W,A*14 207 | $GPRMC,203633.61,A,3314.3441,N,11722.8926,W,49.497,209.745,041110,0,W,A*11 208 | $GPRMC,203636.61,A,3314.3107,N,11722.9212,W,49.424,220.555,041110,0,W,A*1E 209 | $GPRMC,203639.61,A,3314.2834,N,11722.9583,W,48.665,234.569,041110,0,W,A*1A 210 | $GPRMC,203642.61,A,3314.2610,N,11723.0005,W,49.648,236.977,041110,0,W,A*12 211 | $GPRMC,203645.61,A,3314.2394,N,11723.0437,W,49.860,237.554,041110,0,W,A*11 212 | $GPRMC,203648.61,A,3314.2172,N,11723.0861,W,48.795,237.206,041110,0,W,A*1D 213 | $GPRMC,203651.61,A,3314.1953,N,11723.1272,W,48.232,237.329,041110,0,W,A*10 214 | $GPRMC,203654.61,A,3314.1738,N,11723.1671,W,46.992,237.139,041110,0,W,A*1D 215 | $GPRMC,203657.61,A,3314.1527,N,11723.2059,W,45.503,235.303,041110,0,W,A*13 216 | $GPRMC,203700.61,A,3314.1290,N,11723.2406,W,44.698,223.810,041110,0,W,A*1B 217 | $GPRMC,203703.61,A,3314.1005,N,11723.2672,W,42.777,211.109,041110,0,W,A*11 218 | $GPRMC,203706.61,A,3314.0690,N,11723.2853,W,40.773,205.964,041110,0,W,A*12 219 | $GPRMC,203709.61,A,3314.0392,N,11723.3018,W,38.955,206.896,041110,0,W,A*16 220 | $GPRMC,203712.61,A,3314.0117,N,11723.3179,W,32.528,205.478,041110,0,W,A*16 221 | $GPRMC,203715.61,A,3313.9913,N,11723.3296,W,22.361,204.393,041110,0,W,A*18 222 | $GPRMC,203718.61,A,3313.9802,N,11723.3355,W,9.670,203.166,041110,0,W,A*29 223 | $GPRMC,203800.61,A,3313.9678,N,11723.3415,W,19.772,206.681,041110,0,W,A*16 224 | $GPRMC,203803.61,A,3313.9490,N,11723.3527,W,29.755,207.956,041110,0,W,A*13 225 | $GPRMC,203806.61,A,3313.9241,N,11723.3701,W,37.463,212.229,041110,0,W,A*14 226 | $GPRMC,203809.61,A,3313.8955,N,11723.3920,W,42.301,212.914,041110,0,W,A*1D 227 | $GPRMC,203812.61,A,3313.8655,N,11723.4158,W,42.018,215.795,041110,0,W,A*13 228 | $GPRMC,203815.61,A,3313.8366,N,11723.4400,W,40.960,214.957,041110,0,W,A*1C 229 | $GPRMC,203818.61,A,3313.8083,N,11723.4648,W,40.851,215.555,041110,0,W,A*1B 230 | -------------------------------------------------------------------------------- /resources/data/Mobile-GPS-Trip1006.csv: -------------------------------------------------------------------------------- 1 | NMEA Sentence Code,UTC Time,Status,Latitude,Latitude Direction,Longitude,Longitude Direction,Speed (knots),Track Angle (degrees true),Date,MagneticVariation,Magnetic Variation Direction,[FAA Mode]-Optional,Checksum 2 | $GPRMC,204606.61,A,3313.4470,N,11723.5048,W,27.624,176.084,041110,0,W,A*1C 3 | $GPRMC,204609.61,A,3313.4176,N,11723.5024,W,39.720,174.940,041110,0,W,A*13 4 | $GPRMC,204612.61,A,3313.3791,N,11723.5002,W,46.646,175.232,041110,0,W,A*13 5 | $GPRMC,204615.61,A,3313.3395,N,11723.4938,W,47.504,168.438,041110,0,W,A*11 6 | $GPRMC,204618.61,A,3313.3013,N,11723.4801,W,45.377,157.465,041110,0,W,A*1E 7 | $GPRMC,204621.61,A,3313.2661,N,11723.4613,W,43.104,155.632,041110,0,W,A*19 8 | $GPRMC,204624.61,A,3313.2336,N,11723.4429,W,40.821,155.093,041110,0,W,A*10 9 | $GPRMC,204627.61,A,3313.2035,N,11723.4260,W,39.011,155.897,041110,0,W,A*11 10 | $GPRMC,204630.61,A,3313.1743,N,11723.4103,W,37.792,156.458,041110,0,W,A*1A 11 | $GPRMC,204633.61,A,3313.1456,N,11723.3952,W,38.037,155.643,041110,0,W,A*19 12 | $GPRMC,204636.61,A,3313.1160,N,11723.3796,W,38.676,155.806,041110,0,W,A*16 13 | $GPRMC,204639.61,A,3313.0863,N,11723.3637,W,38.956,155.777,041110,0,W,A*1C 14 | $GPRMC,204642.61,A,3313.0568,N,11723.3475,W,38.301,155.821,041110,0,W,A*16 15 | $GPRMC,204645.61,A,3313.0282,N,11723.3324,W,36.327,156.266,041110,0,W,A*11 16 | $GPRMC,204648.61,A,3313.0035,N,11723.3189,W,27.326,153.572,041110,0,W,A*11 17 | $GPRMC,204651.61,A,3312.9864,N,11723.3095,W,18.535,154.197,041110,0,W,A*11 18 | $GPRMC,204654.61,A,3312.9769,N,11723.3048,W,8.175,153.999,041110,0,W,A*26 19 | -------------------------------------------------------------------------------- /resources/geocoded_journeys.json: -------------------------------------------------------------------------------- 1 | [ 2 | {"name": "VehicleID", "type": "integer", "mode": "required" }, 3 | {"name": "UTCTime", "type": "timestamp", "mode": "required" }, 4 | {"name": "Offset", "type": "float", "mode" : "nullable"}, 5 | {"name": "Address", "type": "string", "mode" : "nullable"}, 6 | {"name": "Zipcode", "type": "string", "mode" : "nullable"}, 7 | {"name": "Speed", "type": "float", "mode" : "nullable"}, 8 | {"name": "Bearing", "type": "float", "mode" : "nullable"}, 9 | {"name": "Elevation", "type": "float", "mode" : "nullable"}, 10 | {"name": "Latitude", "type": "float", "mode" : "required"}, 11 | {"name": "Longitude", "type": "float", "mode" : "required"} 12 | ] -------------------------------------------------------------------------------- /resources/requirements.txt: -------------------------------------------------------------------------------- 1 | gcloud>=0.7.1 2 | google-api-python-client>=1.3.2 3 | google-apitools>=0.4.10 4 | pyYAML>=3.11 5 | oauth2client>=1.4.12 6 | python-dateutil==2.4.2 7 | httplib2==0.9.1 8 | googlemaps>=2.3.0 -------------------------------------------------------------------------------- /resources/setup.sh: -------------------------------------------------------------------------------- 1 | # Copyright 2016 Google Inc. All rights reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | #you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | # See the License for the specific language governing permissions and 10 | # setup.sh 11 | mkdir /tmp/creds 12 | bq mk sandiego_freeways 13 | bq mk --schema geocoded_journeys.json sandiego_freeways.geocoded_journeys 14 | mkdir /tmp/creds/data 15 | cp data/* /tmp/creds/data/ 16 | cp setup.yaml /tmp/creds/ 17 | -------------------------------------------------------------------------------- /resources/setup.yaml: -------------------------------------------------------------------------------- 1 | # [START setup] 2 | env: 3 | # Change to your project ID 4 | PROJECT_ID: 'your-project-id' 5 | # Change to datasetid 6 | DATASET_ID: 'sandiego_freeways' 7 | # Change to tableid 8 | TABLE_ID: 'geocoded_journeys' 9 | # Change this to your pubsub topic 10 | PUBSUB_TOPIC: 'projects/your-project-id/topics/traffic' 11 | # Change the following to your rootdir 12 | ROOTDIR: '/tmp/creds/data' 13 | # Change the following to your pull subscription 14 | SUBSCRIPTION: 'projects/your-project-id/subscriptions/mysubscription' 15 | # Change to your Google Maps API Key, see https://developers.google.com/maps/web-services/ 16 | MAPS_API_KEY: 'Your-server-key' 17 | # [END setup] 18 | -------------------------------------------------------------------------------- /web/bqapi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BigQuery and Maps API 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 223 | 224 | 225 | 226 |
227 | 228 | 229 | --------------------------------------------------------------------------------