module Geos::Tools

Public Instance Methods

bool_result(result) click to toggle source
# File lib/ffi-geos/tools.rb, line 95
def bool_result(result)
  case result
    when 1
      true
    when 0
      false
    else
      raise Geos::UnexpectedBooleanResultError, result
  end
end
bool_to_int(bool) click to toggle source
# File lib/ffi-geos/tools.rb, line 106
def bool_to_int(bool)
  if bool
    1
  else
    0
  end
end
cast_geometry_ptr(geom_ptr, options = {}) click to toggle source
# File lib/ffi-geos/tools.rb, line 25
def cast_geometry_ptr(geom_ptr, options = {})
  options = {
    auto_free: true
  }.merge(options)

  raise Geos::NullPointerError if geom_ptr.null?

  klass = case FFIGeos.GEOSGeomTypeId_r(Geos.current_handle_pointer, geom_ptr)
    when GEOS_POINT
      Point
    when GEOS_LINESTRING
      LineString
    when GEOS_LINEARRING
      LinearRing
    when GEOS_POLYGON
      Polygon
    when GEOS_MULTIPOINT
      MultiPoint
    when GEOS_MULTILINESTRING
      MultiLineString
    when GEOS_MULTIPOLYGON
      MultiPolygon
    when GEOS_GEOMETRYCOLLECTION
      GeometryCollection
    else
      raise Geos::InvalidGeometryTypeError
  end

  klass.new(geom_ptr, options).tap do |ret|
    if options[:srid]
      ret.srid = options[:srid] || 0
    elsif options[:srid_copy]
      ret.srid = if Geos.srid_copy_policy == :zero
        0
      else
        options[:srid_copy] || 0
      end
    end
  end
end
check_enum_value(enum, value) click to toggle source
# File lib/ffi-geos/tools.rb, line 114
def check_enum_value(enum, value)
  enum[value] or
    raise TypeError, "Couldn't find valid #{enum.tag} value: #{value}"
end
check_geometry(geom) click to toggle source
# File lib/ffi-geos/tools.rb, line 66
def check_geometry(geom)
  raise TypeError, 'Expected Geos::Geometry' unless geom.is_a?(Geos::Geometry)
end
extract_options!(args) click to toggle source
# File lib/ffi-geos/tools.rb, line 127
def extract_options!(args)
  if args.last.is_a?(Hash)
    args.pop
  else
    {}
  end
end
pick_srid_according_to_policy(srid, policy = Geos.srid_copy_policy) click to toggle source
# File lib/ffi-geos/tools.rb, line 85
def pick_srid_according_to_policy(srid, policy = Geos.srid_copy_policy)
  policy = Geos.srid_copy_policy_default if policy == :default

  if srid != 0 && policy != :zero
    srid
  else
    0
  end
end
pick_srid_from_geoms(srid_a, srid_b, policy = Geos.srid_copy_policy) click to toggle source
# File lib/ffi-geos/tools.rb, line 70
def pick_srid_from_geoms(srid_a, srid_b, policy = Geos.srid_copy_policy)
  policy = Geos.srid_copy_policy_default if policy == :default

  case policy
    when :zero
      0
    when :lenient
      srid_a
    when :strict
      raise Geos::MixedSRIDsError.new(srid_a, srid_b)
    else
      raise ArgumentError, "Unexpected policy value: #{policy}"
  end
end
symbol_for_enum(enum, value) click to toggle source
# File lib/ffi-geos/tools.rb, line 119
def symbol_for_enum(enum, value)
  if value.is_a?(Symbol)
    value
  else
    enum[value]
  end
end