georuby 2.3.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -9
  3. data/Rakefile +13 -14
  4. data/lib/geo_ruby/ewk.rb +2 -0
  5. data/lib/geo_ruby/{simple_features → ewk}/ewkb_parser.rb +206 -218
  6. data/lib/geo_ruby/ewk/ewkt_parser.rb +321 -0
  7. data/lib/geo_ruby/geojson.rb +27 -32
  8. data/lib/geo_ruby/georss.rb +88 -66
  9. data/lib/geo_ruby/gpx.rb +113 -1
  10. data/lib/geo_ruby/kml.rb +43 -31
  11. data/lib/geo_ruby/shp.rb +1 -0
  12. data/lib/geo_ruby/shp4r/dbf.rb +7 -3
  13. data/lib/geo_ruby/shp4r/shp.rb +297 -284
  14. data/lib/geo_ruby/simple_features.rb +2 -6
  15. data/lib/geo_ruby/simple_features/circle.rb +15 -13
  16. data/lib/geo_ruby/simple_features/envelope.rb +84 -77
  17. data/lib/geo_ruby/simple_features/geometry.rb +89 -69
  18. data/lib/geo_ruby/simple_features/geometry_collection.rb +46 -43
  19. data/lib/geo_ruby/simple_features/geometry_factory.rb +50 -47
  20. data/lib/geo_ruby/simple_features/helper.rb +14 -14
  21. data/lib/geo_ruby/simple_features/line_string.rb +94 -97
  22. data/lib/geo_ruby/simple_features/linear_ring.rb +4 -9
  23. data/lib/geo_ruby/simple_features/multi_line_string.rb +18 -21
  24. data/lib/geo_ruby/simple_features/multi_point.rb +18 -20
  25. data/lib/geo_ruby/simple_features/multi_polygon.rb +19 -25
  26. data/lib/geo_ruby/simple_features/point.rb +134 -128
  27. data/lib/geo_ruby/simple_features/polygon.rb +60 -59
  28. data/lib/geo_ruby/version.rb +1 -1
  29. data/spec/data/geojson/feature.json +9 -0
  30. data/spec/data/geojson/feature_collection.json +3 -4
  31. data/spec/geo_ruby/{simple_features → ewk}/ewkb_parser_spec.rb +56 -57
  32. data/spec/geo_ruby/{simple_features → ewk}/ewkt_parser_spec.rb +62 -63
  33. data/spec/geo_ruby/geojson_spec.rb +34 -17
  34. data/spec/geo_ruby/georss_spec.rb +76 -64
  35. data/spec/geo_ruby/{gpx4r/gpx_spec.rb → gpx_spec.rb} +25 -25
  36. data/spec/geo_ruby/kml_spec.rb +40 -36
  37. data/spec/geo_ruby/shp4r/shp_spec.rb +51 -51
  38. data/spec/geo_ruby/simple_features/circle_spec.rb +2 -2
  39. data/spec/geo_ruby/simple_features/envelope_spec.rb +8 -8
  40. data/spec/geo_ruby/simple_features/geometry_collection_spec.rb +26 -26
  41. data/spec/geo_ruby/simple_features/geometry_factory_spec.rb +5 -5
  42. data/spec/geo_ruby/simple_features/geometry_spec.rb +8 -8
  43. data/spec/geo_ruby/simple_features/line_string_spec.rb +102 -102
  44. data/spec/geo_ruby/simple_features/linear_ring_spec.rb +7 -7
  45. data/spec/geo_ruby/simple_features/multi_line_string_spec.rb +20 -20
  46. data/spec/geo_ruby/simple_features/multi_point_spec.rb +16 -16
  47. data/spec/geo_ruby/simple_features/multi_polygon_spec.rb +19 -19
  48. data/spec/geo_ruby/simple_features/point_spec.rb +180 -174
  49. data/spec/geo_ruby/simple_features/polygon_spec.rb +55 -56
  50. data/spec/geo_ruby_spec.rb +4 -4
  51. data/spec/spec_helper.rb +19 -13
  52. metadata +10 -9
  53. data/lib/geo_ruby/gpx4r/gpx.rb +0 -118
  54. data/lib/geo_ruby/simple_features/ewkt_parser.rb +0 -336
@@ -1,12 +1,9 @@
1
1
  module GeoRuby
2
2
  module SimpleFeatures
3
-
4
- %w[
3
+ %w(
5
4
  geometry
6
5
  circle
7
6
  envelope
8
- ewkb_parser
9
- ewkt_parser
10
7
  geometry_collection
11
8
  geometry_factory
12
9
  helper
@@ -17,9 +14,8 @@ module GeoRuby
17
14
  multi_polygon
18
15
  point
19
16
  polygon
20
- ].each do |rel_file|
17
+ ).each do |rel_file|
21
18
  require File.join(File.dirname(__FILE__), 'simple_features', rel_file)
22
19
  end
23
-
24
20
  end
25
21
  end
@@ -1,9 +1,10 @@
1
1
  module GeoRuby
2
2
  module SimpleFeatures
3
- #Represents a point. It is in 3D if the Z coordinate is not +nil+.
3
+ # Represents a point. It is in 3D if the Z coordinate is not +nil+.
4
4
  class Circle < Geometry
5
5
  attr_accessor :radius, :center
6
- alias :r :radius
6
+ alias_method :r, :radius
7
+ alias_method :c, :center
7
8
 
8
9
  def initialize(srid = DEFAULT_SRID, with_z = false, with_m = false)
9
10
  super(srid, with_z, with_m)
@@ -14,26 +15,28 @@ module GeoRuby
14
15
  Point.from_x_y(@center.x + @r, @center.y + @r)]
15
16
  end
16
17
 
18
+ def diameter
19
+ radius * 2
20
+ end
21
+
17
22
  def m_range
18
- raise NotImplementedError
23
+ fail NotImplementedError
19
24
  end
20
25
 
21
26
  def ==(other)
22
27
  return false unless other.is_a?(Circle)
23
- @center == other.center and @radius == other.radius
28
+ @center == other.center && @radius == other.radius
24
29
  end
25
30
 
26
31
  def to_json(options = {})
27
- {:type => 'Circle',
28
- :coordinates => @center.to_coordinates,
29
- :radius => @radius}.to_json(options)
32
+ { type: 'Circle',
33
+ coordinates: @center.to_coordinates,
34
+ radius: @radius }.to_json(options)
30
35
  end
31
- alias :as_geojson :to_json
36
+ alias_method :as_geojson, :to_json
32
37
 
33
- def contains_point?(point)
34
- dist = Mongoid::Spacial.distance(@center.to_coordinates,
35
- point.to_coordinates, :spherical => true, :unit => :m)
36
- dist <= @radius
38
+ def contains_point?(_point)
39
+ fail NotImplementedError
37
40
  end
38
41
 
39
42
  class << self
@@ -51,7 +54,6 @@ module GeoRuby
51
54
  circle
52
55
  end
53
56
  end
54
-
55
57
  end
56
58
  end
57
59
  end
@@ -1,95 +1,101 @@
1
1
  module GeoRuby
2
2
  module SimpleFeatures
3
-
4
- #Contains the bounding box of a geometry
3
+ # Contains the bounding box of a geometry
5
4
  class Envelope
6
5
  attr_accessor :lower_corner, :upper_corner
7
6
  attr_accessor :srid, :with_z, :zoom
8
7
 
9
- #Creates a enw Envelope with +lower_corner+ as the first element of the corners array and +upper_corner+ as the second element
8
+ # Creates a enw Envelope with +lower_corner+ as the first element
9
+ # of the corners array and +upper_corner+ as the second element
10
10
  def initialize(srid = DEFAULT_SRID, with_z = false)
11
11
  @srid = srid
12
12
  @with_z = with_z
13
13
  end
14
14
 
15
- #Merges the argument with the current evelope
15
+ # Merges the argument with the current evelope
16
16
  def extend!(envelope)
17
- lower_corner.x = [lower_corner.x,envelope.lower_corner.x].min
18
- lower_corner.y = [lower_corner.y,envelope.lower_corner.y].min
19
- upper_corner.x = [upper_corner.x,envelope.upper_corner.x].max
20
- upper_corner.y = [upper_corner.y,envelope.upper_corner.y].max
17
+ lower_corner.x = [lower_corner.x, envelope.lower_corner.x].min
18
+ lower_corner.y = [lower_corner.y, envelope.lower_corner.y].min
19
+ upper_corner.x = [upper_corner.x, envelope.upper_corner.x].max
20
+ upper_corner.y = [upper_corner.y, envelope.upper_corner.y].max
21
21
  self
22
22
  end
23
23
 
24
- #Merges the argument with the current evelope and sends back a new
25
- #envelope without changing the current one
24
+ # Merges the argument with the current evelope and sends back a new
25
+ # envelope without changing the current one
26
26
  def extend(envelope)
27
- e = Envelope.from_points([Point.from_x_y(lower_corner.x,lower_corner.y),
28
- Point.from_x_y(upper_corner.x,upper_corner.y)],srid,with_z)
27
+ e = Envelope.from_points([Point.from_x_y(lower_corner.x, lower_corner.y),
28
+ Point.from_x_y(upper_corner.x, upper_corner.y)], srid, with_z)
29
29
  e.extend!(envelope)
30
30
  e
31
31
  end
32
- # def bounding_box(markers)
33
- # max_lat, max_lon, min_lat, min_lon = -Float::MAX, -Float::MAX, Float::MAX, Float::MAX
34
- # markers.each do |marker|
35
- # coord = marker.point
36
- # max_lat = coord.lat if coord.lat > max_lat
37
- # min_lat = coord.lat if coord.lat < min_lat
38
- # max_lon = coord.lng if coord.lng > max_lon
39
- # min_lon = coord.lng if coord.lng < min_lon
40
- # end
41
- # min_point = Point.from_x_y(min_lat,min_lon)
42
- # max_point = Point.from_x_y(max_lat,max_lon)
43
-
44
- # end
45
- # centrelat = (max_lat + min_lat)/2
46
- # centrelng = (max_lon + min_lon)/2
47
- # # logger.info("distance[#{distance}],zoom[#{zoom}]")
48
- # #return GLatLngBounds.new(GLatLng.new(min_point),GLatLng.new(max_point)), [centrelat,centrelng], zoom
49
- # return [centrelat,centrelng], zoom
50
-
51
- #Sends back the center of the envelope
32
+
33
+ # def bounding_box(markers)
34
+ # max_lat, max_lon, min_lat, min_lon = -Float::MAX, -Float::MAX, Float::MAX, Float::MAX
35
+ # markers.each do |marker|
36
+ # coord = marker.point
37
+ # max_lat = coord.lat if coord.lat > max_lat
38
+ # min_lat = coord.lat if coord.lat < min_lat
39
+ # max_lon = coord.lng if coord.lng > max_lon
40
+ # min_lon = coord.lng if coord.lng < min_lon
41
+ # end
42
+ # min_point = Point.from_x_y(min_lat,min_lon)
43
+ # max_point = Point.from_x_y(max_lat,max_lon)
44
+
45
+ # end
46
+ # centrelat = (max_lat + min_lat)/2
47
+ # centrelng = (max_lon + min_lon)/2
48
+ # # logger.info("distance[#{distance}],zoom[#{zoom}]")
49
+ # #return GLatLngBounds.new(GLatLng.new(min_point),GLatLng.new(max_point)), [centrelat,centrelng], zoom
50
+ # return [centrelat,centrelng], zoom
51
+
52
+ # Sends back the center of the envelope
52
53
  def center
53
- Point.from_x_y((lower_corner.x + upper_corner.x)/2,(lower_corner.y + upper_corner.y)/2, srid)
54
+ Point.from_x_y((lower_corner.x + upper_corner.x) / 2, (lower_corner.y + upper_corner.y) / 2, srid)
54
55
  end
55
56
 
56
- #Zoom level
57
+ # Zoom level
57
58
  def zoom
58
59
  distance = lower_corner.spherical_distance(upper_corner) / 10_000
59
60
  @zoom = case distance
60
- when 150..9000 then 5
61
- when 80..149 then 6
62
- when 50..79 then 7
63
- when 20..49 then 8
64
- when 10..19 then 9
65
- when 5..9 then 10
66
- else 13
67
- end
61
+ when 150..9000 then 5
62
+ when 80..149 then 6
63
+ when 50..79 then 7
64
+ when 20..49 then 8
65
+ when 10..19 then 9
66
+ when 5..9 then 10
67
+ else 13
68
+ end
68
69
  end
69
70
 
70
- #Tests the equality of line strings
71
+ # Tests the equality of line strings
71
72
  def ==(other_envelope)
72
73
  if other_envelope.class != self.class
73
74
  false
74
75
  else
75
- upper_corner == other_envelope.upper_corner and lower_corner == other_envelope.lower_corner
76
+ upper_corner == other_envelope.upper_corner && lower_corner == other_envelope.lower_corner
76
77
  end
77
78
  end
78
79
 
79
- #georss serialization: Dialect can be passed as option <tt>:dialect</tt> and set to <tt>:simple</tt> (default)
80
- #<tt>:w3cgeo</tt> or <tt>:gml</tt>. Options <tt>:featuretypetag
80
+ # georss serialization: Dialect can be passed as option <tt>:dialect</tt>
81
+ # and set to <tt>:simple</tt> (default) <tt>:w3cgeo</tt> or <tt>:gml</tt>.
82
+ # Options <tt>:featuretypetag
81
83
  def as_georss(options = {})
82
- dialect= options[:dialect] || :simple
83
- case(dialect)
84
+ dialect = options[:dialect] || :simple
85
+ case (dialect)
84
86
  when :simple
85
- geom_attr = ""
86
- geom_attr += " featuretypetag=\"#{options[:featuretypetag]}\"" if options[:featuretypetag]
87
- geom_attr += " relationshiptag=\"#{options[:relationshiptag]}\"" if options[:relationshiptag]
87
+ geom_attr = ''
88
+ if options[:featuretypetag]
89
+ geom_attr += " featuretypetag=\"#{options[:featuretypetag]}\""
90
+ end
91
+ if options[:relationshiptag]
92
+ geom_attr += " relationshiptag=\"#{options[:relationshiptag]}\""
93
+ end
88
94
  geom_attr += " floor=\"#{options[:floor]}\"" if options[:floor]
89
95
  geom_attr += " radius=\"#{options[:radius]}\"" if options[:radius]
90
96
  geom_attr += " elev=\"#{options[:elev]}\"" if options[:elev]
91
97
 
92
- georss_simple_representation(options.merge(:geom_attr => geom_attr))
98
+ georss_simple_representation(options.merge(geom_attr: geom_attr))
93
99
  when :w3cgeo
94
100
  georss_w3cgeo_representation(options)
95
101
  when :gml
@@ -97,41 +103,43 @@ module GeoRuby
97
103
  end
98
104
  end
99
105
 
100
- #georss simple representation
106
+ # georss simple representation
101
107
  def georss_simple_representation(options = {}) #:nodoc:
102
- georss_ns = options[:georss_ns] || "georss"
108
+ georss_ns = options[:georss_ns] || 'georss'
103
109
  geom_attr = options[:geom_attr]
104
110
  "<#{georss_ns}:box#{geom_attr}>#{lower_corner.y} #{lower_corner.x} #{upper_corner.y} #{upper_corner.x}</#{georss_ns}:box>\n"
105
111
  end
106
112
 
107
- #georss w3c representation : outputs the first point of the line
113
+ # georss w3c representation : outputs the first point of the line
108
114
  def georss_w3cgeo_representation(options = {}) #:nodoc:
109
- w3cgeo_ns = options[:w3cgeo_ns] || "geo"
110
- point = self.center
115
+ w3cgeo_ns = options[:w3cgeo_ns] || 'geo'
116
+ point = center
111
117
  "<#{w3cgeo_ns}:lat>#{point.y}</#{w3cgeo_ns}:lat>\n<#{w3cgeo_ns}:long>#{point.x}</#{w3cgeo_ns}:long>\n"
112
118
  end
113
119
 
114
- #georss gml representation
120
+ # georss gml representation
115
121
  def georss_gml_representation(options = {}) #:nodoc:
116
- georss_ns = options[:georss_ns] || "georss"
117
- gml_ns = options[:gml_ns] || "gml"
122
+ georss_ns = options[:georss_ns] || 'georss'
123
+ gml_ns = options[:gml_ns] || 'gml'
118
124
  result = "<#{georss_ns}:where>\n<#{gml_ns}:Envelope>\n"
119
- result += "<#{gml_ns}:LowerCorner>" + "#{lower_corner.y} #{lower_corner.x}" + "</#{gml_ns}:LowerCorner>"
120
- result += "<#{gml_ns}:UpperCorner>" + "#{upper_corner.y} #{upper_corner.x}" + "</#{gml_ns}:UpperCorner>"
121
- result += "</#{gml_ns}:Envelope>\n</#{georss_ns}:where>\n"
125
+ result += "<#{gml_ns}:LowerCorner>#{lower_corner.y} #{lower_corner.x}"\
126
+ "</#{gml_ns}:LowerCorner>"
127
+ result += "<#{gml_ns}:UpperCorner>#{upper_corner.y} #{upper_corner.x}"\
128
+ "</#{gml_ns}:UpperCorner>"
129
+ result + "</#{gml_ns}:Envelope>\n</#{georss_ns}:where>\n"
122
130
  end
123
131
 
124
- #Sends back a latlonaltbox
132
+ # Sends back a latlonaltbox
125
133
  def as_kml(options = {})
126
- geom_data = ""
134
+ geom_data = ''
127
135
  geom_data = "<altitudeMode>#{options[:altitude_mode]}</altitudeMode>\n" if options[:altitude_mode]
128
136
 
129
- allow_z = with_z && (!options[:altitude_mode].nil?) && options[:atitude_mode] != "clampToGround"
137
+ allow_z = with_z && (!options[:altitude_mode].nil?) && options[:atitude_mode] != 'clampToGround'
130
138
 
131
- kml_representation(options.merge(:geom_data => geom_data,:allow_z => allow_z))
139
+ kml_representation(options.merge(geom_data: geom_data, allow_z: allow_z))
132
140
  end
133
141
 
134
- def kml_representation(options = {})#:nodoc:
142
+ def kml_representation(options = {}) #:nodoc:
135
143
  result = "<LatLonAltBox>\n"
136
144
  result += options[:geom_data]
137
145
  result += "<north>#{upper_corner.y}</north>\n"
@@ -144,24 +152,23 @@ module GeoRuby
144
152
  result += "<maxAltitude>#{upper_corner.z}</maxAltitude>"
145
153
  end
146
154
 
147
- result += "</LatLonAltBox>\n"
155
+ result + "</LatLonAltBox>\n"
148
156
  end
149
157
 
150
- #Creates a new envelope. Accept an array of 2 points as argument
151
- def self.from_points(points,srid=DEFAULT_SRID,with_z=false)
152
- raise "Not an array" unless points.class == Array
153
- e = Envelope.new(srid,with_z)
158
+ # Creates a new envelope. Accept an array of 2 points as argument
159
+ def self.from_points(points, srid = DEFAULT_SRID, with_z = false)
160
+ fail 'Not an array' unless points.class == Array
161
+ e = Envelope.new(srid, with_z)
154
162
  e.lower_corner, e.upper_corner = points
155
163
  e
156
164
  end
157
165
 
158
- #Creates a new envelope. Accept a sequence of point coordinates as argument : ((x,y),(x,y))
166
+ # Creates a new envelope. Accept a sequence of point coordinates as argument : ((x,y),(x,y))
159
167
  def self.from_coordinates(points, srid = DEFAULT_SRID, with_z = false)
160
- e = Envelope.new(srid,with_z)
161
- e.lower_corner, e.upper_corner = points.collect{|point_coords| Point.from_coordinates(point_coords,srid,with_z)}
168
+ e = Envelope.new(srid, with_z)
169
+ e.lower_corner, e.upper_corner = points.collect { |point_coords| Point.from_coordinates(point_coords, srid, with_z) }
162
170
  e
163
171
  end
164
-
165
172
  end
166
173
  end
167
174
  end
@@ -1,32 +1,31 @@
1
- module GeoRuby#:nodoc:
1
+ module GeoRuby #:nodoc:
2
2
  module SimpleFeatures
3
-
4
3
  # Default SRID
5
4
  DEFAULT_SRID = 4326 unless defined? DEFAULT_SRID
6
5
 
7
- #Root of all geometric data classes.
8
- #Objects of class Geometry should not be instantiated.
6
+ # Root of all geometric data classes.
7
+ # Objects of class Geometry should not be instantiated.
9
8
  class Geometry
10
- #SRID of the geometry
11
- attr_reader :srid #writer defined below
12
- #Flag indicating if the z ordinate of the geometry is meaningful
9
+ # SRID of the geometry
10
+ attr_reader :srid # writer defined below
11
+ # Flag indicating if the z ordinate of the geometry is meaningful
13
12
  attr_accessor :with_z
14
- alias :with_z? :with_z
15
- #Flag indicating if the m ordinate of the geometry is meaningful
13
+ alias_method :with_z?, :with_z
14
+ # Flag indicating if the m ordinate of the geometry is meaningful
16
15
  attr_accessor :with_m
17
- alias :with_m? :with_m
16
+ alias_method :with_m?, :with_m
18
17
 
19
- def initialize(srid=DEFAULT_SRID, with_z=false, with_m=false)
20
- @srid=srid
21
- @with_z=with_z
22
- @with_m=with_m
18
+ def initialize(srid = DEFAULT_SRID, with_z = false, with_m = false)
19
+ @srid = srid
20
+ @with_z = with_z
21
+ @with_m = with_m
23
22
  end
24
23
 
25
24
  def srid=(new_srid)
26
25
  @srid = new_srid
27
26
  unless self.is_a?(Point)
28
- self.each do |geom|
29
- geom.srid=new_srid
27
+ each do |geom|
28
+ geom.srid = new_srid
30
29
  end
31
30
  end
32
31
  end
@@ -43,30 +42,30 @@ module GeoRuby#:nodoc:
43
42
  # Returns an Envelope object for the geometry
44
43
  #
45
44
  def envelope
46
- Envelope.from_points(bounding_box, srid,with_z)
45
+ Envelope.from_points(bounding_box, srid, with_z)
47
46
  end
48
47
 
49
48
  #
50
49
  # Outputs the geometry as an EWKB string.
51
50
  #
52
51
  # The +allow_srid+, +allow_z+ and +allow_m+ arguments allow the output
53
- # to include srid, z and m respectively if they are present in the geometry.
52
+ # to include srid, z and m respectively if they are present.
54
53
  # If these arguments are set to false, srid, z and m are not included,
55
54
  # even if they are present in the geometry.
56
55
  # By default, the output string contains all the information in the object.
57
56
  #
58
- def as_ewkb(allow_srid=true, allow_z=true, allow_m=true)
59
- ewkb = 1.chr #little_endian by default
57
+ def as_ewkb(allow_srid = true, allow_z = true, allow_m = true)
58
+ ewkb = 1.chr # little_endian by default
60
59
 
61
60
  type = binary_geometry_type
62
- type = type | Z_MASK if @with_z and allow_z
63
- type = type | M_MASK if @with_m and allow_m
61
+ type |= Z_MASK if @with_z && allow_z
62
+ type |= M_MASK if @with_m && allow_m
64
63
 
65
64
  if allow_srid
66
65
  type = type | SRID_MASK
67
- ewkb << [type, @srid].pack("VV")
66
+ ewkb << [type, @srid].pack('VV')
68
67
  else
69
- ewkb << [type].pack("V")
68
+ ewkb << [type].pack('V')
70
69
  end
71
70
 
72
71
  ewkb << binary_representation(allow_z, allow_m)
@@ -82,9 +81,9 @@ module GeoRuby#:nodoc:
82
81
  #
83
82
  # Outputs the geometry as a HexEWKB string.
84
83
  # It is almost the same as a WKB string, except that each byte of a WKB
85
- # string is replaced by its hexadecimal 2-character representation in a HexEWKB string.
84
+ # string is replaced by its hex 2-char representation in a HexEWKB string.
86
85
  #
87
- def as_hex_ewkb(allow_srid=true, allow_z=true, allow_m=true)
86
+ def as_hex_ewkb(allow_srid = true, allow_z = true, allow_m = true)
88
87
  as_ewkb(allow_srid, allow_z, allow_m).unpack('H*').join('').upcase
89
88
  end
90
89
 
@@ -92,21 +91,22 @@ module GeoRuby#:nodoc:
92
91
  # Outputs the geometry as a strict HexWKB string
93
92
  #
94
93
  def as_hex_wkb
95
- as_hex_ewkb(false,false,false)
94
+ as_hex_ewkb(false, false, false)
96
95
  end
97
96
 
98
97
  #
99
98
  # Outputs the geometry as an EWKT string.
100
99
  #
101
- def as_ewkt(allow_srid=true,allow_z=true,allow_m=true)
100
+ def as_ewkt(allow_srid = true, allow_z = true, allow_m = true)
102
101
  if allow_srid
103
- ewkt="SRID=#{@srid};"
102
+ ewkt = "SRID=#{@srid};"
104
103
  else
105
- ewkt=""
104
+ ewkt = ''
106
105
  end
107
106
  ewkt << text_geometry_type
108
- ewkt << "M" if @with_m and allow_m and (!@with_z or !allow_z) #to distinguish the M from the Z when there is actually no Z...
109
- ewkt << "(" << text_representation(allow_z,allow_m) << ")"
107
+ # to distinguish the M from the Z when there is actually no Z...
108
+ ewkt << 'M' if @with_m && allow_m && (!@with_z || !allow_z)
109
+ ewkt << '(' << text_representation(allow_z, allow_m) << ')'
110
110
  end
111
111
 
112
112
  #
@@ -118,18 +118,23 @@ module GeoRuby#:nodoc:
118
118
 
119
119
  # Outputs the geometry in georss format.
120
120
  # Assumes the geometries are in latlon format, with x as lon and y as lat.
121
- # Pass the <tt>:dialect</tt> option to swhit format. Possible values are: <tt>:simple</tt> (default), <tt>:w3cgeo</tt> and <tt>:gml</tt>.
121
+ # Pass the <tt>:dialect</tt> option to swhit format. Possible values are:
122
+ # <tt>:simple</tt> (default), <tt>:w3cgeo</tt> and <tt>:gml</tt>.
122
123
  def as_georss(options = {})
123
- dialect= options[:dialect] || :simple
124
- case(dialect)
124
+ dialect = options[:dialect] || :simple
125
+ case (dialect)
125
126
  when :simple
126
- geom_attr = ""
127
- geom_attr += " featuretypetag=\"#{options[:featuretypetag]}\"" if options[:featuretypetag]
128
- geom_attr += " relationshiptag=\"#{options[:relationshiptag]}\"" if options[:relationshiptag]
127
+ geom_attr = ''
128
+ if options[:featuretypetag]
129
+ geom_attr += " featuretypetag=\"#{options[:featuretypetag]}\""
130
+ end
131
+ if options[:relationshiptag]
132
+ geom_attr += " relationshiptag=\"#{options[:relationshiptag]}\""
133
+ end
129
134
  geom_attr += " floor=\"#{options[:floor]}\"" if options[:floor]
130
135
  geom_attr += " radius=\"#{options[:radius]}\"" if options[:radius]
131
136
  geom_attr += " elev=\"#{options[:elev]}\"" if options[:elev]
132
- georss_simple_representation(options.merge(:geom_attr => geom_attr))
137
+ georss_simple_representation(options.merge(geom_attr: geom_attr))
133
138
  when :w3cgeo
134
139
  georss_w3cgeo_representation(options)
135
140
  when :gml
@@ -137,22 +142,32 @@ module GeoRuby#:nodoc:
137
142
  end
138
143
  end
139
144
 
140
- # Iutputs the geometry in kml format : options are <tt>:id</tt>, <tt>:tesselate</tt>, <tt>:extrude</tt>,
141
- # <tt>:altitude_mode</tt>. If the altitude_mode option is not present, the Z (if present) will not be output (since
142
- # it won't be used by GE anyway: clampToGround is the default)
145
+ # Iutputs the geometry in kml format : options are <tt>:id</tt>,
146
+ # <tt>:tesselate</tt>, <tt>:extrude</tt>, <tt>:altitude_mode</tt>.
147
+ # If the altitude_mode option is not present, the Z (if present) will not
148
+ # be output (since it won't be used by GE: clampToGround is the default)
143
149
  def as_kml(options = {})
144
- id_attr = ""
150
+ id_attr = ''
145
151
  id_attr = " id=\"#{options[:id]}\"" if options[:id]
146
152
 
147
- geom_data = ""
148
- geom_data += "<extrude>#{options[:extrude]}</extrude>\n" if options[:extrude]
149
- geom_data += "<tesselate>#{options[:tesselate]}</tesselate>\n" if options[:tesselate]
150
- geom_data += "<altitudeMode>#{options[:altitude_mode]}</altitudeMode>\n" if options[:altitude_mode]
153
+ geom_data = ''
154
+ if options[:extrude]
155
+ geom_data += "<extrude>#{options[:extrude]}</extrude>\n"
156
+ end
157
+ if options[:tesselate]
158
+ geom_data += "<tesselate>#{options[:tesselate]}</tesselate>\n"
159
+ end
160
+ if options[:altitude_mode]
161
+ geom_data += "<altitudeMode>#{options[:altitude_mode]}</altitudeMode>\n"
162
+ end
151
163
 
152
- allow_z = (with_z || !options[:altitude].nil? )&& (!options[:altitude_mode].nil?) && options[:atitude_mode] != "clampToGround"
164
+ allow_z = (with_z || !options[:altitude].nil?) &&
165
+ (!options[:altitude_mode].nil?) &&
166
+ options[:atitude_mode] != 'clampToGround'
153
167
  fixed_z = options[:altitude]
154
168
 
155
- kml_representation(options.merge(:id_attr => id_attr, :geom_data => geom_data, :allow_z => allow_z, :fixed_z => fixed_z))
169
+ kml_representation(options.merge(id_attr: id_attr, geom_data: geom_data,
170
+ allow_z: allow_z, fixed_z: fixed_z))
156
171
  end
157
172
 
158
173
  # simple geojson representation
@@ -161,50 +176,55 @@ module GeoRuby#:nodoc:
161
176
  as_json(options).to_json(options)
162
177
  end
163
178
 
164
- def as_json(options = {})
179
+ def as_json(_options = {})
165
180
  # Implemented by each class
166
181
  end
167
- alias :as_geojson :as_json
182
+ alias_method :as_geojson, :as_json
168
183
 
169
- # Creates a geometry based on a EWKB string. The actual class returned depends of the content of the string passed as argument. Since WKB strings are a subset of EWKB, they are also valid.
184
+ # Creates a geometry based on a EWKB string. The actual class returned
185
+ # depends of the content of the string passed as argument.
186
+ # Since WKB strings are a subset of EWKB, they are also valid.
170
187
  def self.from_ewkb(ewkb)
171
- factory = GeometryFactory::new
172
- ewkb_parser = EWKBParser::new(factory)
188
+ factory = GeometryFactory.new
189
+ ewkb_parser = EWKBParser.new(factory)
173
190
  ewkb_parser.parse(ewkb)
174
191
  factory.geometry
175
192
  end
176
193
 
177
194
  # Creates a geometry based on a HexEWKB string given.
178
195
  def self.from_hex_ewkb(hexewkb)
179
- factory = GeometryFactory::new
180
- hexewkb_parser = HexEWKBParser::new(factory)
196
+ factory = GeometryFactory.new
197
+ hexewkb_parser = HexEWKBParser.new(factory)
181
198
  hexewkb_parser.parse(hexewkb)
182
199
  factory.geometry
183
200
  end
184
201
 
185
- # Creates a geometry based on a EWKT string. Since WKT strings are a subset of EWKT, they are also valid.
202
+ # Creates a geometry based on a EWKT string. Since WKT strings are a
203
+ # subset of EWKT, they are also valid.
186
204
  def self.from_ewkt(ewkt)
187
- factory = GeometryFactory::new
188
- ewkt_parser= EWKTParser::new(factory)
205
+ factory = GeometryFactory.new
206
+ ewkt_parser = EWKTParser.new(factory)
189
207
  ewkt_parser.parse(ewkt)
190
208
  factory.geometry
191
209
  end
192
210
 
193
211
  # Creates a geometry based on the GeoRSS string given.
194
212
  def self.from_georss(georss)
195
- georss_parser= GeorssParser::new
213
+ georss_parser = GeorssParser.new
196
214
  georss_parser.parse(georss)
197
215
  georss_parser.geometry
198
216
  end
199
217
 
200
- # sends back an array: The first element is the goemetry based on the GeoRSS string passed as argument. The second one is the GeoRSSTags (found only with the Simple format)
218
+ # sends back an array: The first element is the goemetry based on the
219
+ # GeoRSS string passed as argument. The second one is the GeoRSSTags
220
+ # (found only with the Simple format)
201
221
  def self.from_georss_with_tags(georss)
202
- georss_parser= GeorssParser::new
203
- georss_parser.parse(georss,true)
222
+ georss_parser = GeorssParser.new
223
+ georss_parser.parse(georss, true)
204
224
  [georss_parser.geometry, georss_parser.georss_tags]
205
225
  end
206
226
 
207
- #Sends back a geometry from a KML encoded geometry string.
227
+ # Sends back a geometry from a KML encoded geometry string.
208
228
  def self.from_kml(kml)
209
229
  factory = GeometryFactory.new
210
230
  parser = KmlParser.new(factory)
@@ -213,8 +233,8 @@ module GeoRuby#:nodoc:
213
233
 
214
234
  # Some GeoJSON files do not include srid info, so
215
235
  # we provide an optional parameter
216
- def self.from_geojson(geojson, srid=DEFAULT_SRID)
217
- geojson_parser= GeojsonParser::new
236
+ def self.from_geojson(geojson, srid = DEFAULT_SRID)
237
+ geojson_parser = GeoJSONParser.new
218
238
  geojson_parser.parse(geojson, srid)
219
239
  geojson_parser.geometry
220
240
  end
@@ -222,9 +242,9 @@ module GeoRuby#:nodoc:
222
242
  private
223
243
 
224
244
  def self.split_coords(coords)
225
- coords.split(" ").collect { |coord|
226
- coord.gsub(","," ")
227
- }
245
+ coords.split(' ').collect do |coord|
246
+ coord.gsub(',', ' ')
247
+ end
228
248
  end
229
249
  end
230
250
  end