geos-extensions 0.1.0 → 0.1.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.
- data/VERSION +1 -1
- data/geos-extensions.gemspec +5 -5
- data/lib/geos/google_maps/api_3.rb +55 -49
- data/lib/geos_extensions.rb +1 -1
- data/test/google_maps_api_3_test.rb +10 -14
- data/test/reader_test.rb +13 -0
- metadata +5 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/geos-extensions.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{geos-extensions}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date = %q{2011-06
|
11
|
+
s.authors = [%q{J Smith}]
|
12
|
+
s.date = %q{2011-07-06}
|
13
13
|
s.description = %q{Extensions for the GEOS library.}
|
14
14
|
s.email = %q{code@zoocasa.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -46,8 +46,8 @@ Gem::Specification.new do |s|
|
|
46
46
|
"test/writer_test.rb"
|
47
47
|
]
|
48
48
|
s.homepage = %q{http://github.com/zoocasa/geos-extensions}
|
49
|
-
s.require_paths = [
|
50
|
-
s.rubygems_version = %q{1.
|
49
|
+
s.require_paths = [%q{lib}]
|
50
|
+
s.rubygems_version = %q{1.8.5}
|
51
51
|
s.summary = %q{Extensions for the GEOS library.}
|
52
52
|
|
53
53
|
if s.respond_to? :specification_version then
|
@@ -9,7 +9,7 @@ module Geos::GoogleMaps::Api3
|
|
9
9
|
shape
|
10
10
|
}.freeze
|
11
11
|
|
12
|
-
# Returns a new LatLngBounds object with the proper
|
12
|
+
# Returns a new LatLngBounds object with the proper LatLngs in place
|
13
13
|
# for determining the geometry bounds.
|
14
14
|
def to_g_lat_lng_bounds_api3(options = {})
|
15
15
|
"new google.maps.LatLngBounds(#{self.lower_left.to_g_lat_lng_api3(options)}, #{self.upper_right.to_g_lat_lng_api3(options)})"
|
@@ -49,69 +49,75 @@ module Geos::GoogleMaps::Api3
|
|
49
49
|
end
|
50
50
|
|
51
51
|
module CoordinateSequence
|
52
|
-
|
52
|
+
UNESCAPED_POLY_OPTIONS = %w{
|
53
|
+
clickable
|
54
|
+
fillOpacity
|
55
|
+
geodesic
|
56
|
+
map
|
57
|
+
path
|
58
|
+
paths
|
59
|
+
strokeOpacity
|
60
|
+
strokeWeight
|
61
|
+
zIndex
|
62
|
+
}.freeze
|
63
|
+
|
64
|
+
# Returns a Ruby Array of LatLngs.
|
53
65
|
def to_g_lat_lng_api3(options = {})
|
54
66
|
self.to_a.collect do |p|
|
55
67
|
"new google.maps.LatLng(#{p[1]}, #{p[0]})"
|
56
68
|
end
|
57
69
|
end
|
58
70
|
|
59
|
-
# Returns a new
|
71
|
+
# Returns a new Polyline. Note that this Polyline just uses whatever
|
60
72
|
# coordinates are found in the sequence in order, so it might not
|
61
73
|
# make much sense at all.
|
62
74
|
#
|
63
|
-
# The
|
64
|
-
#
|
65
|
-
#
|
75
|
+
# The polyline_options Hash follows the Google Maps API arguments to the
|
76
|
+
# Polyline constructor and include :clickable, :geodesic, :map, etc. See
|
77
|
+
# the Google Maps API documentation for details.
|
78
|
+
#
|
79
|
+
# The options Hash allows you to specify if certain arguments should be
|
80
|
+
# escaped on output. Usually the options in UNESCAPED_POLY_OPTIONS are
|
81
|
+
# escaped, but if for some reason you want some other options to be
|
82
|
+
# escaped, pass them along in options[:escape]. The options Hash also
|
83
|
+
# passes along options to to_g_lat_lng_api3.
|
66
84
|
def to_g_polyline_api3(polyline_options = {}, options = {})
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
poly_opts = if polyline_options[:polyline_options]
|
74
|
-
Geos::Helper.camelize_keys(polyline_options[:polyline_options])
|
75
|
-
end
|
85
|
+
options = {
|
86
|
+
:escape => [],
|
87
|
+
:lat_lng_options => {}
|
88
|
+
}.merge(options)
|
76
89
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
(polyline_options[:opacity] || 'null'),
|
81
|
-
(poly_opts ? poly_opts.to_json : 'null')
|
82
|
-
].join(', ')
|
90
|
+
opts = Geos::Helper.camelize_keys(polyline_options)
|
91
|
+
opts[:path] = "[#{self.to_g_lat_lng_api3(options[:lat_lng_options]).join(', ')}]"
|
92
|
+
json = Geos::Helper.escape_json(opts, UNESCAPED_POLY_OPTIONS - options[:escape])
|
83
93
|
|
84
|
-
"new
|
94
|
+
"new google.maps.Polyline(#{json})"
|
85
95
|
end
|
86
96
|
|
87
|
-
# Returns a new
|
97
|
+
# Returns a new Polygon. Note that this Polygon just uses whatever
|
88
98
|
# coordinates are found in the sequence in order, so it might not
|
89
99
|
# make much sense at all.
|
90
100
|
#
|
91
|
-
# The
|
92
|
-
#
|
93
|
-
#
|
94
|
-
#
|
101
|
+
# The polygon_options Hash follows the Google Maps API arguments to the
|
102
|
+
# Polyline constructor and include :clickable, :geodesic, :map, etc. See
|
103
|
+
# the Google Maps API documentation for details.
|
104
|
+
#
|
105
|
+
# The options Hash allows you to specify if certain arguments should be
|
106
|
+
# escaped on output. Usually the options in UNESCAPED_POLY_OPTIONS are
|
107
|
+
# escaped, but if for some reason you want some other options to be
|
108
|
+
# escaped, pass them along in options[:escape]. The options Hash also
|
109
|
+
# passes along options to to_g_lat_lng_api3.
|
95
110
|
def to_g_polygon_api3(polygon_options = {}, options = {})
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
end
|
111
|
+
options = {
|
112
|
+
:escape => [],
|
113
|
+
:lat_lng_options => {}
|
114
|
+
}.merge(options)
|
101
115
|
|
102
|
-
|
103
|
-
|
104
|
-
|
116
|
+
opts = Geos::Helper.camelize_keys(polygon_options)
|
117
|
+
opts[:paths] = "[#{self.to_g_lat_lng_api3(options[:lat_lng_options]).join(', ')}]"
|
118
|
+
json = Geos::Helper.escape_json(opts, UNESCAPED_POLY_OPTIONS - options[:escape])
|
105
119
|
|
106
|
-
|
107
|
-
(polygon_options[:stroke_color] ? "'#{Geos::Helper.escape_javascript(polygon_options[:stroke_color])}'" : 'null'),
|
108
|
-
(polygon_options[:stroke_weight] || 'null'),
|
109
|
-
(polygon_options[:stroke_opacity] || 'null'),
|
110
|
-
(polygon_options[:fill_color] ? "'#{Geos::Helper.escape_javascript(polygon_options[:fill_color])}'" : 'null'),
|
111
|
-
(polygon_options[:fill_opacity] || 'null'),
|
112
|
-
(poly_opts ? poly_opts.to_json : 'null')
|
113
|
-
].join(', ')
|
114
|
-
"new #{klass}([#{self.to_g_lat_lng_api3(options).join(', ')}], #{args})"
|
120
|
+
"new google.maps.Polygon(#{json})"
|
115
121
|
end
|
116
122
|
end
|
117
123
|
|
@@ -132,14 +138,14 @@ module Geos::GoogleMaps::Api3
|
|
132
138
|
end
|
133
139
|
|
134
140
|
module Polygon
|
135
|
-
# Returns a
|
141
|
+
# Returns a Polyline of the exterior ring of the Polygon. This does
|
136
142
|
# not take into consideration any interior rings the Polygon may
|
137
143
|
# have.
|
138
144
|
def to_g_polyline_api3(polyline_options = {}, options = {})
|
139
145
|
self.exterior_ring.to_g_polyline_api3(polyline_options, options)
|
140
146
|
end
|
141
147
|
|
142
|
-
# Returns a
|
148
|
+
# Returns a Polygon of the exterior ring of the Polygon. This does
|
143
149
|
# not take into consideration any interior rings the Polygon may
|
144
150
|
# have.
|
145
151
|
def to_g_polygon_api3(polygon_options = {}, options = {})
|
@@ -148,7 +154,7 @@ module Geos::GoogleMaps::Api3
|
|
148
154
|
end
|
149
155
|
|
150
156
|
module GeometryCollection
|
151
|
-
# Returns a Ruby Array of
|
157
|
+
# Returns a Ruby Array of Polylines for each geometry in the
|
152
158
|
# collection.
|
153
159
|
def to_g_polyline_api3(polyline_options = {}, options = {})
|
154
160
|
self.collect do |p|
|
@@ -156,7 +162,7 @@ module Geos::GoogleMaps::Api3
|
|
156
162
|
end
|
157
163
|
end
|
158
164
|
|
159
|
-
# Returns a Ruby Array of
|
165
|
+
# Returns a Ruby Array of Polygons for each geometry in the
|
160
166
|
# collection.
|
161
167
|
def to_g_polygon_api3(polygon_options = {}, options = {})
|
162
168
|
self.collect do |p|
|
@@ -166,4 +172,4 @@ module Geos::GoogleMaps::Api3
|
|
166
172
|
end
|
167
173
|
end
|
168
174
|
|
169
|
-
Geos::GoogleMaps.use_api(
|
175
|
+
Geos::GoogleMaps.use_api(3)
|
data/lib/geos_extensions.rb
CHANGED
@@ -17,7 +17,7 @@ module Geos
|
|
17
17
|
autoload :ActiveRecord, File.join(GEOS_EXTENSIONS_BASE, *%w{ geos active_record_extensions })
|
18
18
|
autoload :GoogleMaps, File.join(GEOS_EXTENSIONS_BASE, *%w{ geos google_maps })
|
19
19
|
|
20
|
-
REGEXP_WKT =
|
20
|
+
REGEXP_WKT = /^\s*(?:SRID=(-?[0-9]+);)?(\s*[PLMCG].+)/im
|
21
21
|
REGEXP_WKB_HEX = /^[A-Fa-f0-9\s]+$/
|
22
22
|
REGEXP_G_LAT_LNG_BOUNDS = /^
|
23
23
|
\(
|
@@ -48,44 +48,40 @@ class GoogleMapsApi3Tests < Test::Unit::TestCase
|
|
48
48
|
if defined?(JSON)
|
49
49
|
def test_to_g_polygon
|
50
50
|
assert_equal(
|
51
|
-
|
51
|
+
%{new google.maps.Polygon({"paths": [new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)]})},
|
52
52
|
@polygon.to_g_polygon
|
53
53
|
)
|
54
54
|
|
55
55
|
assert_equal(
|
56
|
-
"new google.maps.Polygon([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)],
|
56
|
+
"new google.maps.Polygon({\"strokeColor\": \"#b00b1e\", \"paths\": [new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)], \"fillColor\": \"#b00b1e\", \"strokeWeight\": 5, \"map\": map, \"strokeOpacity\": 0.5})",
|
57
57
|
@polygon.to_g_polygon(
|
58
58
|
:stroke_color => '#b00b1e',
|
59
59
|
:stroke_weight => 5,
|
60
60
|
:stroke_opacity => 0.5,
|
61
61
|
:fill_color => '#b00b1e',
|
62
|
-
:
|
63
|
-
:mouse_out_tolerence => 5
|
64
|
-
}
|
62
|
+
:map => 'map'
|
65
63
|
)
|
66
64
|
)
|
67
65
|
end
|
68
66
|
|
69
67
|
def test_to_g_polyline
|
70
68
|
assert_equal(
|
71
|
-
"new google.maps.Polyline([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)]
|
69
|
+
"new google.maps.Polyline({\"path\": [new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)]})",
|
72
70
|
@polygon.to_g_polyline
|
73
71
|
)
|
74
72
|
|
75
73
|
assert_equal(
|
76
|
-
"new google.maps.Polyline([new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)],
|
74
|
+
"new google.maps.Polyline({\"path\": [new google.maps.LatLng(0.0, 0.0), new google.maps.LatLng(1.0, 1.0), new google.maps.LatLng(2.5, 2.5), new google.maps.LatLng(5.0, 5.0), new google.maps.LatLng(0.0, 0.0)], \"strokeColor\": \"#b00b1e\", \"strokeWeight\": 5, \"map\": map, \"strokeOpacity\": 0.5})",
|
77
75
|
@polygon.to_g_polyline(
|
78
|
-
:
|
79
|
-
:
|
80
|
-
:
|
81
|
-
:
|
82
|
-
:mouse_out_tolerence => 5
|
83
|
-
}
|
76
|
+
:stroke_color => '#b00b1e',
|
77
|
+
:stroke_weight => 5,
|
78
|
+
:stroke_opacity => 0.5,
|
79
|
+
:map => 'map'
|
84
80
|
)
|
85
81
|
)
|
86
82
|
end
|
87
83
|
|
88
|
-
def
|
84
|
+
def test_to_g_marker
|
89
85
|
marker = @point.to_g_marker
|
90
86
|
|
91
87
|
lat, lng, json = if marker =~ /^new\s+
|
data/test/reader_test.rb
CHANGED
@@ -109,4 +109,17 @@ class GeosReaderTests < Test::Unit::TestCase
|
|
109
109
|
assert_saneness_of_polygon(polygon)
|
110
110
|
end
|
111
111
|
end
|
112
|
+
|
113
|
+
def test_read_wkt_with_newlines
|
114
|
+
geom = Geos.read(<<-EOF)
|
115
|
+
POLYGON((
|
116
|
+
0 0,
|
117
|
+
10 10,
|
118
|
+
0 10,
|
119
|
+
0 0
|
120
|
+
))
|
121
|
+
EOF
|
122
|
+
|
123
|
+
assert_equal('POLYGON ((0 0, 10 10, 0 10, 0 0))', geom.to_wkt(:trim => true))
|
124
|
+
end
|
112
125
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geos-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- J Smith
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06
|
18
|
+
date: 2011-07-06 00:00:00 Z
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description: Extensions for the GEOS library.
|
@@ -84,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
84
|
requirements: []
|
85
85
|
|
86
86
|
rubyforge_project:
|
87
|
-
rubygems_version: 1.
|
87
|
+
rubygems_version: 1.8.5
|
88
88
|
signing_key:
|
89
89
|
specification_version: 3
|
90
90
|
summary: Extensions for the GEOS library.
|