Class: GeoRuby::SimpleFeatures::Envelope

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

Overview

Contains the bounding box of a geometry

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(srid = DEFAULT_SRID, with_z = false) ⇒ Envelope

Creates a enw Envelope with lower_corner as the first element of the corners array and upper_corner as the second element



10
11
12
13
# File 'lib/geo_ruby/simple_features/envelope.rb', line 10

def initialize(srid = DEFAULT_SRID, with_z = false)
  @srid = srid
  @with_z = with_z
end

Instance Attribute Details

#lower_cornerObject

Returns the value of attribute lower_corner.



5
6
7
# File 'lib/geo_ruby/simple_features/envelope.rb', line 5

def lower_corner
  @lower_corner
end

#sridObject

Returns the value of attribute srid.



6
7
8
# File 'lib/geo_ruby/simple_features/envelope.rb', line 6

def srid
  @srid
end

#upper_cornerObject

Returns the value of attribute upper_corner.



5
6
7
# File 'lib/geo_ruby/simple_features/envelope.rb', line 5

def upper_corner
  @upper_corner
end

#with_zObject

Returns the value of attribute with_z.



6
7
8
# File 'lib/geo_ruby/simple_features/envelope.rb', line 6

def with_z
  @with_z
end

#zoomObject

Zoom level



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

def zoom
  @zoom
end

Class Method Details

.from_coordinates(points, srid = DEFAULT_SRID, with_z = false) ⇒ Object

Creates a new envelope. Accept a sequence of point coordinates as argument : ((x,y),(x,y))



167
168
169
170
171
# File 'lib/geo_ruby/simple_features/envelope.rb', line 167

def self.from_coordinates(points, srid = DEFAULT_SRID, with_z = false)
  e = Envelope.new(srid, with_z)
  e.lower_corner, e.upper_corner =  points.collect { |point_coords| Point.from_coordinates(point_coords, srid, with_z) }
  e
end

.from_points(points, srid = DEFAULT_SRID, with_z = false) ⇒ Object

Creates a new envelope. Accept an array of 2 points as argument



159
160
161
162
163
164
# File 'lib/geo_ruby/simple_features/envelope.rb', line 159

def self.from_points(points, srid = DEFAULT_SRID, with_z = false)
  fail 'Not an array' unless points.class == Array
  e = Envelope.new(srid, with_z)
  e.lower_corner, e.upper_corner = points
  e
end

Instance Method Details

#==(other_envelope) ⇒ Object

Tests the equality of line strings



72
73
74
75
76
77
78
# File 'lib/geo_ruby/simple_features/envelope.rb', line 72

def ==(other_envelope)
  if other_envelope.class != self.class
    false
  else
    upper_corner == other_envelope.upper_corner && lower_corner == other_envelope.lower_corner
  end
end

#as_georss(options = {}) ⇒ Object

georss serialization: Dialect can be passed as option :dialect and set to :simple (default) :w3cgeo or :gml. Options <tt>:featuretypetag



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/geo_ruby/simple_features/envelope.rb', line 83

def as_georss(options = {})
  dialect = options[:dialect] || :simple
  case (dialect)
  when :simple
    geom_attr = ''
    if options[:featuretypetag]
      geom_attr += " featuretypetag=\"#{options[:featuretypetag]}\""
    end
    if options[:relationshiptag]
      geom_attr += " relationshiptag=\"#{options[:relationshiptag]}\""
    end
    geom_attr += " floor=\"#{options[:floor]}\"" if options[:floor]
    geom_attr += " radius=\"#{options[:radius]}\"" if options[:radius]
    geom_attr += " elev=\"#{options[:elev]}\"" if options[:elev]

    georss_simple_representation(options.merge(geom_attr: geom_attr))
  when :w3cgeo
    georss_w3cgeo_representation(options)
  when :gml
    georss_gml_representation(options)
  end
end

#as_kml(options = {}) ⇒ Object

Sends back a latlonaltbox



133
134
135
136
137
138
139
140
# File 'lib/geo_ruby/simple_features/envelope.rb', line 133

def as_kml(options = {})
  geom_data = ''
  geom_data = "<altitudeMode>#{options[:altitude_mode]}</altitudeMode>\n" if options[:altitude_mode]

  allow_z = with_z && (!options[:altitude_mode].nil?) && options[:atitude_mode] != 'clampToGround'

  kml_representation(options.merge(geom_data: geom_data, allow_z: allow_z))
end

#centerObject

Sends back the center of the envelope



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

def center
  Point.from_x_y((lower_corner.x + upper_corner.x) / 2, (lower_corner.y + upper_corner.y) / 2, srid)
end

#extend(envelope) ⇒ Object

Merges the argument with the current evelope and sends back a new envelope without changing the current one



26
27
28
29
30
31
# File 'lib/geo_ruby/simple_features/envelope.rb', line 26

def extend(envelope)
  e = Envelope.from_points([Point.from_x_y(lower_corner.x, lower_corner.y),
                            Point.from_x_y(upper_corner.x, upper_corner.y)], srid, with_z)
  e.extend!(envelope)
  e
end

#extend!(envelope) ⇒ Object

Merges the argument with the current evelope



16
17
18
19
20
21
22
# File 'lib/geo_ruby/simple_features/envelope.rb', line 16

def extend!(envelope)
  lower_corner.x = [lower_corner.x, envelope.lower_corner.x].min
  lower_corner.y = [lower_corner.y, envelope.lower_corner.y].min
  upper_corner.x = [upper_corner.x, envelope.upper_corner.x].max
  upper_corner.y = [upper_corner.y, envelope.upper_corner.y].max
  self
end

#georss_gml_representation(options = {}) ⇒ Object

georss gml representation



121
122
123
124
125
126
127
128
129
130
# File 'lib/geo_ruby/simple_features/envelope.rb', line 121

def georss_gml_representation(options = {}) #:nodoc:
  georss_ns = options[:georss_ns] || 'georss'
  gml_ns = options[:gml_ns] || 'gml'
  result = "<#{georss_ns}:where>\n<#{gml_ns}:Envelope>\n"
  result += "<#{gml_ns}:LowerCorner>#{lower_corner.y} #{lower_corner.x}"\
            "</#{gml_ns}:LowerCorner>"
  result += "<#{gml_ns}:UpperCorner>#{upper_corner.y} #{upper_corner.x}"\
            "</#{gml_ns}:UpperCorner>"
  result + "</#{gml_ns}:Envelope>\n</#{georss_ns}:where>\n"
end

#georss_simple_representation(options = {}) ⇒ Object

georss simple representation



107
108
109
110
111
# File 'lib/geo_ruby/simple_features/envelope.rb', line 107

def georss_simple_representation(options = {}) #:nodoc:
  georss_ns = options[:georss_ns] || 'georss'
  geom_attr = options[:geom_attr]
  "<#{georss_ns}:box#{geom_attr}>#{lower_corner.y} #{lower_corner.x} #{upper_corner.y} #{upper_corner.x}</#{georss_ns}:box>\n"
end

#georss_w3cgeo_representation(options = {}) ⇒ Object

georss w3c representation : outputs the first point of the line



114
115
116
117
118
# File 'lib/geo_ruby/simple_features/envelope.rb', line 114

def georss_w3cgeo_representation(options = {}) #:nodoc:
  w3cgeo_ns = options[:w3cgeo_ns] || 'geo'
  point = center
  "<#{w3cgeo_ns}:lat>#{point.y}</#{w3cgeo_ns}:lat>\n<#{w3cgeo_ns}:long>#{point.x}</#{w3cgeo_ns}:long>\n"
end

#kml_representation(options = {}) ⇒ Object

:nodoc:



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/geo_ruby/simple_features/envelope.rb', line 142

def kml_representation(options = {}) #:nodoc:
  result = "<LatLonAltBox>\n"
  result += options[:geom_data]
  result += "<north>#{upper_corner.y}</north>\n"
  result += "<south>#{lower_corner.y}</south>\n"
  result += "<east>#{upper_corner.x}</east>\n"
  result += "<west>#{lower_corner.x}</west>\n"

  if with_z
    result += "<minAltitude>#{lower_corner.z}</minAltitude>"
    result += "<maxAltitude>#{upper_corner.z}</maxAltitude>"
  end

  result + "</LatLonAltBox>\n"
end