ffi-ogr 0.1.0 → 0.2.0.pre

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8a3a8d64038c8ee681dc456b3639a3ba21d4fe2b
4
- data.tar.gz: 5363e299ae53a198be3772c21742b63b6707a534
3
+ metadata.gz: 1d359d65c42a28d7194576e4834893a2a64e5847
4
+ data.tar.gz: 2ad3c809859e739fd1819943283d68dcee6aa9ae
5
5
  SHA512:
6
- metadata.gz: d91119cd6f24f8a516fa8b47728328a8b8d8310c48ab277669c713a23346e36cc96ff0e31a242039f78f85520acff23d2d32ac8584a0607114678ffd6b5d49a2
7
- data.tar.gz: fe146c60301d9555e9b004968d5d176f050d4cfe7384a722253794c720d51cd8cb3d5711a2ac9becd238a3afffce4484510eb8f8d224fc2d6963563b7d59ac65
6
+ metadata.gz: 80e832cece980b1505bea4aed6726bfb4e299287bcdc64941a549f5f8f6048702792f2eb558a766c2a3210f8997c0f99a835f01238b2f8f79d15d65453002aa5
7
+ data.tar.gz: 06b14aee210c8d543ee1e7f44205173529fc9492d1d8d971e45073b19b45117795fd11b26c60fd6485f3ed30fd543f6e2c7a9f15e4f5803349733c589cdc421f
data/README.md CHANGED
@@ -38,6 +38,33 @@ data.to_csv '~/Desktop/github_to_csv.csv'
38
38
  => nil
39
39
  ```
40
40
 
41
+ To read from a PostGIS table:
42
+
43
+ ```ruby
44
+ pg_options = {
45
+ 'dbname' => 'my_db',
46
+ 'host' => 'localhost',
47
+ 'port' => 5432,
48
+ 'user' => 'user',
49
+ 'password' => 'p@$$w0rd'
50
+ }
51
+ # => {"dbname"=>"my_db", "host"=>"localhost", "port"=>5432, "user"=>"user", "password"=>"p@$$w0rd"}
52
+
53
+ # pg_options may also be a string path to a YAML file
54
+ pg_reader = OGR::PostgisReader.new pg_options
55
+ # => #<OGR::PostgisReader:0x007fce88943b90 @db_config="PG:dbname='my_db' host='localhost' port='5432' user='user' password='p@$$w0rd'", @driver=#<FFI::Pointer address=0x007fce8a22d8f0>, @type="PostgreSQL">
56
+
57
+ query = "select * from table_name where id = '49649d69-25a5-4dde-926d-b43a88c47d17'"
58
+ # => "select * from table_name where id = '49649d69-25a5-4dde-926d-b43a88c47d17'"
59
+
60
+ # output type of executed query is Layer
61
+ layer = pg_reader.execute_query query
62
+ # => #<OGR::Layer:0x007fce88b08390 @ptr=#<FFI::AutoPointer address=0x007fce8a20e0d0>>
63
+
64
+ layer.features
65
+ # => [#<OGR::Feature:0x007fce88af8008 @ptr=#<FFI::AutoPointer address=0x007fce8a2653b0>>, #<OGR::Feature:0x007fce88af3eb8 @ptr=#<FFI::AutoPointer address=0x007fce884e27b0>>]
66
+ ```
67
+
41
68
  To read a shapefile:
42
69
 
43
70
  ```ruby
@@ -16,6 +16,7 @@ module OGR
16
16
 
17
17
  autoload :Reader, File.join(OGR_BASE, 'reader')
18
18
  autoload :HttpReader, File.join(OGR_BASE, 'http_reader')
19
+ autoload :PostgisReader, File.join(OGR_BASE, 'postgis_reader')
19
20
  autoload :Writer, File.join(OGR_BASE, 'writer')
20
21
  autoload :DataSource, File.join(OGR_BASE, 'data_source')
21
22
  autoload :Shapefile, File.join(OGR_BASE, 'shapefile')
@@ -154,11 +154,11 @@ module OGR
154
154
  end
155
155
 
156
156
  def to_shp(output_path, options={})
157
- to_format('shapefile', output_path)
157
+ to_format('shapefile', output_path, options)
158
158
  end
159
159
 
160
160
  def to_csv(output_path, options={})
161
- to_format('csv', output_path)
161
+ to_format('csv', output_path, options)
162
162
  end
163
163
 
164
164
  def to_kml(output_path, options={})
@@ -1,6 +1,7 @@
1
1
  require 'fileutils'
2
2
  require 'securerandom'
3
3
  require 'faraday'
4
+ require 'faraday_middleware'
4
5
 
5
6
  module OGR
6
7
  class HttpReader
@@ -26,7 +27,13 @@ module OGR
26
27
  end
27
28
  end
28
29
 
29
- http_data = Faraday.get(url).body
30
+ connection = Faraday.new url do |conn|
31
+ conn.use FaradayMiddleware::FollowRedirects
32
+ conn.adapter Faraday.default_adapter
33
+ end
34
+
35
+ http_data = connection.get.body
36
+
30
37
  ogr_driver = OGR::FFIOGR::OGRGetDriverByName driver
31
38
  data_source = OGR::FFIOGR::OGR_Dr_Open ogr_driver, http_data, TF_MAP[writeable]
32
39
  OGR::Tools.cast_data_source data_source
@@ -0,0 +1,61 @@
1
+ require 'yaml'
2
+
3
+ module OGR
4
+ class PostgisReader
5
+ include OGR::FFIOGR
6
+
7
+ attr_accessor :db_config
8
+
9
+ TF_MAP = {
10
+ true => 1,
11
+ false => 0,
12
+ 1 => true,
13
+ 0 => false
14
+ }
15
+
16
+ def initialize(db_config_file)
17
+ @db_config = parse_db_config db_config_file
18
+ @driver = OGRGetDriverByName 'PostgreSQL'
19
+ @type = 'PostgreSQL'
20
+ end
21
+
22
+ def parse_db_config(db_config_file)
23
+ conf =
24
+ if db_config_file.instance_of? String
25
+ YAML.load_file(File.expand_path(db_config_file))
26
+ elsif db_config_file.instance_of? Hash
27
+ db_config_file
28
+ end
29
+
30
+ db_config = 'PG:'
31
+
32
+ if conf['dbname']
33
+ db_config = db_config + "dbname='#{conf['dbname']}'"
34
+ if conf['host']
35
+ db_config = db_config + " host='#{conf['host']}'"
36
+ if conf['port']
37
+ db_config = db_config + " port='#{conf['port']}'"
38
+ db_config = db_config + " user='#{conf['user']}'" if conf['user']
39
+ db_config = db_config + " password='#{conf['password']}'" if conf['password']
40
+ else
41
+ raise RuntimeError.new 'port must be specified'
42
+ end
43
+ else
44
+ raise RuntimeError.new 'host must be specified'
45
+ end
46
+ else
47
+ raise RuntimeError.new 'dbname must be specified'
48
+ end
49
+
50
+ db_config
51
+ end
52
+
53
+ def execute_query(query, writeable = false)
54
+ pg_driver = OGR_Dr_Open @driver, @db_config, TF_MAP[writeable]
55
+ result_set = OGR_DS_ExecuteSQL pg_driver, query, nil, nil
56
+ OGR::Tools.cast_layer result_set
57
+ # result_set is OGRLayer
58
+ # must call OGR_DS_ReleaseResultSet(pg_driver, result_set) to clean up
59
+ end
60
+ end
61
+ end
@@ -1,3 +1,3 @@
1
1
  module OGR
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0.pre'
3
3
  end
metadata CHANGED
@@ -1,19 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-ogr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scooter Wadsworth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-12 00:00:00.000000000 Z
11
+ date: 2015-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
17
20
  - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: 1.6.0
@@ -21,6 +24,9 @@ dependencies:
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.6'
24
30
  - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: 1.6.0
@@ -28,6 +34,9 @@ dependencies:
28
34
  name: multi_json
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.7'
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
33
42
  version: 1.7.2
@@ -35,6 +44,9 @@ dependencies:
35
44
  prerelease: false
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.7'
38
50
  - - ">="
39
51
  - !ruby/object:Gem::Version
40
52
  version: 1.7.2
@@ -42,6 +54,9 @@ dependencies:
42
54
  name: faraday
43
55
  requirement: !ruby/object:Gem::Requirement
44
56
  requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.8'
45
60
  - - ">="
46
61
  - !ruby/object:Gem::Version
47
62
  version: 0.8.7
@@ -49,9 +64,32 @@ dependencies:
49
64
  prerelease: false
50
65
  version_requirements: !ruby/object:Gem::Requirement
51
66
  requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.8'
52
70
  - - ">="
53
71
  - !ruby/object:Gem::Version
54
72
  version: 0.8.7
73
+ - !ruby/object:Gem::Dependency
74
+ name: faraday_middleware
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.9'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.9.1
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.9'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.9.1
55
93
  - !ruby/object:Gem::Dependency
56
94
  name: rake
57
95
  requirement: !ruby/object:Gem::Requirement
@@ -131,6 +169,7 @@ files:
131
169
  - lib/ffi-ogr/point_25d.rb
132
170
  - lib/ffi-ogr/polygon.rb
133
171
  - lib/ffi-ogr/polygon_25d.rb
172
+ - lib/ffi-ogr/postgis_reader.rb
134
173
  - lib/ffi-ogr/reader.rb
135
174
  - lib/ffi-ogr/shapefile.rb
136
175
  - lib/ffi-ogr/spatial_reference.rb
@@ -157,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
196
  version: 1.3.6
158
197
  requirements: []
159
198
  rubyforge_project:
160
- rubygems_version: 2.2.2
199
+ rubygems_version: 2.4.5
161
200
  signing_key:
162
201
  specification_version: 4
163
202
  summary: Convenient access to OGR functionality from Ruby