Module: SpatialFeatures::InstanceMethods

Defined in:
lib/spatial_features/has_spatial_features.rb

Instance Method Summary collapse

Instance Method Details

#covers?(other) ⇒ Boolean

Returns:

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

Returns:

  • (Boolean)


186
187
188
# File 'lib/spatial_features/has_spatial_features.rb', line 186

def features?
  features.present?
end

#features_area_in_square_metersObject



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_keyObject



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

Returns:

  • (Boolean)


165
166
167
# File 'lib/spatial_features/has_spatial_features.rb', line 165

def has_spatial_features?
  true
end

#intersects?(other) ⇒ Boolean

Returns:

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

Returns:

  • (Boolean)


178
179
180
# File 'lib/spatial_features/has_spatial_features.rb', line 178

def lines?
  !features.lines.empty?
end

#points?Boolean

Returns:

  • (Boolean)


182
183
184
# File 'lib/spatial_features/has_spatial_features.rb', line 182

def points?
  !features.points.empty?
end

#polygons?Boolean

Returns:

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

Returns:

  • (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_areaObject



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