Module: SpatialFeatures::InstanceMethods
- Defined in:
- lib/spatial_features/has_spatial_features.rb
Instance Method Summary collapse
- #covers?(other) ⇒ Boolean
- #features? ⇒ Boolean
- #features_area_in_square_meters ⇒ Object
- #features_cache_key ⇒ Object
- #has_spatial_features? ⇒ Boolean
- #intersects?(other) ⇒ Boolean
- #lines? ⇒ Boolean
- #points? ⇒ Boolean
- #polygons? ⇒ Boolean
- #spatial_cache_for(klass) ⇒ Object
- #spatial_cache_for?(klass, buffer_in_meters) ⇒ Boolean
- #total_intersection_area_in_square_meters(other) ⇒ Object
- #total_intersection_area_percentage(klass) ⇒ Object
- #update_features_area ⇒ Object
Instance Method Details
#covers?(other) ⇒ Boolean
190 191 192 |
# File 'lib/spatial_features/has_spatial_features.rb', line 190 def covers?(other) self.class.covering(other).exists?(self) end |
#features? ⇒ Boolean
186 187 188 |
# File 'lib/spatial_features/has_spatial_features.rb', line 186 def features? features.present? end |
#features_area_in_square_meters ⇒ Object
204 205 206 |
# File 'lib/spatial_features/has_spatial_features.rb', line 204 def features_area_in_square_meters @features_area_in_square_meters ||= features.area end |
#features_cache_key ⇒ Object
169 170 171 172 |
# File 'lib/spatial_features/has_spatial_features.rb', line 169 def features_cache_key max_id, count = features.pluck("MAX(id), COUNT(*)").first "#{self.class.name}/#{self.id}-#{max_id}-#{count}" end |
#has_spatial_features? ⇒ Boolean
165 166 167 |
# File 'lib/spatial_features/has_spatial_features.rb', line 165 def has_spatial_features? true end |
#intersects?(other) ⇒ Boolean
194 195 196 |
# File 'lib/spatial_features/has_spatial_features.rb', line 194 def intersects?(other) self.class.intersecting(other).exists?(self) end |
#lines? ⇒ Boolean
178 179 180 |
# File 'lib/spatial_features/has_spatial_features.rb', line 178 def lines? !features.lines.empty? end |
#points? ⇒ Boolean
182 183 184 |
# File 'lib/spatial_features/has_spatial_features.rb', line 182 def points? !features.points.empty? end |
#polygons? ⇒ Boolean
174 175 176 |
# File 'lib/spatial_features/has_spatial_features.rb', line 174 def polygons? !features.polygons.empty? end |
#spatial_cache_for(klass) ⇒ Object
224 225 226 |
# File 'lib/spatial_features/has_spatial_features.rb', line 224 def spatial_cache_for(klass) spatial_cache.where(:intersection_model_type => klass).first end |
#spatial_cache_for?(klass, buffer_in_meters) ⇒ Boolean
212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/spatial_features/has_spatial_features.rb', line 212 def spatial_cache_for?(klass, buffer_in_meters) if cache = spatial_cache_for(klass) return cache.intersection_cache_distance.nil? if buffer_in_meters.nil? # cache must be total if no buffer_in_meters return false if cache.stale? # cache must be for current features return true if cache.intersection_cache_distance.nil? # always good if cache is total return buffer_in_meters <= cache.intersection_cache_distance else return false end end |
#total_intersection_area_in_square_meters(other) ⇒ Object
208 209 210 |
# File 'lib/spatial_features/has_spatial_features.rb', line 208 def total_intersection_area_in_square_meters(other) features.total_intersection_area_in_square_meters(other.features) end |
#total_intersection_area_percentage(klass) ⇒ Object
198 199 200 201 202 |
# File 'lib/spatial_features/has_spatial_features.rb', line 198 def total_intersection_area_percentage(klass) return 0.0 unless features_area_in_square_meters > 0 ((total_intersection_area_in_square_meters(klass) / features_area_in_square_meters) * 100).round(1) end |
#update_features_area ⇒ Object
228 229 230 |
# File 'lib/spatial_features/has_spatial_features.rb', line 228 def update_features_area update_column :features_area, features.area(:cache => false) end |