class GeoCombine::CkanMetadata
Constants
- MAX_STRING_LENGTH
Attributes
metadata[R]
Public Class Methods
new(metadata)
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 6 def initialize(metadata) @metadata = JSON.parse(metadata) end
Public Instance Methods
downloadable?()
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 97 def downloadable? resource_urls('download').first =~ /.*\.zip/im end
envelope()
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 41 def envelope return envelope_from_bbox unless envelope_from_bbox.nil? return envelope_from_spatial(',') unless envelope_from_spatial(',').nil? return envelope_from_spatial(' ') unless envelope_from_spatial(' ').nil? end
envelope_from_bbox()
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 47 def envelope_from_bbox bbox = GeoCombine::BoundingBox.new( west: extras('bbox-west-long'), south: extras('bbox-south-lat'), east: extras('bbox-east-long'), north: extras('bbox-north-lat') ) begin return bbox.to_envelope if bbox.valid? rescue GeoCombine::Exceptions::InvalidGeometry return nil end end
envelope_from_spatial(delimiter)
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 61 def envelope_from_spatial(delimiter) bbox = GeoCombine::BoundingBox.from_string_delimiter( extras('spatial'), delimiter: delimiter ) begin return bbox.to_envelope if bbox.valid? rescue GeoCombine::Exceptions::InvalidGeometry return nil end end
external_references()
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 85 def external_references h = { 'http://schema.org/url' => resource_urls('information').first } if downloadable? h['http://schema.org/downloadUrl'] = resource_urls('download').first end h.select { |_k, v| !v.nil? } end
extras(key)
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 77 def extras(key) if @metadata['extras'] @metadata['extras'].select { |h| h['key'] == key }.collect { |v| v['value'] }[0] || '' else '' end end
geoblacklight_terms()
click to toggle source
Builds a Geoblacklight
Schema type hash from Esri Open Data portal metadata @return [Hash]
# File lib/geo_combine/ckan_metadata.rb, line 21 def geoblacklight_terms { dc_identifier_s: @metadata['id'], dc_title_s: @metadata['title'], dc_rights_s: 'Public', layer_geom_type_s: 'Not Specified', dct_provenance_s: organization['title'], dc_description_s: @metadata['notes'].respond_to?(:[]) ? @metadata['notes'][0..MAX_STRING_LENGTH] : nil, layer_slug_s: @metadata['name'], solr_geom: envelope, dc_subject_sm: subjects, dct_references_s: external_references.to_json.to_s, dc_format_s: downloadable? ? 'ZIP' : nil # TODO: we only allow direct ZIP file downloads }.select { |_k, v| !v.nil? } end
organization()
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 37 def organization @metadata['organization'] || { title: '' } end
resource_urls(type)
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 106 def resource_urls(type) resources(type).collect do |resource| resource['url'] if resource.respond_to?(:[]) end end
resources(type)
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 101 def resources(type) return [] if @metadata['resources'].nil? @metadata['resources'].select { |resource| resource['resource_locator_function'] == type } end
subjects()
click to toggle source
# File lib/geo_combine/ckan_metadata.rb, line 73 def subjects extras('tags').split(',').map(&:strip) end
to_geoblacklight()
click to toggle source
Creates and returns a Geoblacklight
schema object from this metadata @return [GeoCombine::Geoblacklight]
# File lib/geo_combine/ckan_metadata.rb, line 13 def to_geoblacklight GeoCombine::Geoblacklight.new(geoblacklight_terms.to_json) end