ar-postgis 0.7.0
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.
- 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
|