Class: SpatialFeatures::Importers::File

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/spatial_features/importers/file.rb

Constant Summary collapse

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$/]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data, *args, current_file: nil, **options) ⇒ File

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.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/spatial_features/importers/file.rb', line 24

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

Class Method Details

.create_all(data, **options) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/spatial_features/importers/file.rb', line 10

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