Class: HasGeoLookup::BoundaryImporter
- Inherits:
-
Object
- Object
- HasGeoLookup::BoundaryImporter
- Defined in:
- lib/has_geo_lookup/boundary_importer.rb
Class Method Summary collapse
-
.import_country(iso2_code, options = {}) ⇒ Hash
Import all available ADM levels (1-4) for a country.
-
.import_level(iso2_code, adm_level, options = {}) ⇒ Hash
Import boundaries for a specific ADM level.
Class Method Details
.import_country(iso2_code, options = {}) ⇒ Hash
Import all available ADM levels (1-4) for a country
21 22 23 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 49 50 51 52 53 54 55 |
# File 'lib/has_geo_lookup/boundary_importer.rb', line 21 def import_country(iso2_code, = {}) iso2 = iso2_code&.upcase raise ArgumentError, "Please provide a 2-letter country code" unless iso2 cache_dir = [:cache_dir] || default_cache_dir verbose = .fetch(:verbose, true) # Convert ISO2 to ISO3 using iso_3166 gem with fallbacks iso3, country_name = resolve_country_codes(iso2, verbose) errors = [] total_processed = 0 factory = create_geometry_factory (1..5).each do |level| adm = "ADM#{level}" puts "📍 Importing #{adm} boundaries..." if verbose result = import_adm_level(iso3, adm, factory, cache_dir, errors, verbose) unless result[:success] puts "⏭️ Skipping remaining ADM levels (#{adm} and higher not available)" if verbose break end total_processed += result[:count] end { success: true, total_processed: total_processed, errors: errors, country: { iso2: iso2, iso3: iso3, name: country_name } } end |
.import_level(iso2_code, adm_level, options = {}) ⇒ Hash
Import boundaries for a specific ADM level
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/has_geo_lookup/boundary_importer.rb', line 64 def import_level(iso2_code, adm_level, = {}) iso2 = iso2_code&.upcase raise ArgumentError, "Please provide a 2-letter country code" unless iso2 raise ArgumentError, "Please provide ADM level (ADM1-ADM5)" unless adm_level&.match?(/\AADM[1-5]\z/) cache_dir = [:cache_dir] || default_cache_dir verbose = .fetch(:verbose, true) iso3, country_name = resolve_country_codes(iso2, verbose) errors = [] factory = create_geometry_factory result = import_adm_level(iso3, adm_level, factory, cache_dir, errors, verbose) { success: result[:success], total_processed: result[:count], errors: errors, country: { iso2: iso2, iso3: iso3, name: country_name } } end |