spatial_features 2.7.6 → 2.7.7

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
  SHA256:
3
- metadata.gz: 5212c402e92554dacf5a96e9b0c37d7be41ae0d6e5a37f7979dec43fc2051c24
4
- data.tar.gz: 3e74ccd3a3030d99063a1ab0b7e503c75c6c8f129b60d1f4259d116142094b18
3
+ metadata.gz: a1569586b460b18ee4a83871a3af3c5b4d8b54a5fbe84d9a4f1b3a191658a31f
4
+ data.tar.gz: d69c1f4fa29bd3b6b15770a59af3821521942723091def5945b6c065454ace5b
5
5
  SHA512:
6
- metadata.gz: 19a54d24e4c472889d16fa92bdffd5d7f03d06f09d32e3484a0ce7bd558a80832b985fbfc6e1cfa7cc2ec861d31b7c7efdbbe923e12ae9df2122ccd69ac581c8
7
- data.tar.gz: 4e4df3297bd72eb1694820f52b53ca13ba6a64a977dd5f43062c47f03e14d9c7c580bafadb1d3ab069d029eb9331ad113cdf8f1e6857a49e580b45a365a369ad
6
+ metadata.gz: df9042d3ef062b8662697970fe58715b27d69bdc46acead5d030697b4461ee25b06ad9afd0b6b03ebbba57b4f93e89cebe7278da5a9897b1e42f7c9135dbeb59
7
+ data.tar.gz: b64e7d40f30753e25be1d5be07b7b7261b72def8ca3eaffa622541386a772c5d39bdda7b94c70922ea9bebbb833bc292ea15dd4b5bf08c8796457f22fea4d5f8
data/README.md CHANGED
@@ -21,7 +21,7 @@ Adds spatial methods to a model.
21
21
  execute("
22
22
  CREATE EXTENSION hstore;
23
23
  CREATE EXTENSION postgis;
24
-
24
+
25
25
  CREATE TABLE features (
26
26
  id integer NOT NULL,
27
27
  spatial_model_type character varying(255),
@@ -42,12 +42,12 @@ Adds spatial methods to a model.
42
42
  centroid geography,
43
43
  kml_centroid text
44
44
  );
45
-
45
+
46
46
  CREATE SEQUENCE features_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
47
47
  ALTER SEQUENCE features_id_seq OWNED BY features.id;
48
48
  ALTER TABLE ONLY features ALTER COLUMN id SET DEFAULT nextval('features_id_seq'::regclass);
49
49
  ALTER TABLE ONLY features ADD CONSTRAINT features_pkey PRIMARY KEY (id);
50
-
50
+
51
51
  CREATE INDEX index_features_on_feature_type ON features USING btree (feature_type);
52
52
  CREATE INDEX index_features_on_spatial_model_id_and_spatial_model_type ON features USING btree (spatial_model_id, spatial_model_type);
53
53
  CREATE INDEX index_features_on_geom ON features USING gist (geom);
@@ -63,12 +63,12 @@ Adds spatial methods to a model.
63
63
  intersection_cache_distance double precision,
64
64
  features_hash character varying(255)
65
65
  );
66
-
66
+
67
67
  CREATE SEQUENCE spatial_caches_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
68
68
  ALTER SEQUENCE spatial_caches_id_seq OWNED BY spatial_caches.id;
69
69
  ALTER TABLE ONLY spatial_caches ALTER COLUMN id SET DEFAULT nextval('spatial_caches_id_seq'::regclass);
70
70
  ALTER TABLE ONLY spatial_caches ADD CONSTRAINT spatial_caches_pkey PRIMARY KEY (id);
71
-
71
+
72
72
  CREATE INDEX index_spatial_caches_on_spatial_model ON spatial_caches USING btree (spatial_model_id, spatial_model_type);
73
73
 
74
74
  CREATE TABLE spatial_proximities (
@@ -80,12 +80,12 @@ Adds spatial methods to a model.
80
80
  distance_in_meters double precision,
81
81
  intersection_area_in_square_meters double precision
82
82
  );
83
-
83
+
84
84
  CREATE SEQUENCE spatial_proximities_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
85
85
  ALTER SEQUENCE spatial_proximities_id_seq OWNED BY spatial_proximities.id;
86
86
  ALTER TABLE ONLY spatial_proximities ALTER COLUMN id SET DEFAULT nextval('spatial_proximities_id_seq'::regclass);
87
87
  ALTER TABLE ONLY spatial_proximities ADD CONSTRAINT spatial_proximities_pkey PRIMARY KEY (id);
88
-
88
+
89
89
  CREATE INDEX index_spatial_proximities_on_model_a ON spatial_proximities USING btree (model_a_id, model_a_type);
90
90
  CREATE INDEX index_spatial_proximities_on_model_b ON spatial_proximities USING btree (model_b_id, model_b_type);
91
91
  ")
@@ -120,3 +120,20 @@ class Location < ActiveRecord::Base
120
120
  end
121
121
  end
122
122
  ```
123
+
124
+ ### SpatialFeatures::Importers::Shapefile
125
+
126
+ #### Default Options
127
+
128
+ Default options can be specified on the Shapefile importer class itself.
129
+
130
+ - ##### default_proj4_projection
131
+ A proj4 formatted projection string to use when no other projection has been specified either in the shapefile or the
132
+ importer instance.
133
+
134
+ Example:
135
+ ```ruby
136
+ SpatialFeatures::Importers::Shapefile.default_proj4_projection = "+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"
137
+ ```
138
+
139
+ Default: `nil`
@@ -4,7 +4,7 @@ module SpatialFeatures
4
4
  module Importers
5
5
  class File < SimpleDelegator
6
6
  def initialize(data, *args)
7
- file = Download.open(data, unzip: %w(.kml .shp))
7
+ file = Download.open(data, unzip: [/\.kml$/, /\.shp$/])
8
8
 
9
9
  case ::File.extname(file.path.downcase)
10
10
  when '.kml'
@@ -4,6 +4,8 @@ require 'digest/md5'
4
4
  module SpatialFeatures
5
5
  module Importers
6
6
  class Shapefile < Base
7
+ class_attribute :default_proj4_projection
8
+
7
9
  def initialize(data, *args, proj4: nil, **options)
8
10
  super(data, *args, **options)
9
11
  @proj4 = proj4
@@ -16,24 +18,22 @@ module SpatialFeatures
16
18
  private
17
19
 
18
20
  def each_record(&block)
19
- file = Download.open(@data, unzip: '.shp')
20
-
21
- if !@proj4
22
- @proj4 = proj4_from_file(file)
23
- end
24
-
25
21
  RGeo::Shapefile::Reader.open(file.path) do |records|
26
22
  records.each do |record|
27
- yield OpenStruct.new data_from_wkt(record.geometry.as_text, @proj4).merge(:metadata => record.attributes) if record.geometry.present?
23
+ yield OpenStruct.new data_from_wkt(record.geometry.as_text, proj4_projection).merge(:metadata => record.attributes) if record.geometry.present?
28
24
  end
29
25
  end
30
26
  end
31
27
 
32
- def proj4_from_file(file)
28
+ def proj4_projection
29
+ @proj4 ||= proj4_from_file || default_proj4_projection || raise(IndeterminateProjection, 'Could not determine shapefile projection. Check that `gdalsrsinfo` is installed.')
30
+ end
31
+
32
+ def proj4_from_file
33
33
  # Sanitize: "'+proj=utm +zone=11 +datum=NAD83 +units=m +no_defs '\n" and lately
34
34
  # "+proj=utm +zone=11 +datum=NAD83 +units=m +no_defs \n" to
35
35
  # "+proj=utm +zone=11 +datum=NAD83 +units=m +no_defs"
36
- `gdalsrsinfo "#{file.path}" -o proj4`.strip.remove(/^'|'$/).presence || raise('Could not determine shapefile projection. Check that `gdalsrsinfo` is installed.')
36
+ `gdalsrsinfo "#{file.path}" -o proj4`.strip.remove(/^'|'$/).presence
37
37
  end
38
38
 
39
39
  def data_from_wkt(wkt, proj4)
@@ -41,6 +41,15 @@ module SpatialFeatures
41
41
  SELECT ST_Transform(ST_GeomFromText('#{wkt}'), '#{proj4}', 4326) AS geog, GeometryType(ST_GeomFromText('#{wkt}')) AS feature_type
42
42
  SQL
43
43
  end
44
+
45
+ def file
46
+ @file ||= Download.open(@data, unzip: /\.shp$/)
47
+ end
48
+
49
+
50
+ # ERRORS
51
+
52
+ class IndeterminateProjection < StandardError; end
44
53
  end
45
54
  end
46
55
  end
@@ -6,7 +6,7 @@ module SpatialFeatures
6
6
  paths = extract(file_path)
7
7
 
8
8
  if find = Array.wrap(find).presence
9
- paths = paths.detect {|path| find.any? {|pattern| path.include?(pattern) } }
9
+ paths = paths.detect {|path| find.any? {|pattern| path.index(pattern) } }
10
10
  raise(ImportError, "No file matched #{find}") unless paths.present?
11
11
  end
12
12
 
@@ -1,3 +1,3 @@
1
1
  module SpatialFeatures
2
- VERSION = "2.7.6"
2
+ VERSION = "2.7.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spatial_features
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.6
4
+ version: 2.7.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Wallace
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-07-20 00:00:00.000000000 Z
12
+ date: 2019-07-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -218,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
218
  version: '0'
219
219
  requirements: []
220
220
  rubyforge_project:
221
- rubygems_version: 2.7.5
221
+ rubygems_version: 2.7.9
222
222
  signing_key:
223
223
  specification_version: 4
224
224
  summary: Adds spatial methods to a model.