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 +4 -4
- data/README.md +27 -0
- data/lib/ffi-ogr.rb +1 -0
- data/lib/ffi-ogr/data_source.rb +2 -2
- data/lib/ffi-ogr/http_reader.rb +8 -1
- data/lib/ffi-ogr/postgis_reader.rb +61 -0
- data/lib/ffi-ogr/version.rb +1 -1
- metadata +42 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d359d65c42a28d7194576e4834893a2a64e5847
|
4
|
+
data.tar.gz: 2ad3c809859e739fd1819943283d68dcee6aa9ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/ffi-ogr.rb
CHANGED
@@ -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')
|
data/lib/ffi-ogr/data_source.rb
CHANGED
@@ -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={})
|
data/lib/ffi-ogr/http_reader.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/ffi-ogr/version.rb
CHANGED
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.
|
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-
|
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.
|
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
|