lib/adiwg/mdtranslator/readers/mdJson/modules/module_geometryFeature.rb in adiwg-mdtranslator-2.9.2 vs lib/adiwg/mdtranslator/readers/mdJson/modules/module_geometryFeature.rb in adiwg-mdtranslator-2.10.0

- old
+ new

@@ -1,112 +1,112 @@ # unpack geometry feature # Reader - ADIwg JSON to internal data structure # History: -# Stan Smith 2016-11-10 added computedBbox computation -# Stan Smith 2016-10-25 original script +# Stan Smith 2018-02-18 refactored error and warning messaging +# Stan Smith 2016-11-10 added computedBbox computation +# Stan Smith 2016-10-25 original script require_relative 'module_geometryObject' require_relative 'module_geometryProperties' require_relative 'module_geometryCollection' require 'adiwg/mdtranslator/internal/module_coordinates' module ADIWG - module Mdtranslator - module Readers - module MdJson + module Mdtranslator + module Readers + module MdJson - module GeometryFeature + module GeometryFeature - def self.unpack(hFeature, responseObj) + def self.unpack(hFeature, responseObj) - # return nil object if input is empty - if hFeature.empty? - responseObj[:readerExecutionMessages] << 'Geometry Feature object is empty' - responseObj[:readerExecutionPass] = false - return nil - end + # return nil object if input is empty + if hFeature.empty? + responseObj[:readerExecutionMessages] << 'WARNING: mdJson reader: GeoJSON geometry feature object is empty' + return nil + end - # instance classes needed in script - intMetadataClass = InternalMetadata.new - intFeature = intMetadataClass.newGeometryFeature + # instance classes needed in script + intMetadataClass = InternalMetadata.new + intFeature = intMetadataClass.newGeometryFeature - # geometry feature - type (required) - if hFeature.has_key?('type') - if hFeature['type'] != '' - if hFeature['type'] == 'Feature' - intFeature[:type] = hFeature['type'] - else - responseObj[:readerExecutionMessages] << 'Feature type must be Feature' - responseObj[:readerExecutionPass] = false - return nil - end - end + # geometry feature - type (required) + if hFeature.has_key?('type') + unless hFeature['type'] == '' + if hFeature['type'] == 'Feature' + intFeature[:type] = hFeature['type'] + else + responseObj[:readerExecutionMessages] << 'ERROR: mdJson reader: GeoJSON geometry feature type must be Feature' + responseObj[:readerExecutionPass] = false + return nil end - if intFeature[:type].nil? || intFeature[:type] == '' - responseObj[:readerExecutionMessages] << 'Feature is missing type' - responseObj[:readerExecutionPass] = false - return nil - end + end + end + if intFeature[:type].nil? || intFeature[:type] == '' + responseObj[:readerExecutionMessages] << 'ERROR: mdJson reader: GeoJSON geometry feature type is missing' + responseObj[:readerExecutionPass] = false + return nil + end - # geometry feature - id - if hFeature.has_key?('id') - unless hFeature['id'] == '' - intFeature[:id] = hFeature['id'] - end - 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 - 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 + # 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 - responseObj[:readerExecutionMessages] << 'Feature is missing geometry' - responseObj[:readerExecutionPass] = false - return nil + hReturn = GeometryObject.unpack(hGeometry, 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 + unless hReturn.nil? + intFeature[:geometryObject] = hReturn end + end + else + responseObj[:readerExecutionMessages] << 'ERROR: mdJson reader: GeoJSON geometry feature geometry is missing' + responseObj[:readerExecutionPass] = false + return nil + end - # geometry feature - computed bounding box for feature - unless intFeature[:geometryObject].empty? - intFeature[:computedBbox] = AdiwgCoordinates.computeBbox([intFeature[:geometryObject]]) + # 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 - save native GeoJSON for feature - intFeature[:nativeGeoJson] = hFeature + # geometry feature - computed bounding box for feature + unless intFeature[:geometryObject].empty? + intFeature[:computedBbox] = AdiwgCoordinates.computeBbox([intFeature[:geometryObject]]) + end - return intFeature + # geometry feature - save native GeoJSON for feature + intFeature[:nativeGeoJson] = hFeature - end + return intFeature - end + end end - end - end + + end + end + end end