class RGeoServer::ShapefileInfo

Attributes

file_path[R]

Public Class Methods

new(file_path) click to toggle source
# File lib/rgeoserver/utils/shapefile_info.rb, line 19
def initialize file_path
  @file_path = file_path
end

Public Instance Methods

bounds() click to toggle source
# File lib/rgeoserver/utils/shapefile_info.rb, line 23
def bounds
  resource_init

  bbox = BoundingBox.new
  RGeo::Shapefile::Reader.open(@shp_path) do |shp|
    shp.each do |record|
      geometry = record.geometry
      envelope = geometry.envelope
      envelope_type = envelope.geometry_type
      points = case envelope_type
               when RGeo::Feature::Point
                 [envelope]
               when RGeo::Feature::Polygon
                 envelope.exterior_ring.points
               else
                 raise ShapefileInfoGeometryNotExpected, envelope_type
               end
      points.each { |point| bbox.add point.x, point.y }
    end
  end

  resource_destroy

  bbox.expand if [bbox.minx, bbox.miny] == [bbox.maxx, bbox.maxy]

  bbox
end
srid() click to toggle source
# File lib/rgeoserver/utils/shapefile_info.rb, line 51
def srid
  resource_init

  srid = 0
  RGeo::Shapefile::Reader.open(@shp_path) do |shp|
    srid = shp.factory.srid
  end

  resource_destroy

  srid
end

Private Instance Methods

resource_destroy() click to toggle source
# File lib/rgeoserver/utils/shapefile_info.rb, line 83
def resource_destroy
  FileUtils.rm_rf [tmp_dir]
  @shp_path = nil
  @tmp_dir = nil
end
resource_init() click to toggle source
# File lib/rgeoserver/utils/shapefile_info.rb, line 69
def resource_init
  if @file_path =~ /\.zip$/i
    Zip::ZipFile.open(@file_path) do |zipfile|
      zipfile.glob('**/**').each do |entry_name|
        dest_path = [tmp_dir, entry_name].join(File::SEPARATOR)
        @shp_path = dest_path if entry_name.name =~ /\.shp$/i
        zipfile.extract entry_name, dest_path
      end
    end
  else
    @shp_path = @file_path
  end
end
tmp_dir() click to toggle source
# File lib/rgeoserver/utils/shapefile_info.rb, line 65
def tmp_dir
  @tmp_dir ||= Dir.mktmpdir
end