Sha256: 32642c324edb89502833d8d3ac99fcee8bd40101b3cdea87779755dd94ab5e86
Contents?: true
Size: 1.78 KB
Versions: 2
Compression:
Stored size: 1.78 KB
Contents
require 'open-uri' module SpatialFeatures module Importers class File < SimpleDelegator INVALID_ARCHIVE = "Archive did not contain a .kml, .shp, .json, or .geojson file.".freeze SUPPORTED_FORMATS = "Supported formats are KMZ, KML, zipped ArcGIS shapefiles, ESRI JSON, and GeoJSON.".freeze FILE_PATTERNS = [/\.kml$/, /\.shp$/, /\.json$/, /\.geojson$/] def self.create_all(data, **options) Download.open_each(data, unzip: FILE_PATTERNS, downcase: true, tmpdir: options[:tmpdir]).map do |file| new(data, **options, current_file: file) end rescue Unzip::PathNotFound raise ImportError, INVALID_ARCHIVE + " " + SUPPORTED_FORMATS end # The File importer may be initialized multiple times by `::create_all` if it # receives ZIP data containing multiple KML or SHP files. We use `current_file` # to distinguish which file in the archive is currently being # processed. # # If no `current_file` is passed then we just take the first valid file that we find. def initialize(data, *args, current_file: nil, **options) begin current_file ||= Download.open_each(data, unzip: FILE_PATTERNS, downcase: true, tmpdir: options[:tmpdir]).first rescue Unzip::PathNotFound raise ImportError, INVALID_ARCHIVE end case ::File.extname(current_file.path.downcase) when '.kml' __setobj__(KMLFile.new(current_file, *args, **options)) when '.shp' __setobj__(Shapefile.new(current_file, *args, **options)) when '.json', '.geojson' __setobj__(ESRIGeoJSON.new(current_file.path, *args, **options)) else raise ImportError, "Could not import file. " + SUPPORTED_FORMATS end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
spatial_features-3.1.0 | lib/spatial_features/importers/file.rb |
spatial_features-3.0.2 | lib/spatial_features/importers/file.rb |