class ADIWG::Mdtranslator::Writers::Fgdc::PlanarInformation

Public Class Methods

new(xml, hResponseObj) click to toggle source
# File lib/adiwg/mdtranslator/writers/fgdc/classes/class_planarInfo.rb, line 17
def initialize(xml, hResponseObj)
   @xml = xml
   @hResponseObj = hResponseObj
   @NameSpace = ADIWG::Mdtranslator::Writers::Fgdc
end

Public Instance Methods

writeXML(aRepTypes, aResolutions, inContext = nil) click to toggle source
# File lib/adiwg/mdtranslator/writers/fgdc/classes/class_planarInfo.rb, line 23
def writeXML(aRepTypes, aResolutions, inContext = nil)

   # <- spatialReferencesTypes[] (encoding method) 4.1.2.4.1
   # <- spatialResolution[].coordinateResolution (coordinate representation) 4.1.2.4.2
   # <- spatialResolution[].bearingDistanceResolution (bearing-distance representation) 4.1.2.4.3
   # <- spatialResolution[] (distance units) 4.1.2.4.4

   haveCInfo = false
   haveCInfo = true unless aRepTypes.empty?
   aResolutions.each do |hResolution|
      haveCInfo = true if hResolution[:coordinateResolution]
      haveCInfo = true if hResolution[:bearingDistanceResolution]
   end
   unitOfMeasure = nil

   # coordinate information 4.1.2.4 (planci) - planar coordinate information
   if haveCInfo
      @xml.tag!('planci') do

         # coordinate information 4.1.2.4.1 (plance) - planar coordinate encoding method (required)
         # <- spatialRepresentationTypes[].first
         unless aRepTypes.empty?
            @xml.tag!('plance', aRepTypes[0])
         end
         if aRepTypes.empty?
            @NameSpace.issueWarning(260, 'plance', inContext)
         end

         # <- spatialResolutions[] look for coordinateResolution or bearingDistanceResolution
         # take first one encountered, only one is permitted in FGDC
         aResolutions.each do |hResolution|
            unless hResolution[:coordinateResolution].empty?
               hCoordRes = hResolution[:coordinateResolution]

               # coordinate information 4.1.2.4.2 (coordrep) - coordinate representation
               @xml.tag!('coordrep') do

                  # coordinate information 4.1.2.4.2.1 (absres) - abscissa resolution (required)
                  unless hCoordRes[:abscissaResolutionX].nil?
                     @xml.tag!('absres', hCoordRes[:abscissaResolutionX].to_f)
                  end
                  if hCoordRes[:abscissaResolutionX].nil?
                     @NameSpace.issueWarning(261, 'absres', inContext)
                  end

                  # coordinate information 4.1.2.4.2.2 (ordres) - ordinate resolution (required)
                  unless hCoordRes[:ordinateResolutionY].nil?
                     @xml.tag!('ordres', hCoordRes[:ordinateResolutionY].to_f)
                  end
                  if hCoordRes[:ordinateResolutionY].nil?
                     @NameSpace.issueWarning(262, 'ordres', inContext)
                  end

                  # coordinate information 4.1.2.4.4 (plandu) - distance unit of measure (required)
                  unless hCoordRes[:unitOfMeasure].nil?
                     unitOfMeasure = hCoordRes[:unitOfMeasure]
                  end
                  if hCoordRes[:unitOfMeasure].nil?
                     @NameSpace.issueWarning(263, 'plandu', inContext)
                  end

               end
               break
            end

            unless hResolution[:bearingDistanceResolution].empty?
               hBearRes = hResolution[:bearingDistanceResolution]

               # coordinate information 4.1.2.4.3 (distbrep) - bearing and distance representation
               @xml.tag!('distbrep') do

                  # coordinate information 4.1.2.4.3.1 (distres) - distance resolution (required)
                  unless hBearRes[:distanceResolution].nil?
                     @xml.tag!('distres', hBearRes[:distanceResolution].to_f)
                  end
                  if hBearRes[:distanceResolution].nil?
                     @NameSpace.issueWarning(264, 'distres', inContext)
                  end

                  # coordinate information 4.1.2.4.3.2 (bearres) - bearing resolution (required)
                  unless hBearRes[:bearingResolution].nil?
                     @xml.tag!('bearres', hBearRes[:bearingResolution])
                  end
                  if hBearRes[:bearingResolution].nil?
                     @NameSpace.issueWarning(265, 'bearres', inContext)
                  end

                  # coordinate information 4.1.2.4.3.3 (bearunit) - bearing units of measure (required)
                  unless hBearRes[:bearingUnitOfMeasure].nil?
                     @xml.tag!('bearunit', hBearRes[:bearingUnitOfMeasure])
                  end
                  if hBearRes[:bearingUnitOfMeasure].nil?
                     @NameSpace.issueWarning(266, 'bearunit', inContext)
                  end

                  # coordinate information 4.1.2.4.3.4 (bearrefd) - bearing units of measure (required)
                  unless hBearRes[:bearingReferenceDirection].nil?
                     @xml.tag!('bearrefd', hBearRes[:bearingReferenceDirection])
                  end
                  if hBearRes[:bearingReferenceDirection].nil?
                     @NameSpace.issueWarning(267, 'bearrefd', inContext)
                  end

                  # coordinate information 4.1.2.4.3.5 (bearrefm) - bearing reference meridian (required)
                  unless hBearRes[:bearingReferenceMeridian].nil?
                     @xml.tag!('bearrefm', hBearRes[:bearingReferenceMeridian])
                  end
                  if hBearRes[:bearingReferenceMeridian].nil?
                     @NameSpace.issueWarning(268, 'bearrefm',inContext)
                  end

                  # coordinate information 4.1.2.4.4 (plandu) - distance unit of measure (required)
                  unless hBearRes[:distanceUnitOfMeasure].nil?
                     unitOfMeasure = hBearRes[:distanceUnitOfMeasure]
                  end
                  if hBearRes[:distanceUnitOfMeasure].nil?
                     @NameSpace.issueWarning(269, 'plandu', inContext)
                  end

               end

            end
         end

         # planar distance units 4.1.2.4.4 (plandu) - (required)
         # value and error messages handled in above code
         # just write it out here
         unless unitOfMeasure.nil?
            @xml.tag!('plandu', unitOfMeasure)
         end

      end
   end

   # error message
   unless haveCInfo
      @NameSpace.issueWarning(270, nil, inContext)
   end

end