ffi-ogr 0.1.0 → 0.2.0.pre

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 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