Class: GeoRuby::SimpleFeatures::GeometryFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/geo_ruby/simple_features/geometry_factory.rb

Overview

Creates a new geometry according to constructions received from a parser, for example EWKBParser.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeGeometryFactory

Returns a new instance of GeometryFactory.



18
19
20
21
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 18

def initialize
  @geometry = nil
  @geometry_stack = []
end

Instance Attribute Details

#geometryObject (readonly)

the built geometry



16
17
18
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 16

def geometry
  @geometry
end

Instance Method Details

#abort_geometryObject

abort a geometry



76
77
78
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 76

def abort_geometry
  reset
end

#add_point_x_y(x, y) ⇒ Object

add a 2D point to the current geometry



28
29
30
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 28

def add_point_x_y(x,y)
  @geometry_stack.last.set_x_y(x,y)
end

#add_point_x_y_m(x, y, m) ⇒ Object

add a 2D point with M to the current geometry



44
45
46
47
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 44

def add_point_x_y_m(x,y,m)
  @geometry_stack.last.set_x_y(x,y)
  @geometry_stack.last.m=m
end

#add_point_x_y_z(x, y, z) ⇒ Object

add a 3D point to the current geometry



36
37
38
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 36

def add_point_x_y_z(x,y,z)
  @geometry_stack.last.set_x_y_z(x,y,z)
end

#add_point_x_y_z_m(x, y, z, m) ⇒ Object

add a 3D point with M to the current geometry



53
54
55
56
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 53

def add_point_x_y_z_m(x,y,z,m)
  @geometry_stack.last.set_x_y_z(x,y,z)
  @geometry_stack.last.m=m
end

#add_points_x_y(xy) ⇒ Object

add 2D points to the current geometry



32
33
34
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 32

def add_points_x_y(xy)
  xy.each_slice(2) {|slice| add_point_x_y(*slice)}
end

#add_points_x_y_m(xym) ⇒ Object

add 2D points with M to the current geometry



49
50
51
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 49

def add_points_x_y_m(xym)
  xym.each_slice(3) {|slice| add_point_x_y_m(*slice)}
end

#add_points_x_y_z(xyz) ⇒ Object

add 3D points to the current geometry



40
41
42
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 40

def add_points_x_y_z(xyz)
  xyz.each_slice(3) {|slice| add_point_x_y_z(*slice)}
end

#add_points_x_y_z_m(xyzm) ⇒ Object

add 3D points with M to the current geometry



58
59
60
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 58

def add_points_x_y_z_m(xyzm)
  xyzm.each_slice(4) {|slice| add_point_x_y_z_m(*slice)}
end

#begin_geometry(geometry_type, srid = DEFAULT_SRID) ⇒ Object

begin a geometry of type geometry_type



62
63
64
65
66
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 62

def begin_geometry(geometry_type,srid=DEFAULT_SRID)
  geometry= geometry_type::new(srid)
  @geometry= geometry if @geometry.nil?
  @geometry_stack << geometry
end

#end_geometry(with_z = false, with_m = false) ⇒ Object

terminates the current geometry



68
69
70
71
72
73
74
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 68

def end_geometry(with_z=false,with_m=false)
  @geometry=@geometry_stack.pop
  @geometry.with_z=with_z
  @geometry.with_m=with_m
  #add the newly defined geometry to its parent if there is one
  @geometry_stack.last << geometry if !@geometry_stack.empty?
end

#resetObject

resets the factory



23
24
25
26
# File 'lib/geo_ruby/simple_features/geometry_factory.rb', line 23

def reset
  @geometry = nil
  @geometry_stack = []
end