class Geos::PreparedGeometry

Attributes

geometry[R]
ptr[R]

Public Class Methods

new(geom, options = {}) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 11
def initialize(geom, options = {})
  check_geometry(geom)

  options = {
    auto_free: true
  }.merge(options)

  @ptr = FFI::AutoPointer.new(
    FFIGeos.GEOSPrepare_r(Geos.current_handle_pointer, geom.ptr),
    self.class.method(:release)
  )
  @geometry = geom

  @ptr.autorelease = !!options[:auto_free]
end

Public Instance Methods

contains?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 31
def contains?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedContains_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
contains_properly?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 36
def contains_properly?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedContainsProperly_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
covered_by?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 41
def covered_by?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedCoveredBy_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
covers?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 46
def covers?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedCovers_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
crosses?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 51
def crosses?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedCrosses_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
disjoint?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 56
def disjoint?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedDisjoint_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
distance(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 81
def distance(geom)
  check_geometry(geom)
  double_ptr = FFI::MemoryPointer.new(:double)
  FFIGeos.GEOSPreparedDistance_r(Geos.current_handle_pointer, ptr, geom.ptr, double_ptr)
  double_ptr.read_double
end
distance_within?(geom, distance) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 88
def distance_within?(geom, distance)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedDistanceWithin_r(Geos.current_handle_pointer, ptr, geom.ptr, distance))
end
intersects?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 61
def intersects?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedIntersects_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
nearest_points(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 93
def nearest_points(geom)
  check_geometry(geom)

  coord_seq_ptr = FFIGeos.GEOSPreparedNearestPoints_r(Geos.current_handle_pointer, ptr, geom.ptr)

  Geos::CoordinateSequence.new(coord_seq_ptr)
end
overlaps?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 66
def overlaps?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedOverlaps_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
touches?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 71
def touches?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedTouches_r(Geos.current_handle_pointer, ptr, geom.ptr))
end
within?(geom) click to toggle source
# File lib/ffi-geos/prepared_geometry.rb, line 76
def within?(geom)
  check_geometry(geom)
  bool_result(FFIGeos.GEOSPreparedWithin_r(Geos.current_handle_pointer, ptr, geom.ptr))
end