ar-postgis 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Documentation.rdoc +292 -0
- data/History.rdoc +147 -0
- data/LICENSE.txt +29 -0
- data/README.rdoc +78 -0
- data/lib/active_record/connection_adapters/postgis_adapter.rb +38 -0
- data/lib/active_record/connection_adapters/postgis_adapter/rails4/create_connection.rb +29 -0
- data/lib/active_record/connection_adapters/postgis_adapter/rails4/databases.rake +17 -0
- data/lib/active_record/connection_adapters/postgis_adapter/rails4/main_adapter.rb +202 -0
- data/lib/active_record/connection_adapters/postgis_adapter/rails4/postgis_database_tasks.rb +204 -0
- data/lib/active_record/connection_adapters/postgis_adapter/rails4/spatial_column.rb +184 -0
- data/lib/active_record/connection_adapters/postgis_adapter/rails4/spatial_table_definition.rb +121 -0
- data/lib/active_record/connection_adapters/postgis_adapter/railtie.rb +3 -0
- data/lib/active_record/connection_adapters/postgis_adapter/shared/arel_tosql.rb +23 -0
- data/lib/active_record/connection_adapters/postgis_adapter/shared/common_adapter_methods.rb +46 -0
- data/lib/active_record/connection_adapters/postgis_adapter/shared/railtie.rb +13 -0
- data/lib/active_record/connection_adapters/postgis_adapter/shared/setup.rb +21 -0
- data/lib/active_record/connection_adapters/postgis_adapter/version.rb +7 -0
- data/lib/activerecord-postgis-adapter.rb +1 -0
- data/test/database.yml +5 -0
- data/test/tc_basic.rb +212 -0
- data/test/tc_ddl.rb +303 -0
- data/test/tc_nested_class.rb +48 -0
- data/test/tc_spatial_queries.rb +126 -0
- data/test/tc_tasks.rb +112 -0
- metadata +149 -0
data/test/tc_ddl.rb
ADDED
@@ -0,0 +1,303 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'rgeo/active_record/adapter_test_helper'
|
3
|
+
|
4
|
+
|
5
|
+
module RGeo
|
6
|
+
module ActiveRecord # :nodoc:
|
7
|
+
module PostGISAdapter # :nodoc:
|
8
|
+
module Tests # :nodoc:
|
9
|
+
|
10
|
+
class TestDDL < ::MiniTest::Test # :nodoc:
|
11
|
+
|
12
|
+
DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
|
13
|
+
OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database_local.yml'
|
14
|
+
include AdapterTestHelper
|
15
|
+
|
16
|
+
define_test_methods do
|
17
|
+
|
18
|
+
|
19
|
+
def test_create_simple_geometry
|
20
|
+
klass_ = create_ar_class
|
21
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
22
|
+
t_.column 'latlon', :geometry
|
23
|
+
end
|
24
|
+
assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
25
|
+
col_ = klass_.columns.last
|
26
|
+
assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
|
27
|
+
assert_equal(true, col_.has_spatial_constraints?)
|
28
|
+
assert_equal(false, col_.geographic?)
|
29
|
+
assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, col_.srid)
|
30
|
+
assert(klass_.cached_attributes.include?('latlon'))
|
31
|
+
klass_.connection.drop_table(:spatial_test)
|
32
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
# no_constraints no longer supported in PostGIS 2.0
|
37
|
+
def _test_create_no_constraints_geometry
|
38
|
+
klass_ = create_ar_class
|
39
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
40
|
+
t_.column 'geom', :geometry, :limit => {:no_constraints => true}
|
41
|
+
end
|
42
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
43
|
+
col_ = klass_.columns.last
|
44
|
+
assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
|
45
|
+
assert_equal(false, col_.geographic?)
|
46
|
+
assert_equal(false, col_.has_spatial_constraints?)
|
47
|
+
assert_nil(col_.srid)
|
48
|
+
assert(klass_.cached_attributes.include?('geom'))
|
49
|
+
klass_.connection.drop_table(:spatial_test)
|
50
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
def test_create_simple_geography
|
55
|
+
klass_ = create_ar_class
|
56
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
57
|
+
t_.column 'latlon', :geometry, :geographic => true
|
58
|
+
end
|
59
|
+
col_ = klass_.columns.last
|
60
|
+
assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
|
61
|
+
assert_equal(true, col_.has_spatial_constraints?)
|
62
|
+
assert_equal(true, col_.geographic?)
|
63
|
+
assert_equal(4326, col_.srid)
|
64
|
+
assert(klass_.cached_attributes.include?('latlon'))
|
65
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
def test_create_point_geometry
|
70
|
+
klass_ = create_ar_class
|
71
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
72
|
+
t_.column 'latlon', :point
|
73
|
+
end
|
74
|
+
assert_equal(::RGeo::Feature::Point, klass_.columns.last.geometric_type)
|
75
|
+
assert(klass_.cached_attributes.include?('latlon'))
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
def test_create_geometry_with_index
|
80
|
+
klass_ = create_ar_class
|
81
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
82
|
+
t_.column 'latlon', :geometry
|
83
|
+
end
|
84
|
+
klass_.connection.change_table(:spatial_test) do |t_|
|
85
|
+
t_.index([:latlon], :spatial => true)
|
86
|
+
end
|
87
|
+
assert(klass_.connection.indexes(:spatial_test).last.spatial)
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
def test_add_geometry_column
|
92
|
+
klass_ = create_ar_class
|
93
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
94
|
+
t_.column('latlon', :geometry)
|
95
|
+
end
|
96
|
+
klass_.connection.change_table(:spatial_test) do |t_|
|
97
|
+
t_.column('geom2', :point, :srid => 4326)
|
98
|
+
t_.column('name', :string)
|
99
|
+
end
|
100
|
+
assert_equal(2, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
101
|
+
cols_ = klass_.columns
|
102
|
+
assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
|
103
|
+
assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, cols_[-3].srid)
|
104
|
+
assert_equal(true, cols_[-3].has_spatial_constraints?)
|
105
|
+
assert_equal(::RGeo::Feature::Point, cols_[-2].geometric_type)
|
106
|
+
assert_equal(4326, cols_[-2].srid)
|
107
|
+
assert_equal(false, cols_[-2].geographic?)
|
108
|
+
assert_equal(true, cols_[-2].has_spatial_constraints?)
|
109
|
+
assert_nil(cols_[-1].geometric_type)
|
110
|
+
assert_equal(false, cols_[-1].has_spatial_constraints?)
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
# no_constraints no longer supported in PostGIS 2.0
|
115
|
+
def _test_add_no_constraints_geometry_column
|
116
|
+
klass_ = create_ar_class
|
117
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
118
|
+
t_.column('latlon', :geometry)
|
119
|
+
end
|
120
|
+
klass_.connection.change_table(:spatial_test) do |t_|
|
121
|
+
t_.column('geom2', :geometry, :no_constraints => true)
|
122
|
+
t_.column('name', :string)
|
123
|
+
end
|
124
|
+
assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
125
|
+
cols_ = klass_.columns
|
126
|
+
assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
|
127
|
+
assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, cols_[-3].srid)
|
128
|
+
assert_equal(true, cols_[-3].has_spatial_constraints?)
|
129
|
+
assert_equal(::RGeo::Feature::Geometry, cols_[-2].geometric_type)
|
130
|
+
assert_nil(cols_[-2].srid)
|
131
|
+
assert_equal(false, cols_[-2].geographic?)
|
132
|
+
assert_equal(false, cols_[-2].has_spatial_constraints?)
|
133
|
+
assert_nil(cols_[-1].geometric_type)
|
134
|
+
assert_equal(false, cols_[-1].has_spatial_constraints?)
|
135
|
+
end
|
136
|
+
|
137
|
+
|
138
|
+
def test_add_geography_column
|
139
|
+
klass_ = create_ar_class
|
140
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
141
|
+
t_.column('latlon', :geometry)
|
142
|
+
end
|
143
|
+
klass_.connection.change_table(:spatial_test) do |t_|
|
144
|
+
t_.column('geom2', :point, :srid => 4326, :geographic => true)
|
145
|
+
t_.column('name', :string)
|
146
|
+
end
|
147
|
+
assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
148
|
+
cols_ = klass_.columns
|
149
|
+
assert_equal(::RGeo::Feature::Geometry, cols_[-3].geometric_type)
|
150
|
+
assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, cols_[-3].srid)
|
151
|
+
assert_equal(true, cols_[-3].has_spatial_constraints?)
|
152
|
+
assert_equal(::RGeo::Feature::Point, cols_[-2].geometric_type)
|
153
|
+
assert_equal(4326, cols_[-2].srid)
|
154
|
+
assert_equal(true, cols_[-2].geographic?)
|
155
|
+
assert_equal(true, cols_[-2].has_spatial_constraints?)
|
156
|
+
assert_nil(cols_[-1].geometric_type)
|
157
|
+
assert_equal(false, cols_[-1].has_spatial_constraints?)
|
158
|
+
end
|
159
|
+
|
160
|
+
|
161
|
+
def test_drop_geometry_column
|
162
|
+
klass_ = create_ar_class
|
163
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
164
|
+
t_.column('latlon', :geometry)
|
165
|
+
t_.column('geom2', :point, :srid => 4326)
|
166
|
+
end
|
167
|
+
klass_.connection.change_table(:spatial_test) do |t_|
|
168
|
+
t_.remove('geom2')
|
169
|
+
end
|
170
|
+
assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
171
|
+
cols_ = klass_.columns
|
172
|
+
assert_equal(::RGeo::Feature::Geometry, cols_[-1].geometric_type)
|
173
|
+
assert_equal('latlon', cols_[-1].name)
|
174
|
+
assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, cols_[-1].srid)
|
175
|
+
assert_equal(false, cols_[-1].geographic?)
|
176
|
+
end
|
177
|
+
|
178
|
+
|
179
|
+
def test_drop_geography_column
|
180
|
+
klass_ = create_ar_class
|
181
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
182
|
+
t_.column('latlon', :geometry)
|
183
|
+
t_.column('geom2', :point, :srid => 4326, :geographic => true)
|
184
|
+
t_.column('geom3', :point, :srid => 4326)
|
185
|
+
end
|
186
|
+
klass_.connection.change_table(:spatial_test) do |t_|
|
187
|
+
t_.remove('geom2')
|
188
|
+
end
|
189
|
+
assert_equal(2, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
190
|
+
cols_ = klass_.columns
|
191
|
+
assert_equal(::RGeo::Feature::Point, cols_[-1].geometric_type)
|
192
|
+
assert_equal('geom3', cols_[-1].name)
|
193
|
+
assert_equal(false, cols_[-1].geographic?)
|
194
|
+
assert_equal(::RGeo::Feature::Geometry, cols_[-2].geometric_type)
|
195
|
+
assert_equal('latlon', cols_[-2].name)
|
196
|
+
assert_equal(false, cols_[-2].geographic?)
|
197
|
+
end
|
198
|
+
|
199
|
+
|
200
|
+
def test_create_simple_geometry_using_shortcut
|
201
|
+
klass_ = create_ar_class
|
202
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
203
|
+
t_.geometry 'latlon'
|
204
|
+
end
|
205
|
+
assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
206
|
+
col_ = klass_.columns.last
|
207
|
+
assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
|
208
|
+
assert_equal(false, col_.geographic?)
|
209
|
+
assert_equal(if(klass_.connection.postgis_lib_version >= "2") then 0 else -1 end, col_.srid)
|
210
|
+
assert(klass_.cached_attributes.include?('latlon'))
|
211
|
+
klass_.connection.drop_table(:spatial_test)
|
212
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
213
|
+
end
|
214
|
+
|
215
|
+
|
216
|
+
# no_constraints no longer supported in PostGIS 2.0
|
217
|
+
def _test_create_no_constraints_geometry_using_shortcut
|
218
|
+
klass_ = create_ar_class
|
219
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
220
|
+
t_.spatial 'geom', :no_constraints => true
|
221
|
+
end
|
222
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
223
|
+
col_ = klass_.columns.last
|
224
|
+
assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
|
225
|
+
assert_equal(false, col_.geographic?)
|
226
|
+
assert_nil(col_.srid)
|
227
|
+
assert(klass_.cached_attributes.include?('geom'))
|
228
|
+
klass_.connection.drop_table(:spatial_test)
|
229
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
230
|
+
end
|
231
|
+
|
232
|
+
|
233
|
+
def test_create_simple_geography_using_shortcut
|
234
|
+
klass_ = create_ar_class
|
235
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
236
|
+
# t_.method_missing(:geometry, 'latlon', :geographic => true)
|
237
|
+
t_.geometry 'latlon', :geographic => true
|
238
|
+
end
|
239
|
+
col_ = klass_.columns.last
|
240
|
+
assert_equal(::RGeo::Feature::Geometry, col_.geometric_type)
|
241
|
+
assert_equal(true, col_.geographic?)
|
242
|
+
assert_equal(4326, col_.srid)
|
243
|
+
assert(klass_.cached_attributes.include?('latlon'))
|
244
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
def test_create_point_geometry_using_shortcut
|
249
|
+
klass_ = create_ar_class
|
250
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
251
|
+
t_.point 'latlon'
|
252
|
+
end
|
253
|
+
assert_equal(::RGeo::Feature::Point, klass_.columns.last.geometric_type)
|
254
|
+
assert(klass_.cached_attributes.include?('latlon'))
|
255
|
+
end
|
256
|
+
|
257
|
+
|
258
|
+
def test_create_geometry_with_options
|
259
|
+
klass_ = create_ar_class
|
260
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
261
|
+
t_.column 'region', :polygon, :has_m => true, :srid => 3785
|
262
|
+
end
|
263
|
+
assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
264
|
+
col_ = klass_.columns.last
|
265
|
+
assert_equal(::RGeo::Feature::Polygon, col_.geometric_type)
|
266
|
+
assert_equal(false, col_.geographic?)
|
267
|
+
assert_equal(false, col_.has_z?)
|
268
|
+
assert_equal(true, col_.has_m?)
|
269
|
+
assert_equal(3785, col_.srid)
|
270
|
+
assert_equal({:has_m => true, :type => 'polygon', :srid => 3785}, col_.limit)
|
271
|
+
assert(klass_.cached_attributes.include?('region'))
|
272
|
+
klass_.connection.drop_table(:spatial_test)
|
273
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
274
|
+
end
|
275
|
+
|
276
|
+
|
277
|
+
def test_create_geometry_using_limit
|
278
|
+
klass_ = create_ar_class
|
279
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
280
|
+
t_.spatial 'region', :limit => {:has_m => true, :srid => 3785, :type => :polygon}
|
281
|
+
end
|
282
|
+
assert_equal(1, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
283
|
+
col_ = klass_.columns.last
|
284
|
+
assert_equal(::RGeo::Feature::Polygon, col_.geometric_type)
|
285
|
+
assert_equal(false, col_.geographic?)
|
286
|
+
assert_equal(false, col_.has_z)
|
287
|
+
assert_equal(true, col_.has_m)
|
288
|
+
assert_equal(3785, col_.srid)
|
289
|
+
assert_equal({:has_m => true, :type => 'polygon', :srid => 3785}, col_.limit)
|
290
|
+
assert(klass_.cached_attributes.include?('region'))
|
291
|
+
klass_.connection.drop_table(:spatial_test)
|
292
|
+
assert_equal(0, klass_.connection.select_value("SELECT COUNT(*) FROM geometry_columns WHERE f_table_name='spatial_test'").to_i)
|
293
|
+
end
|
294
|
+
|
295
|
+
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'rgeo/active_record/adapter_test_helper'
|
3
|
+
|
4
|
+
|
5
|
+
module RGeo
|
6
|
+
module ActiveRecord # :nodoc:
|
7
|
+
module PostGISAdapter # :nodoc:
|
8
|
+
module Tests # :nodoc:
|
9
|
+
|
10
|
+
class TestNestedClass < ::MiniTest::Test # :nodoc:
|
11
|
+
|
12
|
+
DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
|
13
|
+
OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database_local.yml'
|
14
|
+
include AdapterTestHelper
|
15
|
+
|
16
|
+
|
17
|
+
module Foo
|
18
|
+
def self.table_name_prefix
|
19
|
+
'foo_'
|
20
|
+
end
|
21
|
+
class Bar < ::ActiveRecord::Base
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
define_test_methods do
|
27
|
+
|
28
|
+
|
29
|
+
def test_nested_model
|
30
|
+
Foo::Bar.class_eval do
|
31
|
+
establish_connection(TestNestedClass::DATABASE_CONFIG)
|
32
|
+
end
|
33
|
+
Foo::Bar.connection.create_table(:foo_bars) do |t_|
|
34
|
+
t_.column 'latlon', :point, :srid => 3785
|
35
|
+
end
|
36
|
+
Foo::Bar.all
|
37
|
+
Foo::Bar.connection.drop_table(:foo_bars)
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'rgeo/active_record/adapter_test_helper'
|
3
|
+
|
4
|
+
|
5
|
+
module RGeo
|
6
|
+
module ActiveRecord # :nodoc:
|
7
|
+
module PostGISAdapter # :nodoc:
|
8
|
+
module Tests # :nodoc:
|
9
|
+
|
10
|
+
class TestSpatialQueries < ::MiniTest::Test # :nodoc:
|
11
|
+
|
12
|
+
DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database.yml'
|
13
|
+
OVERRIDE_DATABASE_CONFIG_PATH = ::File.dirname(__FILE__)+'/database_local.yml'
|
14
|
+
include AdapterTestHelper
|
15
|
+
|
16
|
+
define_test_methods do
|
17
|
+
|
18
|
+
|
19
|
+
def populate_ar_class(content_)
|
20
|
+
klass_ = create_ar_class
|
21
|
+
case content_
|
22
|
+
when :mercator_point
|
23
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
24
|
+
t_.column 'latlon', :point, :srid => 3785
|
25
|
+
end
|
26
|
+
when :latlon_point_geographic
|
27
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
28
|
+
t_.column 'latlon', :point, :srid => 4326, :geographic => true
|
29
|
+
end
|
30
|
+
when :path_linestring
|
31
|
+
klass_.connection.create_table(:spatial_test) do |t_|
|
32
|
+
t_.column 'path', :line_string, :srid => 3785
|
33
|
+
end
|
34
|
+
end
|
35
|
+
klass_
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def test_query_point
|
40
|
+
klass_ = populate_ar_class(:mercator_point)
|
41
|
+
obj_ = klass_.new
|
42
|
+
obj_.latlon = @factory.point(1.0, 2.0)
|
43
|
+
obj_.save!
|
44
|
+
id_ = obj_.id
|
45
|
+
obj2_ = klass_.where(:latlon => @factory.multi_point([@factory.point(1.0, 2.0)])).first
|
46
|
+
refute_nil(obj2_)
|
47
|
+
assert_equal(id_, obj2_.id)
|
48
|
+
obj3_ = klass_.where(:latlon => @factory.point(2.0, 2.0)).first
|
49
|
+
assert_nil(obj3_)
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
def test_query_point_wkt
|
54
|
+
klass_ = populate_ar_class(:mercator_point)
|
55
|
+
obj_ = klass_.new
|
56
|
+
obj_.latlon = @factory.point(1.0, 2.0)
|
57
|
+
obj_.save!
|
58
|
+
id_ = obj_.id
|
59
|
+
obj2_ = klass_.where(:latlon => 'SRID=3785;POINT(1 2)').first
|
60
|
+
refute_nil(obj2_)
|
61
|
+
assert_equal(id_, obj2_.id)
|
62
|
+
obj3_ = klass_.where(:latlon => 'SRID=3785;POINT(2 2)').first
|
63
|
+
assert_nil(obj3_)
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
if ::RGeo::ActiveRecord.spatial_expressions_supported?
|
68
|
+
|
69
|
+
|
70
|
+
def test_query_st_distance
|
71
|
+
klass_ = populate_ar_class(:mercator_point)
|
72
|
+
obj_ = klass_.new
|
73
|
+
obj_.latlon = @factory.point(1.0, 2.0)
|
74
|
+
obj_.save!
|
75
|
+
id_ = obj_.id
|
76
|
+
obj2_ = klass_.where(klass_.arel_table[:latlon].st_distance('SRID=3785;POINT(2 3)').lt(2)).first
|
77
|
+
refute_nil(obj2_)
|
78
|
+
assert_equal(id_, obj2_.id)
|
79
|
+
obj3_ = klass_.where(klass_.arel_table[:latlon].st_distance('SRID=3785;POINT(2 3)').gt(2)).first
|
80
|
+
assert_nil(obj3_)
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
def test_query_st_distance_from_constant
|
85
|
+
klass_ = populate_ar_class(:mercator_point)
|
86
|
+
obj_ = klass_.new
|
87
|
+
obj_.latlon = @factory.point(1.0, 2.0)
|
88
|
+
obj_.save!
|
89
|
+
id_ = obj_.id
|
90
|
+
obj2_ = klass_.where(::Arel.spatial('SRID=3785;POINT(2 3)').st_distance(klass_.arel_table[:latlon]).lt(2)).first
|
91
|
+
refute_nil(obj2_)
|
92
|
+
assert_equal(id_, obj2_.id)
|
93
|
+
obj3_ = klass_.where(::Arel.spatial('SRID=3785;POINT(2 3)').st_distance(klass_.arel_table[:latlon]).gt(2)).first
|
94
|
+
assert_nil(obj3_)
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
def test_query_st_length
|
99
|
+
klass_ = populate_ar_class(:path_linestring)
|
100
|
+
obj_ = klass_.new
|
101
|
+
obj_.path = @factory.line(@factory.point(1.0, 2.0), @factory.point(3.0, 2.0))
|
102
|
+
obj_.save!
|
103
|
+
id_ = obj_.id
|
104
|
+
obj2_ = klass_.where(klass_.arel_table[:path].st_length.eq(2)).first
|
105
|
+
refute_nil(obj2_)
|
106
|
+
assert_equal(id_, obj2_.id)
|
107
|
+
obj3_ = klass_.where(klass_.arel_table[:path].st_length.gt(3)).first
|
108
|
+
assert_nil(obj3_)
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
else
|
113
|
+
|
114
|
+
puts "WARNING: The current Arel does not support named functions. Spatial expression tests skipped."
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|