module ADIWG::Mdtranslator::Readers::MdJson::GeometryFeature

Public Class Methods

unpack(hFeature, responseObj) click to toggle source
# File lib/adiwg/mdtranslator/readers/mdJson/modules/module_geometryFeature.rb, line 21
def self.unpack(hFeature, responseObj)

   @MessagePath = ADIWG::Mdtranslator::Readers::MdJson::MdJson

   # return nil object if input is empty
   if hFeature.empty?
      @MessagePath.issueWarning(370, responseObj)
      return nil
   end

   # instance classes needed in script
   intMetadataClass = InternalMetadata.new
   intFeature = intMetadataClass.newGeometryFeature

   # geometry feature - type (required)
   if hFeature.has_key?('type')
      unless hFeature['type'] == ''
         if hFeature['type'] == 'Feature'
            intFeature[:type] = hFeature['type']
         else
            @MessagePath.issueError(371, responseObj)
         end
      end
   end
   if intFeature[:type].nil? || intFeature[:type] == ''
      @MessagePath.issueError(372, responseObj)
   end

   # geometry feature - id
   if hFeature.has_key?('id')
      unless hFeature['id'] == ''
         intFeature[:id] = hFeature['id']
      end
   end

   # geometry feature - bounding box
   if hFeature.has_key?('bbox')
      unless hFeature['bbox'].empty?
         intFeature[:bbox] = hFeature['bbox']
      end
   end

   # geometry feature - geometry (required, but may be JSON null)
   if hFeature.has_key?('geometry')
      unless hFeature['geometry'].empty?
         hGeometry = hFeature['geometry']
         if hGeometry['type'] == 'GeometryCollection'
            hReturn = GeometryCollection.unpack(hGeometry, responseObj)
         else
            hReturn = GeometryObject.unpack(hGeometry, responseObj)
         end
         unless hReturn.nil?
            intFeature[:geometryObject] = hReturn
         end
      end
   else
      @MessagePath.issueError(373, responseObj)
   end

   # geometry feature - properties
   if hFeature.has_key?('properties')
      hObject = hFeature['properties']
      unless hObject.empty?
         hReturn = GeometryProperties.unpack(hObject, responseObj)
         unless hReturn.nil?
            intFeature[:properties] = hReturn
         end
      end
   end

   # geometry feature - computed bounding box for feature
   unless intFeature[:geometryObject].empty?
      intFeature[:computedBbox] = AdiwgCoordinates.computeBbox([intFeature[:geometryObject]])
   end

   # geometry feature - save native GeoJSON for feature
   intFeature[:nativeGeoJson] = hFeature

   return intFeature

end