Module: Otu::Maps
Instance Method Summary collapse
-
#cached_map(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ Object
If the CachedMap is not yet built it is built here.
-
#cached_map_geo_json(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ Object
GeoJSON A hash (JSON) formated version of the geo-json.
-
#cached_map_id(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ id?
Return only the id if availble (avoids loading geometry).
-
#cached_map_string(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ Object
String A string representation of the geo json.
-
#create_cached_map(cached_map_type = 'CachedMapItem::WebLevel1', force = false) ⇒ Object
TODO: If: All children have OTUs, and all children have maps, combine those maps Should, in theory, speed-up higher level maps.
-
#quicker_cached_map(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ Object
Prioritize an existing version.
Instance Method Details
#cached_map(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ Object
If the CachedMap is not yet built it is built here.
40 41 42 43 44 |
# File 'app/models/otu/maps.rb', line 40 def cached_map(cached_map_type = 'CachedMapItem::WebLevel1') m = cached_maps.where(cached_map_type:).first m ||= create_cached_map(cached_map_type) m end |
#cached_map_geo_json(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ Object
Returns GeoJSON A hash (JSON) formated version of the geo-json.
54 55 56 57 |
# File 'app/models/otu/maps.rb', line 54 def cached_map_geo_json(cached_map_type = 'CachedMapItem::WebLevel1') s = cached_map_string(cached_map_type) s.present? ? JSON.parse( s ) : nil end |
#cached_map_id(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ id?
Return only the id if availble (avoids loading geometry)
48 49 50 |
# File 'app/models/otu/maps.rb', line 48 def cached_map_id(cached_map_type = 'CachedMapItem::WebLevel1') cached_maps.where(cached_map_type:).select(:id).first&.id end |
#cached_map_string(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ Object
Returns String A string representation of the geo json.
61 62 63 64 65 66 67 68 69 |
# File 'app/models/otu/maps.rb', line 61 def cached_map_string(cached_map_type = 'CachedMapItem::WebLevel1') mid = cached_map_id # don't load the whole object # Takes a long time. mid ||= cached_map&.id # need to create the object first return nil if mid.nil? CachedMap.select('ST_AsGeoJSON(geometry) geo_json').where(id: mid).first.geo_json end |
#create_cached_map(cached_map_type = 'CachedMapItem::WebLevel1', force = false) ⇒ Object
TODO: If:
*All* children have OTUs, and all children have maps, combine those maps
Should, in theory, speed-up higher level maps
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'app/models/otu/maps.rb', line 14 def create_cached_map(cached_map_type = 'CachedMapItem::WebLevel1', force = false) if force cached_map = cached_maps.where(cached_map_type:) cached_map&.destroy_all end # All the OTUs feeding into this map. otu_scope = Otu.select(:id).descendant_of_taxon_name(taxon_name_id) if gj = CachedMap.calculate_union(otu_scope, cached_map_type:) map = CachedMap.create!( otu: self, geo_json_string: gj, # Geometry conversion here cached_map_type:, reference_count: CachedMapItem.where(otu: otu_scope, type: cached_map_type).sum(:reference_count) ) map else nil end end |
#quicker_cached_map(cached_map_type = 'CachedMapItem::WebLevel1') ⇒ Object
Prioritize an existing version
72 73 74 75 76 77 |
# File 'app/models/otu/maps.rb', line 72 def quicker_cached_map(cached_map_type = 'CachedMapItem::WebLevel1') # TODO: sort by last_updated? m = cached_maps.select('id, otu_id, reference_count, project_id, created_at, updated_at, cached_map_type, ST_AsGeoJSON(geometry) geo_json').where(cached_map_type:).first m ||= create_cached_map m end |