Module: Stanford::Mods::Geospatial

Included in:
Record
Defined in:
lib/stanford-mods/concerns/geo_spatial.rb

Overview

NON-SearchWorks specific wranglings of MODS cartographics metadata

Constant Summary collapse

GMLNS =
'http://www.opengis.net/gml/3.2/'.freeze

Instance Method Summary collapse

Instance Method Details

#coordinatesArray{String}

Returns subject cartographic coordinates values.

Returns:

  • (Array{String})

    subject cartographic coordinates values



10
11
12
# File 'lib/stanford-mods/concerns/geo_spatial.rb', line 10

def coordinates
  Array(mods_ng_xml.subject.cartographics.coordinates).map(&:text)
end

#coordinates_as_bboxArray{String} Also known as: point_bbox

Returns with 4-part space-delimted strings, like “-16.0 -15.0 28.0 13.0”.

Returns:

  • (Array{String})

    with 4-part space-delimted strings, like “-16.0 -15.0 28.0 13.0”



60
61
62
# File 'lib/stanford-mods/concerns/geo_spatial.rb', line 60

def coordinates_as_bbox
  coordinates_objects.map(&:as_bbox).compact
end

#coordinates_as_envelopeArray{String}

Returns values suitable for solr SRPT fields, like “ENVELOPE(-16.0, 28.0, 13.0, -15.0)”.

Returns:

  • (Array{String})

    values suitable for solr SRPT fields, like “ENVELOPE(-16.0, 28.0, 13.0, -15.0)”



55
56
57
# File 'lib/stanford-mods/concerns/geo_spatial.rb', line 55

def coordinates_as_envelope
  coordinates_objects.map(&:as_envelope).compact
end

#coordinates_objectsArray{Stanford::Mods::Coordinate}

Returns valid coordinates as objects.

Returns:



50
51
52
# File 'lib/stanford-mods/concerns/geo_spatial.rb', line 50

def coordinates_objects
  coordinates.map { |n| Stanford::Mods::Coordinate.new(n) }.select(&:valid?)
end

#geo_extensions_as_envelopeArray{String}

Note:

example xml leaf nodes <gml:lowerCorner>-122.191292 37.4063388</gml:lowerCorner> <gml:upperCorner>-122.149475 37.4435369</gml:upperCorner>

Returns values suitable for solr SRPT fields, like “ENVELOPE(-16.0, 28.0, 13.0, -15.0)”.

Returns:

  • (Array{String})

    values suitable for solr SRPT fields, like “ENVELOPE(-16.0, 28.0, 13.0, -15.0)”



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/stanford-mods/concerns/geo_spatial.rb', line 18

def geo_extensions_as_envelope
  mods_ng_xml.extension
             .xpath(
               '//rdf:RDF/rdf:Description/gml:boundedBy/gml:Envelope',
               'gml' => GMLNS,
               'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
             ).map do |v|
               uppers = v.xpath('gml:upperCorner', 'gml' => GMLNS).text.split
               lowers = v.xpath('gml:lowerCorner', 'gml' => GMLNS).text.split
               "ENVELOPE(#{lowers[0]}, #{uppers[0]}, #{uppers[1]}, #{lowers[1]})"
             end
rescue RuntimeError
  []
end

#geo_extensions_point_dataArray{String}

Note:

example xml leaf nodes <gml:pos>-122.191292 37.4063388</gml:pos>

Returns values suitable for solr SRPT fields, like “-16.0 28.0”.

Returns:

  • (Array{String})

    values suitable for solr SRPT fields, like “-16.0 28.0”



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/stanford-mods/concerns/geo_spatial.rb', line 36

def geo_extensions_point_data
  mods_ng_xml.extension
             .xpath(
               '//rdf:RDF/rdf:Description/gmd:centerPoint/gml:Point[gml:pos]',
               'gml' => GMLNS,
               'gmd' => 'http://www.isotc211.org/2005/gmd',
               'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
             ).map do |v|
               lat, long = v.xpath('gml:pos', 'gml' => GMLNS).text.split
               "#{long} #{lat}"
             end
end