class Geos::Polygon
Public Instance Methods
dump_points(cur_path = [])
click to toggle source
# File lib/ffi-geos/polygon.rb, line 36 def dump_points(cur_path = []) points = [exterior_ring.dump_points] interior_rings.each do |ring| points.push(ring.dump_points) end cur_path.concat(points) end
exterior_ring()
click to toggle source
# File lib/ffi-geos/polygon.rb, line 21 def exterior_ring cast_geometry_ptr( FFIGeos.GEOSGetExteriorRing_r(Geos.current_handle_pointer, ptr), auto_free: false, srid_copy: srid, parent: self ) end
interior_ring_n(n)
click to toggle source
# File lib/ffi-geos/polygon.rb, line 9 def interior_ring_n(n) raise Geos::IndexBoundsError if n.negative? || n >= num_interior_rings cast_geometry_ptr( FFIGeos.GEOSGetInteriorRingN_r(Geos.current_handle_pointer, ptr, n), auto_free: false, srid_copy: srid, parent: self ) end
Also aliased as: interior_ring
interior_rings()
click to toggle source
# File lib/ffi-geos/polygon.rb, line 30 def interior_rings num_interior_rings.times.collect do |n| interior_ring_n(n) end end
num_interior_rings()
click to toggle source
# File lib/ffi-geos/polygon.rb, line 5 def num_interior_rings FFIGeos.GEOSGetNumInteriorRings_r(Geos.current_handle_pointer, ptr) end
snap_to_grid(*args)
click to toggle source
# File lib/ffi-geos/polygon.rb, line 73 def snap_to_grid(*args) ret = dup.snap_to_grid!(*args) ret.srid = pick_srid_according_to_policy(srid) ret end
snap_to_grid!(*args)
click to toggle source
# File lib/ffi-geos/polygon.rb, line 46 def snap_to_grid!(*args) unless empty? exterior_ring = self.exterior_ring.coord_seq.snap_to_grid!(*args) if exterior_ring.empty? @ptr = Geos.create_empty_polygon(srid: srid).ptr elsif exterior_ring.length < 4 raise Geos::InvalidGeometryError, "snap_to_grid! produced an invalid number of points in exterior ring - found #{exterior_ring.length} - must be 0 or >= 4" else interior_rings = [] num_interior_rings.times do |i| interior_ring = interior_ring_n(i).coord_seq.snap_to_grid!(*args) interior_rings << interior_ring unless interior_ring.length < 4 end interior_rings.compact! polygon = Geos.create_polygon(exterior_ring, interior_rings, srid: srid) @ptr = polygon.ptr end end self end