Class: GeoConcerns::Extractors::FgdcMetadataExtractor
- Inherits:
-
Object
- Object
- GeoConcerns::Extractors::FgdcMetadataExtractor
- Defined in:
- app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb
Constant Summary collapse
- TOPIC_CATEGORIES =
ISO 19115 Topic Category
{ farming: 'Farming', biota: 'Biology and Ecology', climatologyMeteorologyAtmosphere: 'Climatology, Meteorology and Atmosphere', boundaries: 'Boundaries', elevation: 'Elevation', environment: 'Environment', geoscientificinformation: 'Geoscientific Information', health: 'Health', imageryBaseMapsEarthCover: 'Imagery and Base Maps', intelligenceMilitary: 'Military', inlandWaters: 'Inland Waters', location: 'Location', oceans: 'Oceans', planningCadastre: 'Planning and Cadastral', structure: 'Structures', transportation: 'Transportation', utilitiesCommunication: 'Utilities and Communication', society: 'Society' }.freeze
Instance Attribute Summary collapse
-
#doc ⇒ Object
readonly
Returns the value of attribute doc.
Instance Method Summary collapse
- #coverage ⇒ Object
- #coverage_coordinate(node, direction) ⇒ Object
- #creators ⇒ Object
-
#initialize(doc) ⇒ FgdcMetadataExtractor
constructor
A new instance of FgdcMetadataExtractor.
- #issued ⇒ Object
- #keywords ⇒ Object
- #metadata_optional ⇒ Object
- #metadata_required ⇒ Object
- #placenames ⇒ Object
- #publishers ⇒ Object
- #timeperiods ⇒ Object
- #to_hash ⇒ Object
Constructor Details
#initialize(doc) ⇒ FgdcMetadataExtractor
Returns a new instance of FgdcMetadataExtractor.
5 6 7 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 5 def initialize(doc) @doc = doc end |
Instance Attribute Details
#doc ⇒ Object (readonly)
Returns the value of attribute doc.
4 5 6 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 4 def doc @doc end |
Instance Method Details
#coverage ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 32 def coverage doc.at_xpath('//idinfo/spdom/bounding').tap do |node| return GeoConcerns::Coverage.new( coverage_coordinate(node, 'north'), coverage_coordinate(node, 'east'), coverage_coordinate(node, 'south'), coverage_coordinate(node, 'west') ).to_s end nil end |
#coverage_coordinate(node, direction) ⇒ Object
44 45 46 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 44 def coverage_coordinate(node, direction) node.at_xpath("#{direction}bc").text.to_f end |
#creators ⇒ Object
65 66 67 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 65 def creators extract_multivalued('//idinfo/citation/citeinfo/origin') end |
#issued ⇒ Object
48 49 50 51 52 53 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 48 def issued doc.at_xpath('//idinfo/citation/citeinfo/pubdate').tap do |node| return node.text[0..3].to_i unless node.nil? # extract year only end nil end |
#keywords ⇒ Object
73 74 75 76 77 78 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 73 def keywords keywords = extract_multivalued('//idinfo/keywords/theme/themekey') keywords.map! { |k| TOPIC_CATEGORIES[k.to_sym].present? ? TOPIC_CATEGORIES[k.to_sym] : k } keywords.uniq! keywords.present? ? keywords : nil end |
#metadata_optional ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 22 def { issued: issued, publisher: publishers, spatial: placenames, subject: keywords, temporal: timeperiods }.compact end |
#metadata_required ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 13 def { coverage: coverage, creator: creators, description: [doc.at_xpath('//idinfo/descript/abstract').text], title: [doc.at_xpath('//idinfo/citation/citeinfo/title').text] }.compact end |
#placenames ⇒ Object
69 70 71 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 69 def placenames extract_multivalued('//idinfo/keywords/place/placekey') end |
#publishers ⇒ Object
61 62 63 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 61 def publishers extract_multivalued('//idinfo/citation/citeinfo/pubinfo/publish') end |
#timeperiods ⇒ Object
55 56 57 58 59 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 55 def timeperiods ::GeoConcerns::TimePeriod.new( extract_multivalued('//idinfo/keywords/temporal/tempkey'), doc ).value end |
#to_hash ⇒ Object
9 10 11 |
# File 'app/models/concerns/geo_concerns/extractors/fgdc_metadata_extractor.rb', line 9 def to_hash .merge() end |