geo-cli 0.0.1.pre2 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +9 -9
- data/bin/geo-cli +12 -11
- data/lib/geo-cli/geom_reader.rb +38 -1
- data/lib/geo-cli/version.rb +1 -1
- data/test/geom_reader_test.rb +41 -14
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe4a7f6a7976742fcd78ec2ed65c93f565202453
|
4
|
+
data.tar.gz: 00d8e7c4c7daed2c09606adb1df3db806dab4274
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aec4b2c462c757cee0aa69a199544e7384f07065a638ad5278e5d3de8a833fc4724c669894a61ff2c4c04b593c9951523e1267b1ecb36d3280934d86a62eb131
|
7
|
+
data.tar.gz: 4cd9eeb76df744d9b1c9cf8d978add9db9b64a844bb0eb0ee9d13417f5f2a023496dd8c08ce33a171387f761572ab0af0d3554c191f5e055dfc070dfaecbb0a6
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
geo-cli (0.0.1)
|
5
|
-
gli (
|
4
|
+
geo-cli (0.0.1.pre2)
|
5
|
+
gli (~> 2.17)
|
6
6
|
pr_geohash (~> 1.0)
|
7
|
-
rgeo
|
8
|
-
rgeo-geojson
|
7
|
+
rgeo (~> 1.0)
|
8
|
+
rgeo-geojson (~> 2.0)
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
@@ -73,13 +73,13 @@ PLATFORMS
|
|
73
73
|
ruby
|
74
74
|
|
75
75
|
DEPENDENCIES
|
76
|
-
aruba
|
76
|
+
aruba (~> 0.14)
|
77
77
|
geo-cli!
|
78
78
|
minitest (~> 5.11)
|
79
|
-
minitest-reporters
|
80
|
-
pry
|
81
|
-
rake
|
82
|
-
rdoc
|
79
|
+
minitest-reporters (~> 1.2)
|
80
|
+
pry (~> 0.11)
|
81
|
+
rake (~> 12.3)
|
82
|
+
rdoc (~> 6.0)
|
83
83
|
|
84
84
|
BUNDLED WITH
|
85
85
|
1.16.1
|
data/bin/geo-cli
CHANGED
@@ -14,22 +14,22 @@ include GLI::App
|
|
14
14
|
program_desc <<-desc
|
15
15
|
Geospatial utility belt
|
16
16
|
|
17
|
-
geo-cli is a command-line tool for converting between various
|
18
|
-
GIS serialization formats. For example:
|
17
|
+
geo-cli is a command-line tool for converting between various
|
18
|
+
GIS serialization formats. For example:
|
19
19
|
|
20
|
-
echo 9q5 | geo-cli gj geometry
|
20
|
+
echo 9q5 | geo-cli gj geometry
|
21
21
|
|
22
|
-
Will output the geohash 9q5 as a geojson geometry.
|
22
|
+
Will output the geohash 9q5 as a geojson geometry.
|
23
23
|
|
24
|
-
Most commands will accept a Geohash (base 32 encoded), a WKT,
|
25
|
-
or a GeoJSON input, and should recognize the input based on its
|
26
|
-
format.
|
24
|
+
Most commands will accept a Geohash (base 32 encoded), a WKT,
|
25
|
+
or a GeoJSON input, and should recognize the input based on its
|
26
|
+
format.
|
27
27
|
|
28
|
-
Commands expect one geo entity per line.
|
28
|
+
Commands expect one geo entity per line.
|
29
29
|
|
30
|
-
See COMMANDS for more possible commands.
|
30
|
+
See COMMANDS for more possible commands.
|
31
31
|
|
32
|
-
See geo-cli <COMMAND> --help for more info on a given command.
|
32
|
+
See geo-cli <COMMAND> --help for more info on a given command.
|
33
33
|
desc
|
34
34
|
|
35
35
|
version GeoCli::VERSION
|
@@ -63,7 +63,8 @@ command :gj do |c|
|
|
63
63
|
c.desc "Combine entities into a geojson feature collection"
|
64
64
|
c.command :fc do |c|
|
65
65
|
c.action do |global_options,options,args|
|
66
|
-
|
66
|
+
entities = GeoCli::GeomReader.new(STDIN)
|
67
|
+
puts GeoCli::Commands::GeoJson::FeatureCollection.new(entities).output
|
67
68
|
end
|
68
69
|
end
|
69
70
|
end
|
data/lib/geo-cli/geom_reader.rb
CHANGED
@@ -3,6 +3,30 @@ require "rgeo"
|
|
3
3
|
require "rgeo/geo_json"
|
4
4
|
|
5
5
|
module GeoCli
|
6
|
+
module Commands
|
7
|
+
class Base
|
8
|
+
attr_reader :global_opts, :opts, :args, :instream
|
9
|
+
def initialize(instream, global_opts = {}, opts = {}, args = [])
|
10
|
+
@global_opts = global_opts
|
11
|
+
@opts = opts
|
12
|
+
@args = args
|
13
|
+
@instream = instream
|
14
|
+
end
|
15
|
+
|
16
|
+
def output
|
17
|
+
raise "Not implemented"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module GeoJson
|
22
|
+
class FeatureCollection < Base
|
23
|
+
def output
|
24
|
+
GeoCli::FeatureCollection.new(instream).to_geojson
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
6
30
|
class Entity
|
7
31
|
attr_reader :entity
|
8
32
|
|
@@ -37,6 +61,19 @@ module GeoCli
|
|
37
61
|
end
|
38
62
|
|
39
63
|
class GeoJson < Entity
|
64
|
+
def as_geojson(feature = false)
|
65
|
+
if feature
|
66
|
+
if entity.is_a?(RGeo::GeoJSON::Feature)
|
67
|
+
RGeo::GeoJSON.encode(entity)
|
68
|
+
else
|
69
|
+
{type: "Feature",
|
70
|
+
properties: {},
|
71
|
+
geometry: RGeo::GeoJSON.encode(entity)}
|
72
|
+
end
|
73
|
+
else
|
74
|
+
RGeo::GeoJSON.encode(entity)
|
75
|
+
end
|
76
|
+
end
|
40
77
|
end
|
41
78
|
|
42
79
|
class FeatureCollection
|
@@ -80,7 +117,7 @@ module GeoCli
|
|
80
117
|
geom = RGeo::Cartesian::BoundingBox.create_from_points(p1, p2).to_geometry
|
81
118
|
Geohash.new(geom)
|
82
119
|
elsif geojson?(line)
|
83
|
-
|
120
|
+
GeoJson.new(RGeo::GeoJSON.decode(line))
|
84
121
|
else
|
85
122
|
Wkt.new(wkt.parse(line))
|
86
123
|
end
|
data/lib/geo-cli/version.rb
CHANGED
data/test/geom_reader_test.rb
CHANGED
@@ -10,6 +10,23 @@ class TestGeomReader < Minitest::Test
|
|
10
10
|
@reader = GeoCli::GeomReader.new(r)
|
11
11
|
end
|
12
12
|
|
13
|
+
def stream(strings)
|
14
|
+
r,w = IO.pipe
|
15
|
+
strings.each do |s|
|
16
|
+
w.puts(s)
|
17
|
+
end
|
18
|
+
w.close
|
19
|
+
GeoCli::GeomReader.new(r)
|
20
|
+
end
|
21
|
+
|
22
|
+
def mixed_stream
|
23
|
+
inputs = ["9q5",
|
24
|
+
{type: "Point", coordinates: [0,1]}.to_json,
|
25
|
+
"POINT (1.0 2.0)",
|
26
|
+
{type: "Feature", properties: {a: "b"}, geometry: {type: "Point", coordinates: [3,4]}}.to_json]
|
27
|
+
stream(inputs)
|
28
|
+
end
|
29
|
+
|
13
30
|
def test_recognizes_geohashes
|
14
31
|
assert @reader.geohash?("9q5")
|
15
32
|
assert @reader.geohash?("9Q5")
|
@@ -24,21 +41,31 @@ class TestGeomReader < Minitest::Test
|
|
24
41
|
end
|
25
42
|
|
26
43
|
def test_parse_objects
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
parsed
|
31
|
-
assert parsed[
|
32
|
-
assert parsed[1].is_a?(RGeo::Geos::CAPIPointImpl)
|
33
|
-
assert parsed[2].is_a?(RGeo::Geos::CAPIPointImpl)
|
44
|
+
parsed = mixed_stream.to_a
|
45
|
+
assert parsed[0].is_a? GeoCli::Geohash
|
46
|
+
assert parsed[1].is_a? GeoCli::GeoJson
|
47
|
+
assert parsed[2].is_a? GeoCli::Wkt
|
48
|
+
assert parsed[3].is_a? GeoCli::GeoJson
|
34
49
|
end
|
35
50
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
51
|
+
def test_feature_collection
|
52
|
+
fc = GeoCli::Commands::GeoJson::FeatureCollection.new(mixed_stream)
|
53
|
+
json = JSON.parse(fc.output)
|
54
|
+
assert_equal "FeatureCollection", json["type"]
|
55
|
+
assert_equal ["type", "features"].sort, json.keys.sort
|
56
|
+
features = json["features"]
|
57
|
+
assert_equal 4, features.count
|
58
|
+
|
59
|
+
# encodes properties
|
60
|
+
assert_equal [{}, {}, {}, {"a" => "b"}], features.map { |f| f["properties"] }
|
61
|
+
assert_equal Hash.new, features[0]["properties"]
|
62
|
+
assert_equal Hash.new, features[1]["properties"]
|
63
|
+
assert_equal Hash.new, features[2]["properties"]
|
64
|
+
assert_equal({"a" => "b"}, features[3]["properties"])
|
65
|
+
|
66
|
+
assert_equal ["Polygon", "Point", "Point", "Point"], features.map { |f| f["geometry"]["type"] }
|
67
|
+
|
68
|
+
gh = [[[-119.53125, 33.75], [-118.125, 33.75], [-118.125, 35.15625], [-119.53125, 35.15625], [-119.53125, 33.75]]]
|
69
|
+
assert_equal [gh, [0.0,1.0], [1.0, 2.0], [3.0, 4.0]], features.map { |f| f["geometry"]["coordinates"] }
|
43
70
|
end
|
44
71
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geo-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Horace Williams
|
@@ -197,9 +197,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
197
197
|
version: '0'
|
198
198
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
199
|
requirements:
|
200
|
-
- - "
|
200
|
+
- - ">="
|
201
201
|
- !ruby/object:Gem::Version
|
202
|
-
version:
|
202
|
+
version: '0'
|
203
203
|
requirements: []
|
204
204
|
rubyforge_project:
|
205
205
|
rubygems_version: 2.5.1
|