Sha256: 522e1147fb6e7712618b1d96047668b7af1022cf36b90ca428d86cd27e91fb0b
Contents?: true
Size: 1.28 KB
Versions: 2
Compression:
Stored size: 1.28 KB
Contents
require_dependency SpatialFeatures::Engine.root.join('app/models/abstract_feature') class AggregateFeature < AbstractFeature has_many :features, lambda { |aggregate| where(:spatial_model_type => aggregate.spatial_model_type) }, :foreign_key => :spatial_model_id, :primary_key => :spatial_model_id # Aggregate the features for the spatial model into a single feature def refresh feature_array_sql = <<~SQL ARRAY[ (#{features.select('ST_Multi(ST_Union(ST_CollectionExtract(geog::geometry, 1)))').to_sql}), (#{features.select('ST_Multi(ST_Union(ST_CollectionExtract(geog::geometry, 2)))').to_sql}), (#{features.select('ST_Multi(ST_Union(ST_CollectionExtract(geog::geometry, 3)))').to_sql}) ] SQL # Remove empty features so ST_COLLECT doesn't choke. This seems to be a difference between PostGIS 2.x and 3.x compacted_feature_array_sql = <<~SQL array_remove( array_remove( array_remove(#{feature_array_sql}, ST_GeomFromText('MultiPoint EMPTY')), ST_GeomFromText('MultiLinestring EMPTY')), ST_GeomFromText('MultiPolygon EMPTY')) SQL self.geog = ActiveRecord::Base.connection.select_value <<~SQL SELECT ST_Collect(#{compacted_feature_array_sql})::geography SQL self.save! end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
spatial_features-2.9.3 | app/models/aggregate_feature.rb |
spatial_features-2.9.2 | app/models/aggregate_feature.rb |