Sha256: add8ca90cb96d93a6365df1dadfa0a9fe17eb90e34218758b448d382264757f3
Contents?: true
Size: 1.24 KB
Versions: 1
Compression:
Stored size: 1.24 KB
Contents
# encoding: UTF-8 require 'logger' require 'mods' # NON-SearchWorks specific wranglings of MODS cartographics metadata module Stanford module Mods class Record < ::Mods::Record def coordinates Array(@mods_ng_xml.subject.cartographics.coordinates).map(&:text) end def point_bbox coordinates.map do |n| matches = n.match(/^\(([^)]+)\)\.?$/) next unless matches coord_to_bbox(matches[1]) end.compact end private def coord_to_bbox(coord) matches = coord.match %r{(?<lat>.+--.+)\s*/\s*(?<lng>.+--.+)} return unless matches min_x, max_x = matches['lat'].split('--').map { |x| coord_to_decimal(x) } max_y, min_y = matches['lng'].split('--').map { |y| coord_to_decimal(y) } "#{min_x} #{min_y} #{max_x} #{max_y}" end def coord_to_decimal(point) regex = /(?<dir>[NESW])\s*(?<deg>\d+)°(?:(?<sec>\d+)ʹ)?/ match = regex.match(point) return unless match dec = 0 dec += match['deg'].to_i dec += match['sec'].to_f / 60 dec = -1 * dec if match['dir'] == 'W' || match['dir'] == 'S' dec end end # class Record end # Module Mods end # Module Stanford
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
stanford-mods-1.3.1 | lib/stanford-mods/geo_spatial.rb |