gtfs-geojson 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +4 -3
- data/Gemfile.lock +26 -6
- data/README.md +37 -6
- data/bin/gtfs-rt_to_json +22 -0
- data/bin/gtfs_to_geojson +17 -0
- data/gtfs-geojson.gemspec +2 -0
- data/lib/gtfs-geojson.rb +15 -2
- data/lib/gtfs-geojson/version.rb +1 -1
- data/test/test.rb +5 -0
- metadata +22 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0cf8cde58aae1fc47ea83fc736c9098dda567c7b
|
4
|
+
data.tar.gz: fdafe8a7355e0a96085dc985551bc4a825287adc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e87025d9031bb79f5bf70a8f1abfd84a02bbf6077664b4e4666a8aa883c6a433682b2abfa634b2f4b1682a577a8554e61b3c0835607c53b17c629bdf9cee4bd
|
7
|
+
data.tar.gz: 656d7cdf40cc6269d517b2e3c8d711fa51b668856a74bd001bacbb4a44a3373672179933a3b0df078b1ac41558387e99cf5861c9132cc14b45e2f4caa8ffae94
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,30 +1,50 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
+
activesupport (4.2.6)
|
5
|
+
i18n (~> 0.7)
|
6
|
+
json (~> 1.7, >= 1.7.7)
|
7
|
+
minitest (~> 5.1)
|
8
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
9
|
+
tzinfo (~> 1.1)
|
4
10
|
docile (1.1.5)
|
5
11
|
gtfs (0.2.5)
|
6
12
|
multi_json
|
7
13
|
rake
|
8
14
|
rubyzip (~> 1.1)
|
15
|
+
gtfs-realtime-bindings (0.0.5)
|
16
|
+
protobuf (>= 3.0)
|
17
|
+
i18n (0.7.0)
|
9
18
|
json (1.8.3)
|
19
|
+
middleware (0.1.0)
|
10
20
|
minitest (5.8.4)
|
11
|
-
multi_json (1.11.
|
12
|
-
|
13
|
-
|
21
|
+
multi_json (1.11.3)
|
22
|
+
protobuf (3.6.7)
|
23
|
+
activesupport (>= 3.2)
|
24
|
+
middleware
|
25
|
+
thor
|
26
|
+
thread_safe
|
27
|
+
rake (11.1.2)
|
28
|
+
rubyzip (1.2.0)
|
14
29
|
simplecov (0.11.2)
|
15
30
|
docile (~> 1.1.0)
|
16
31
|
json (~> 1.8)
|
17
32
|
simplecov-html (~> 0.10.0)
|
18
33
|
simplecov-html (0.10.0)
|
34
|
+
thor (0.19.1)
|
35
|
+
thread_safe (0.3.5)
|
36
|
+
tzinfo (1.2.2)
|
37
|
+
thread_safe (~> 0.1)
|
19
38
|
|
20
39
|
PLATFORMS
|
21
40
|
ruby
|
22
41
|
x64-mingw32
|
23
42
|
|
24
43
|
DEPENDENCIES
|
25
|
-
gtfs
|
26
|
-
|
27
|
-
|
44
|
+
gtfs (~> 0.2.5)
|
45
|
+
gtfs-realtime-bindings (~> 0.0.5)
|
46
|
+
minitest (~> 5.8.4)
|
47
|
+
simplecov (~> 0.11.2)
|
28
48
|
|
29
49
|
BUNDLED WITH
|
30
50
|
1.11.2
|
data/README.md
CHANGED
@@ -1,18 +1,49 @@
|
|
1
1
|
# gtfs-geojson
|
2
|
+
[](https://circleci.com/gh/tyleragreen/gtfs-geojson)
|
2
3
|
|
3
|
-
|
4
|
+
gtfs-geojson is a Ruby utility to convert the shapes.txt file of a GTFS feed into a GeoJSON file. It uses the [GTFS](https://github.com/nerdEd/gtfs) gem to validate GTFS feeds and wrap the feed data into usable objects. Two command-line utilities are also included with a gem install.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add the following to your Gemfile.
|
9
|
+
```
|
10
|
+
gem 'gtfs-geojson'
|
11
|
+
```
|
12
|
+
or install the gem through the command line.
|
13
|
+
```
|
14
|
+
gem install `gtfs-geojson`
|
15
|
+
```
|
16
|
+
|
17
|
+
## Command-Line Utilities
|
18
|
+
Convert a GTFS feed shapes.txt file into a GeoJSON file.
|
19
|
+
```
|
20
|
+
gtfs_to_geojson gtfs.zip output.geojson
|
21
|
+
```
|
22
|
+
Print a human-readable form of a GTFS-realtime feed.
|
23
|
+
```
|
24
|
+
gtfs-rt_to_json http://developer.mbta.com/lib/GTRTFS/Alerts/VehiclePositions.pb positions.json
|
25
|
+
```
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
```
|
30
|
+
require 'gtfs-geojson'
|
31
|
+
geojson = GTFS::GeoJSON.generate("gtfs.zip")
|
32
|
+
File.open("gtfs.geojson",'w') do { |f| f.write(geojson) }
|
33
|
+
```
|
4
34
|
|
5
35
|
## Develop Locally
|
36
|
+
To develop locally, clone the repository and run bundler to setup the necessary gems.
|
6
37
|
```
|
7
38
|
bundle install
|
8
39
|
```
|
9
|
-
|
40
|
+
#### Run Tests
|
10
41
|
```
|
11
|
-
rake
|
42
|
+
bundle exec rake
|
12
43
|
```
|
13
|
-
|
44
|
+
#### Run Tests and Collect Code Coverage
|
14
45
|
```
|
15
|
-
rake coverage
|
46
|
+
bundle exec rake coverage
|
16
47
|
```
|
17
|
-
##
|
48
|
+
## Contribute
|
18
49
|
Please contact Tyler at [greent@tyleragreen.com](mailto:greent@tyleragreen.com) or file a GitHub Issue with any ideas or suggestions.
|
data/bin/gtfs-rt_to_json
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# A command-line tool to convert a GTFS-realtime protocol buffer (*.pb)
|
4
|
+
# into a human-readable JSON output. This is useful to verify the
|
5
|
+
# data from the GTFS-realtime feed before consuming it in another application.
|
6
|
+
#
|
7
|
+
# Usage: gtfs-rt_to_json <gtfs-realtime_feed_path> <json_output_path>
|
8
|
+
#
|
9
|
+
# Author: Tyler A. Green (greent@tyleragreen.com)
|
10
|
+
#
|
11
|
+
require 'google/transit/gtfs-realtime.pb'
|
12
|
+
require 'net/http'
|
13
|
+
require 'json'
|
14
|
+
|
15
|
+
raise StandardError, "Two arguments required." if ARGV.length < 2
|
16
|
+
|
17
|
+
data = Net::HTTP.get(URI.parse(ARGV[0]))
|
18
|
+
feed = Transit_realtime::FeedMessage.decode(data)
|
19
|
+
|
20
|
+
f = File.open(ARGV[1],'w')
|
21
|
+
f.write(JSON.pretty_generate(feed))
|
22
|
+
f.close
|
data/bin/gtfs_to_geojson
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# A command-line tool to convert a GTFS feed shapes.txt file
|
4
|
+
# into a GeoJSON file.
|
5
|
+
#
|
6
|
+
# Usage: gtfs_to_geojson <gtfs_feed_path> <geojson_output_path>
|
7
|
+
#
|
8
|
+
# Author: Tyler A. Green (greent@tyleragreen.com)
|
9
|
+
#
|
10
|
+
require_relative '../lib/gtfs-geojson'
|
11
|
+
|
12
|
+
raise StandardError, "Two arguments required." if ARGV.length < 2
|
13
|
+
|
14
|
+
geojson = GTFS::GeoJSON.generate(ARGV[0])
|
15
|
+
f = File.open(ARGV[1],'w')
|
16
|
+
f.write(geojson)
|
17
|
+
f.close
|
data/gtfs-geojson.gemspec
CHANGED
@@ -14,11 +14,13 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.license = 'MIT'
|
15
15
|
|
16
16
|
gem.add_dependency 'gtfs', '0.2.5'
|
17
|
+
gem.add_dependency 'gtfs-realtime-bindings', '0.0.5'
|
17
18
|
|
18
19
|
gem.add_development_dependency 'simplecov', '0.11.2'
|
19
20
|
gem.add_development_dependency 'minitest', '5.8.4'
|
20
21
|
|
21
22
|
gem.files = `git ls-files`.split("\n")
|
22
23
|
gem.test_files = `git ls-files -- test/*`.split("\n")
|
24
|
+
gem.executables = ["gtfs-rt_to_json","gtfs_to_geojson"]
|
23
25
|
gem.require_path = 'lib'
|
24
26
|
end
|
data/lib/gtfs-geojson.rb
CHANGED
@@ -8,11 +8,15 @@ module GTFS
|
|
8
8
|
module GeoJSON
|
9
9
|
|
10
10
|
def self.generate(path)
|
11
|
+
raise ArgumentError if !File.exist?(path)
|
12
|
+
|
13
|
+
# Confirm the GTFS feed is valid
|
11
14
|
source = GTFS::Source.build(path,{strict:true})
|
12
15
|
|
13
16
|
routes = {}
|
14
17
|
features = []
|
15
|
-
|
18
|
+
|
19
|
+
# Group the routes by the route id
|
16
20
|
source.shapes.each do |shape|
|
17
21
|
if routes[shape.id]
|
18
22
|
routes[shape.id] << shape
|
@@ -21,14 +25,21 @@ module GTFS
|
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
28
|
+
# Process the data a route at a time
|
24
29
|
routes.each do |route,points|
|
25
30
|
coordinates = []
|
31
|
+
|
32
|
+
# Sort the points by their point sequence ID, as it may be
|
33
|
+
# out of order in the GTFS feed, but must be in order to appear
|
34
|
+
# correct for GeoJSON
|
26
35
|
points.sort! { |a,b| a.pt_sequence.to_i <=> b.pt_sequence.to_i }
|
27
36
|
|
37
|
+
# Add each sorted point to a list of coordinates for this route
|
28
38
|
points.each do |point|
|
29
39
|
coordinates << [ point.pt_lon.to_f, point.pt_lat.to_f ]
|
30
40
|
end
|
31
|
-
|
41
|
+
|
42
|
+
# Construct a feature and add it to the feature list for this route
|
32
43
|
features << { type: 'Feature',
|
33
44
|
properties: { name: route
|
34
45
|
},
|
@@ -39,6 +50,8 @@ module GTFS
|
|
39
50
|
|
40
51
|
end
|
41
52
|
|
53
|
+
# Create the GeoJSON file by generating a JSON string wrapped
|
54
|
+
# in a FeatureCollection
|
42
55
|
return JSON.generate({type: 'FeatureCollection', features: features})
|
43
56
|
end
|
44
57
|
end
|
data/lib/gtfs-geojson/version.rb
CHANGED
data/test/test.rb
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
require_relative 'test_helper'
|
4
4
|
|
5
5
|
class TestGtfs < Minitest::Test
|
6
|
+
|
7
|
+
def test_invalid_file_fails_cleanly
|
8
|
+
assert_raises(ArgumentError) { GTFS::GeoJSON.generate("non_existent_file") }
|
9
|
+
end
|
10
|
+
|
6
11
|
def test_valid_gtfs
|
7
12
|
geojson = GTFS::GeoJSON.generate("test/fixtures/valid_gtfs.zip")
|
8
13
|
shapes = File.read("test/fixtures/shapes.geojson")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtfs-geojson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tyleragreen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gtfs
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.2.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: gtfs-realtime-bindings
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.5
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.5
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: simplecov
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,7 +70,9 @@ description: gtfs-geojson is a Ruby utility to convert the shapes.txt file from
|
|
56
70
|
GTFS feed into a GeoJSON file.
|
57
71
|
email:
|
58
72
|
- greent@tyleragreen.com
|
59
|
-
executables:
|
73
|
+
executables:
|
74
|
+
- gtfs-rt_to_json
|
75
|
+
- gtfs_to_geojson
|
60
76
|
extensions: []
|
61
77
|
extra_rdoc_files: []
|
62
78
|
files:
|
@@ -65,6 +81,8 @@ files:
|
|
65
81
|
- Gemfile.lock
|
66
82
|
- README.md
|
67
83
|
- Rakefile
|
84
|
+
- bin/gtfs-rt_to_json
|
85
|
+
- bin/gtfs_to_geojson
|
68
86
|
- gtfs-geojson.gemspec
|
69
87
|
- lib/gtfs-geojson.rb
|
70
88
|
- lib/gtfs-geojson/version.rb
|
@@ -93,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
111
|
version: '0'
|
94
112
|
requirements: []
|
95
113
|
rubyforge_project:
|
96
|
-
rubygems_version: 2.
|
114
|
+
rubygems_version: 2.4.8
|
97
115
|
signing_key:
|
98
116
|
specification_version: 4
|
99
117
|
summary: Convert GTFS to GeoJSON
|