Module: OGR::Geometry::RttopoExtensions

Overview

Methods for {OGR{OGR::Geometry}s that use rttopo to operate on themselves.

Instance Method Summary collapse

Instance Method Details

#make_validOGR::Geometry

Uses rttopo’s make_valid to make the current geometry valid.

Returns:

  • (OGR::Geometry)

    Returns a new geometry, based on the rttopo_make_valid call.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ogr/extensions/geometry/rttopo_extensions.rb', line 17

def make_valid
  ctx = FFI::Rttopo.rtgeom_init FFI::MemoryPointer::NULL, FFI::MemoryPointer::NULL, FFI::MemoryPointer::NULL
  geom = FFI::Rttopo.rtgeom_from_wkb(ctx, to_wkb, wkb_size, false)
  valid_geom = FFI::Rttopo.rtgeom_make_valid(ctx, geom)
  valid_wkb_size = FFI::MemoryPointer.new(:size_t)
  valid_wkb_ptr = FFI::Rttopo.rtgeom_to_wkb(ctx, valid_geom, FFI::Rttopo::RTWKB_EXTENDED, valid_wkb_size)
  valid_wkb = valid_wkb_ptr.read_bytes(valid_wkb_size.read_int)

  FFI::Rttopo.rtfree ctx, geom
  FFI::Rttopo.rtfree ctx, valid_geom
  FFI::Rttopo.rtfree ctx, valid_wkb_ptr
  FFI::Rttopo.rtgeom_finish ctx
  OGR::Geometry.create_from_wkb(valid_wkb)
end