Class: SpatialFeatures::Importers::File
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- SpatialFeatures::Importers::File
- 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
-
#initialize(data, *args, current_file: nil, **options) ⇒ File
constructor
The File importer may be initialized multiple times by ‘::create_all` if it receives ZIP data containing multiple KML or SHP files.
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, **) begin current_file ||= Download.open_each(data, unzip: FILE_PATTERNS, downcase: true, tmpdir: [: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, **)) when '.shp' __setobj__(Shapefile.new(current_file, *args, **)) when '.json', '.geojson' __setobj__(ESRIGeoJSON.new(current_file.path, *args, **)) 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, **) Download.open_each(data, unzip: FILE_PATTERNS, downcase: true, tmpdir: [:tmpdir]).map do |file| new(data, **, current_file: file) end rescue Unzip::PathNotFound raise ImportError, INVALID_ARCHIVE + " " + SUPPORTED_FORMATS end |