module ADIWG::Mdtranslator::Readers::Fgdc::PlanarCoordinateInformation

Public Class Methods

unpack(xPlanarCI, hResourceInfo, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/readers/fgdc/modules/module_planarCoordinateInfo.rb, line 17
def self.unpack(xPlanarCI, hResourceInfo, hResponseObj)

   # instance classes needed in script
   intMetadataClass = InternalMetadata.new

   # map projection 4.1.2.4.1 (plance) - planar coordinate encoding method (required)
   # -> resourceInfo.spatialRepresentationTypes
   encoding = xPlanarCI.xpath('./plance').text
   unless encoding.empty?
      hResourceInfo[:spatialRepresentationTypes] << encoding
   end
   if encoding.empty?
      hResponseObj[:readerExecutionMessages] <<
         'WARNING: FGDC reader: planar coordinate encoding method is missing'
   end

   haveRep = false
   # map projection 4.1.2.4.2 (coordrep) - coordinate representation (required)
   xCoordRep = xPlanarCI.xpath('./coordrep')
   unless xCoordRep.empty?

      haveRep = true
      hCoordResolution = intMetadataClass.newCoordinateResolution

      # map projection 4.1.2.4.2.1 (absres) - abscissa resolution (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.coordinateResolution.abscissaResolutionX
      abscissa = xCoordRep.xpath('./absres').text
      unless abscissa.empty?
         hCoordResolution[:abscissaResolutionX] = abscissa.to_f
      end
      if abscissa.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: coordinate representation abscissa resolution is missing'
      end

      # map projection 4.1.2.4.2.2 (ordres) - ordinate resolution (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.coordinateResolution.ordinateResolutionY
      ordinate = xCoordRep.xpath('./ordres').text
      unless ordinate.empty?
         hCoordResolution[:ordinateResolutionY] = ordinate.to_f
      end
      if ordinate.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: coordinate representation ordinate resolution is missing'
      end

      # map projection 4.1.2.4.4 (plandu) - planar distance units (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.coordinateResolution.unitOfMeasure
      distUnits = xPlanarCI.xpath('./plandu').text
      unless distUnits.empty?
         hCoordResolution[:unitOfMeasure] = distUnits
      end
      if distUnits.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: planar distance units are missing'
      end

      hResolution = intMetadataClass.newSpatialResolution
      hResolution[:coordinateResolution] = hCoordResolution
      hResourceInfo[:spatialResolutions] << hResolution

   end

   # map projection 4.1.2.4.3 (distbrep) - distance and bearing representation (required)
   xBDRep = xPlanarCI.xpath('./distbrep')
   unless xBDRep.empty?

      haveRep = true
      hBDResolution = intMetadataClass.newBearingDistanceResolution

      # map projection 4.1.2.4.3.1 (distres) - distance resolution (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.bearingDistanceResolution.distanceResolution
      distRes = xBDRep.xpath('./distres').text
      unless distRes.empty?
         hBDResolution[:distanceResolution] = distRes.to_f
      end
      if distRes.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: bearing-distance distance resolution is missing'
      end

      # map projection 4.1.2.4.4 (plandu) - planar distance units (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.bearingDistanceResolution.distanceUnitOfMeasure
      distUnits = xPlanarCI.xpath('./plandu').text
      unless distUnits.empty?
         hBDResolution[:distanceUnitOfMeasure] = distUnits
      end
      if distUnits.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: bearing-distance distance units is missing'
      end

      # map projection 4.1.2.4.3.2 (bearres) - bearing resolution (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.bearingDistanceResolution.bearingResolution
      bearingRes = xBDRep.xpath('./bearres').text
      unless bearingRes.empty?
         hBDResolution[:bearingResolution] = bearingRes.to_f
      end
      if bearingRes.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: bearing-distance bearing resolution is missing'
      end

      # map projection 4.1.2.4.3.3 (bearunit) - bearing units (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.bearingDistanceResolution.bearingUnitsOfMeasure
      bearingUnits = xBDRep.xpath('./bearunit').text
      unless bearingUnits.empty?
         hBDResolution[:bearingUnitsOfMeasure] = bearingUnits
      end
      if bearingUnits.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: bearing-distance bearing units is missing'
      end

      # map projection 4.1.2.4.3.4 (bearrefd) - bearing reference direction (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.bearingDistanceResolution.bearingReferenceDirection
      bearingDirection = xBDRep.xpath('./bearrefd').text
      unless bearingDirection.empty?
         hBDResolution[:bearingReferenceDirection] = bearingDirection
      end
      if bearingDirection.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: bearing-distance bearing direction is missing'
      end

      # map projection 4.1.2.4.3.5 (bearrefm) - bearing reference meridian (required)
      # -> resourceInfo.spatialResolutions.spatialResolution.bearingDistanceResolution.bearingReferenceMeridian
      bearingMeridian = xBDRep.xpath('./bearrefm').text
      unless bearingMeridian.empty?
         hBDResolution[:bearingReferenceMeridian] = bearingMeridian
      end
      if bearingMeridian.empty?
         hResponseObj[:readerExecutionMessages] <<
            'WARNING: FGDC reader: bearing-distance bearing meridian is missing'
      end

      # packing
      hResolution = intMetadataClass.newSpatialResolution
      hResolution[:bearingDistanceResolution] = hBDResolution
      hResourceInfo[:spatialResolutions] << hResolution

   end

   # error messages
   unless haveRep
      hResponseObj[:readerExecutionMessages] <<
         'WARNING: FGDC reader: planar coordinate representation is missing'
   end

   # map projection 4.1.2.4.4 (plandu) - planar distance units
   # handled in sections coordinateResolution and bearingDistanceResolution sections above
   # -> resourceInfo.spatialResolutions.spatialResolution.bearingDistanceResolution.distanceUnitOfMeasure
   # -> resourceInfo.spatialResolutions.spatialResolution.coordinateResolution.unitOfMeasure

   return nil

end