├── .gitignore ├── Docker ├── pull_pubsub_docker │ ├── Your_key.json │ ├── requirements.txt │ ├── Dockerfile │ └── config_geo_pubsub_pull.py └── push_pubsub_docker │ ├── Your_key.json │ ├── requirements.txt │ ├── Dockerfile │ └── config_geo_pubsub_push.py ├── images ├── geo_bq-arch.png ├── visual-map.png ├── geo_bq-push-4.png ├── geo_bq-subs-3.png ├── geo_bq_pull-5.png ├── geo_bq-schema-6.png └── geo_bq-topic-2.png ├── resources ├── requirements.txt ├── geocoded_journeys.json ├── setup.yaml ├── setup.sh ├── data │ ├── Mobile-GPS-Trip1001.csv │ ├── Mobile-GPS-Trip1006.csv │ ├── Mobile-GPS-Trip1003.csv │ ├── Mobile-GPS-Trip1.csv │ ├── Mobile-GPS-Trip1002.csv │ ├── Mobile-GPS-Trip100.csv │ ├── Mobile-GPS-Trip1000.csv │ ├── Mobile-GPS-Trip1004.csv │ ├── Mobile-GPS-Trip1005.csv │ └── Mobile-GPS-Trip10.csv └── Freeways-Metadata-2010_01_01-copyright-san-diego.txt ├── CONTRIBUTING.md ├── config_geo_pubsub_push.py ├── web └── bqapi.html ├── config_geo_pubsub_pull.py ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /Docker/pull_pubsub_docker/Your_key.json: -------------------------------------------------------------------------------- 1 | { 2 | REPLACE FILE WITH YOUR ACTUAL CREDENTIAL FILE 3 | } -------------------------------------------------------------------------------- /Docker/push_pubsub_docker/Your_key.json: -------------------------------------------------------------------------------- 1 | { 2 | REPLACE FILE WITH YOUR ACTUAL CREDENTIAL FILE 3 | } -------------------------------------------------------------------------------- /images/geo_bq-arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/HEAD/images/geo_bq-arch.png -------------------------------------------------------------------------------- /images/visual-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/HEAD/images/visual-map.png -------------------------------------------------------------------------------- /images/geo_bq-push-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/HEAD/images/geo_bq-push-4.png -------------------------------------------------------------------------------- /images/geo_bq-subs-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/HEAD/images/geo_bq-subs-3.png -------------------------------------------------------------------------------- /images/geo_bq_pull-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/HEAD/images/geo_bq_pull-5.png -------------------------------------------------------------------------------- /images/geo_bq-schema-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/HEAD/images/geo_bq-schema-6.png -------------------------------------------------------------------------------- /images/geo_bq-topic-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GoogleCloudPlatform/bigquery-reverse-geolocation/HEAD/images/geo_bq-topic-2.png -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /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/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/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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/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"] -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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). -------------------------------------------------------------------------------- /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/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/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) -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /web/bqapi.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------