class NSWTopo::Shapefile::Source
def self.===(path)
def self.===(path) OS.ogrinfo "-ro", "-so", path true rescue OS::Error false end
def initialize(path)
def initialize(path) @path = path end
def layer(**options)
def layer(**options) Layer.new self, **options end
def layer_info
def layer_info OS.ogrinfo("-ro", "-so", @path).scan(/^\w*\d+: (.*?)(?: \(([\w\s]+)\))?$/).sort_by(&:first).map do |name, geom_type| geom_type ? "#{name} (#{geom_type.delete(?\s)})" : name end end
def only_layer
def only_layer name, *others = OS.ogrinfo("-ro", "-so", @path).scan(/^\w*\d+: (.*?)(?: \([\w\s]+\))?$/).flatten return nil if others.any? return name if name File.basename(@path, File.extname(@path)).tap do |name| OS.ogrinfo "-ro", "-so", @path, name end rescue OS::Error end