module ADIWG::Mdtranslator::Readers::Fgdc::GeodeticReference

Public Class Methods

unpack(xHorizontalRef, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_geodeticReference.rb, line 18
def self.unpack(xHorizontalRef, hResponseObj)

   # instance classes needed in script
   intMetadataClass = InternalMetadata.new

   hGeodetic = intMetadataClass.newGeodetic
   xGeodetic = xHorizontalRef.xpath('./geodetic')

   # geodetic model 4.1.4.1 (horizdn) - horizontal datum name
   # -> referenceSystemParameters.geodetic.datumIdentifier.identifier
   datumName = xGeodetic.xpath('./horizdn').text
   unless datumName.empty?
      hGeodetic[:datumIdentifier] = intMetadataClass.newIdentifier
      hGeodetic[:datumIdentifier][:identifier] = datumName
      hGeodetic[:datumIdentifier][:name] = datumName
   end

   # geodetic model 4.1.4.2 (ellips) - ellipsoid name (required)
   # -> referenceSystemParameters.geodetic.ellipsoidIdentifier.identifier
   ellipsoidName = xGeodetic.xpath('./ellips').text
   unless ellipsoidName.empty?
      hGeodetic[:ellipsoidIdentifier] = intMetadataClass.newIdentifier
      hGeodetic[:ellipsoidIdentifier][:identifier] = ellipsoidName
      hGeodetic[:ellipsoidIdentifier][:name] = ellipsoidName
   end
   if ellipsoidName.empty?
      hResponseObj[:readerExecutionMessages] <<
         'WARNING: FGDC reader: geodetic reference ellipsoid name is missing'
   end

   # geodetic model 4.1.4.3 (semiaxis) - semi-major axis (required)
   # -> referenceSystemParameters.geodetic.semiMajorAxis
   semiAxis = xGeodetic.xpath('./semiaxis').text
   unless semiAxis.empty?
      hGeodetic[:semiMajorAxis] = semiAxis.to_f
   end
   if semiAxis.empty?
      hResponseObj[:readerExecutionMessages] <<
         'WARNING: FGDC reader: geodetic reference radius of semi-major axis is missing'
   end

   # geodetic model 4.1.2.4.4 (plandu) - distance units
   # take value from the first 'planar' section with 'plandu' specified
   axPlanar = xHorizontalRef.xpath('./planar')
   unless axPlanar.empty?
      axPlanar.each do |xPlanar|
         xPlanCI = xPlanar.xpath('./planci')
         unless xPlanCI.empty?
            units = xPlanCI.xpath('./plandu').text
            unless units.empty?
               hGeodetic[:axisUnits] = units
            end
         end
      end
   end

   # geodetic model 4.1.4.4 (denflat) - denominator of flattening ratio (required)
   # -> referenceSystemParameters.geodetic.denominatorOfFlatteningRatio
   flattening = xGeodetic.xpath('./denflat').text
   unless flattening.empty?
      hGeodetic[:denominatorOfFlatteningRatio] = flattening.to_f
   end
   if flattening.empty?
      hResponseObj[:readerExecutionMessages] <<
         'WARNING: FGDC reader: geodetic reference denominator flattening ratio is missing'
   end

   hReferenceSystem = intMetadataClass.newSpatialReferenceSystem
   hSystemParameters = intMetadataClass.newReferenceSystemParameterSet
   hSystemParameters[:geodetic] = hGeodetic
   hReferenceSystem[:systemParameterSet] = hSystemParameters

   return hReferenceSystem

end