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, 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, 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 42 43 44 45 46 47 48 |
# File 'lib/spatial_features/importers/file.rb', line 24 def initialize(data, current_file: nil, **) begin @current_file = 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(data).downcase when '.kmz' # KMZ always has a single kml in it, so no need to show mention it [:source_identifier] = ::File.basename(data) else [:source_identifier] = [::File.basename(data), ::File.basename(@current_file.path)].uniq.join('/') end case ::File.extname(filename) when '.kml' __setobj__(KMLFile.new(@current_file, **)) when '.shp' __setobj__(Shapefile.new(@current_file, **)) when '.json', '.geojson' __setobj__(ESRIGeoJSON.new(@current_file.path, **)) else import_error 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 |