spatial_features 2.3.1 → 2.4.0
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 +28 -0
- data/app/models/spatial_cache.rb +1 -1
- data/lib/spatial_features/caching.rb +3 -3
- data/lib/spatial_features/has_spatial_features.rb +5 -5
- data/lib/spatial_features/uncached_result.rb +4 -0
- data/lib/spatial_features/version.rb +1 -1
- data/lib/spatial_features.rb +1 -6
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e0a3bff0a76b4cc7d6e569677d5ee9035f6da2b
|
4
|
+
data.tar.gz: 225c280e58e6af0b5ce3623a582acd599037f9ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a35b743e5e5f90c58a002bafe5f823dbf90f1b25974f54809a2cbbf8a4a4aeabb59ca55f59677ead4f9a4e08977385ed50bdcaa811a6bc8f93cd5c094fe429f6
|
7
|
+
data.tar.gz: 7eaab5ad9ea2087fd35962c518e3df8118911ae5450cd54a431314d1f90a159edb1813e866c5aa7dcc1d54805e1c7f04a4c0bcf7ddc5178a87b1c3f52d998943
|
data/README.md
CHANGED
@@ -19,6 +19,9 @@ Adds spatial methods to a model.
|
|
19
19
|
|
20
20
|
```ruby
|
21
21
|
execute("
|
22
|
+
CREATE EXTENSION hstore;
|
23
|
+
CREATE EXTENSION postgis;
|
24
|
+
|
22
25
|
CREATE TABLE features (
|
23
26
|
id integer NOT NULL,
|
24
27
|
spatial_model_type character varying(255),
|
@@ -39,6 +42,16 @@ Adds spatial methods to a model.
|
|
39
42
|
centroid geography,
|
40
43
|
kml_centroid text
|
41
44
|
);
|
45
|
+
|
46
|
+
CREATE SEQUENCE features_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
|
47
|
+
ALTER SEQUENCE features_id_seq OWNED BY features.id;
|
48
|
+
ALTER TABLE ONLY features ALTER COLUMN id SET DEFAULT nextval('features_id_seq'::regclass);
|
49
|
+
ALTER TABLE ONLY features ADD CONSTRAINT features_pkey PRIMARY KEY (id);
|
50
|
+
|
51
|
+
CREATE INDEX index_features_on_feature_type ON features USING btree (feature_type);
|
52
|
+
CREATE INDEX index_features_on_spatial_model_id_and_spatial_model_type ON features USING btree (spatial_model_id, spatial_model_type);
|
53
|
+
CREATE INDEX index_features_on_geom ON features USING gist (geom);
|
54
|
+
CREATE INDEX index_features_on_geom_lowres ON features USING gist (geom_lowres);
|
42
55
|
|
43
56
|
CREATE TABLE spatial_caches (
|
44
57
|
id integer NOT NULL,
|
@@ -50,6 +63,13 @@ Adds spatial methods to a model.
|
|
50
63
|
intersection_cache_distance double precision,
|
51
64
|
features_hash character varying(255)
|
52
65
|
);
|
66
|
+
|
67
|
+
CREATE SEQUENCE spatial_caches_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
|
68
|
+
ALTER SEQUENCE spatial_caches_id_seq OWNED BY spatial_caches.id;
|
69
|
+
ALTER TABLE ONLY spatial_caches ALTER COLUMN id SET DEFAULT nextval('spatial_caches_id_seq'::regclass);
|
70
|
+
ALTER TABLE ONLY spatial_caches ADD CONSTRAINT spatial_caches_pkey PRIMARY KEY (id);
|
71
|
+
|
72
|
+
CREATE INDEX index_spatial_caches_on_spatial_model ON spatial_caches USING btree (spatial_model_id, spatial_model_type);
|
53
73
|
|
54
74
|
CREATE TABLE spatial_proximities (
|
55
75
|
id integer NOT NULL,
|
@@ -60,6 +80,14 @@ Adds spatial methods to a model.
|
|
60
80
|
distance_in_meters double precision,
|
61
81
|
intersection_area_in_square_meters double precision
|
62
82
|
);
|
83
|
+
|
84
|
+
CREATE SEQUENCE spatial_proximities_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
|
85
|
+
ALTER SEQUENCE spatial_proximities_id_seq OWNED BY spatial_proximities.id;
|
86
|
+
ALTER TABLE ONLY spatial_proximities ALTER COLUMN id SET DEFAULT nextval('spatial_proximities_id_seq'::regclass);
|
87
|
+
ALTER TABLE ONLY spatial_proximities ADD CONSTRAINT spatial_proximities_pkey PRIMARY KEY (id);
|
88
|
+
|
89
|
+
CREATE INDEX index_spatial_proximities_on_model_a ON spatial_proximities USING btree (model_a_id, model_a_type);
|
90
|
+
CREATE INDEX index_spatial_proximities_on_model_b ON spatial_proximities USING btree (model_b_id, model_b_type);
|
63
91
|
")
|
64
92
|
```
|
65
93
|
|
data/app/models/spatial_cache.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class SpatialCache < ActiveRecord::Base
|
2
|
-
belongs_to :spatial_model, :polymorphic => true, :inverse_of => :
|
2
|
+
belongs_to :spatial_model, :polymorphic => true, :inverse_of => :spatial_caches
|
3
3
|
|
4
4
|
def self.between(spatial_model, klass)
|
5
5
|
where(SpatialFeatures::Utils.polymorphic_condition(spatial_model, 'spatial_model'))
|
@@ -15,8 +15,8 @@ module SpatialFeatures
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.update_spatial_cache(scope)
|
18
|
-
scope.with_stale_spatial_cache.includes(:
|
19
|
-
record.
|
18
|
+
scope.with_stale_spatial_cache.includes(:spatial_caches).find_each do |record|
|
19
|
+
record.spatial_caches.each do |spatial_cache|
|
20
20
|
cache_record_proximity(record, spatial_cache.intersection_model_type) if spatial_cache.stale?
|
21
21
|
end
|
22
22
|
end
|
@@ -59,7 +59,7 @@ module SpatialFeatures
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def self.clear_record_cache(record, klass)
|
62
|
-
record.
|
62
|
+
record.spatial_caches.where(:intersection_model_type => klass).delete_all
|
63
63
|
SpatialProximity.between(record, klass).delete_all
|
64
64
|
end
|
65
65
|
|
@@ -14,11 +14,11 @@ module SpatialFeatures
|
|
14
14
|
scope :with_features, lambda { joins(:features).uniq }
|
15
15
|
scope :without_features, lambda { joins("LEFT OUTER JOIN features ON features.spatial_model_type = '#{name}' AND features.spatial_model_id = #{table_name}.id").where("features.id IS NULL") }
|
16
16
|
|
17
|
-
scope :with_spatial_cache, lambda {|klass| joins(:
|
17
|
+
scope :with_spatial_cache, lambda {|klass| joins(:spatial_caches).where(:spatial_caches => { :intersection_model_type => klass }).uniq }
|
18
18
|
scope :without_spatial_cache, lambda {|klass| joins("LEFT OUTER JOIN #{SpatialCache.table_name} ON spatial_model_id = #{table_name}.id AND spatial_model_type = '#{name}' and intersection_model_type = '#{klass}'").where('spatial_model_id IS NULL') }
|
19
|
-
scope :with_stale_spatial_cache, lambda { joins(:
|
19
|
+
scope :with_stale_spatial_cache, lambda { joins(:spatial_caches).where("#{table_name}.features_hash != spatial_caches.features_hash").uniq } if has_spatial_features_hash?
|
20
20
|
|
21
|
-
has_many :
|
21
|
+
has_many :spatial_caches, :as => :spatial_model, :dependent => :delete_all, :class_name => 'SpatialCache'
|
22
22
|
has_many :model_a_spatial_proximities, :as => :model_a, :class_name => 'SpatialProximity', :dependent => :delete_all
|
23
23
|
has_many :model_b_spatial_proximities, :as => :model_b, :class_name => 'SpatialProximity', :dependent => :delete_all
|
24
24
|
|
@@ -98,7 +98,7 @@ module SpatialFeatures
|
|
98
98
|
options = options.reverse_merge(:columns => "#{table_name}.*")
|
99
99
|
|
100
100
|
# Don't use the cache if it doesn't exist
|
101
|
-
return
|
101
|
+
return none.extending(UncachedResult) unless other.spatial_cache_for?(Utils.class_of(self), buffer_in_meters)
|
102
102
|
|
103
103
|
scope = cached_spatial_join(other)
|
104
104
|
scope = scope.select(options[:columns])
|
@@ -204,7 +204,7 @@ module SpatialFeatures
|
|
204
204
|
end
|
205
205
|
|
206
206
|
def spatial_cache_for?(other, buffer_in_meters)
|
207
|
-
if cache =
|
207
|
+
if cache = spatial_caches.between(self, SpatialFeatures::Utils.class_of(other)).first
|
208
208
|
return cache.intersection_cache_distance.nil? if buffer_in_meters.nil? # cache must be total if no buffer_in_meters
|
209
209
|
return false if cache.stale? # cache must be for current features
|
210
210
|
return true if cache.intersection_cache_distance.nil? # always good if cache is total
|
data/lib/spatial_features.rb
CHANGED
@@ -9,6 +9,7 @@ require 'google/apis/drive_v3'
|
|
9
9
|
|
10
10
|
# LIB
|
11
11
|
require 'spatial_features/caching'
|
12
|
+
require 'spatial_features/uncached_result'
|
12
13
|
require 'spatial_features/venn_polygons'
|
13
14
|
require 'spatial_features/controller_helpers/spatial_extensions'
|
14
15
|
require 'spatial_features/download'
|
@@ -34,12 +35,6 @@ require 'spatial_features/importers/shapefile'
|
|
34
35
|
|
35
36
|
require 'spatial_features/engine'
|
36
37
|
|
37
|
-
module SpatialFeatures
|
38
|
-
module UncachedRelation
|
39
|
-
include ActiveRecord::NullRelation
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
38
|
# Load the act method
|
44
39
|
ActiveRecord::Base.send :extend, SpatialFeatures::ActMethod
|
45
40
|
ActiveRecord::Base.send :extend, SpatialFeatures::FusionTables::ActMethod
|
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.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Wallace
|
@@ -9,20 +9,20 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-02-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '4.2'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '4.2'
|
28
28
|
- !ruby/object:Gem::Dependency
|
@@ -170,6 +170,7 @@ files:
|
|
170
170
|
- lib/spatial_features/importers/kml_file.rb
|
171
171
|
- lib/spatial_features/importers/kml_file_arcgis.rb
|
172
172
|
- lib/spatial_features/importers/shapefile.rb
|
173
|
+
- lib/spatial_features/uncached_result.rb
|
173
174
|
- lib/spatial_features/unzip.rb
|
174
175
|
- lib/spatial_features/utils.rb
|
175
176
|
- lib/spatial_features/venn_polygons.rb
|