├── .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 |