rgeo 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +6 -0
- data/README.rdoc +1 -1
- data/Version +1 -1
- data/ext/geos_c_impl/extconf.rb +13 -13
- data/ext/geos_c_impl/factory.c +30 -18
- data/ext/geos_c_impl/factory.h +18 -12
- data/ext/geos_c_impl/geometry.c +11 -11
- data/ext/geos_c_impl/geometry.h +7 -7
- data/ext/geos_c_impl/geometry_collection.c +15 -15
- data/ext/geos_c_impl/geometry_collection.h +8 -8
- data/ext/geos_c_impl/line_string.c +14 -14
- data/ext/geos_c_impl/line_string.h +7 -7
- data/ext/geos_c_impl/main.c +7 -7
- data/ext/geos_c_impl/point.c +9 -9
- data/ext/geos_c_impl/point.h +7 -7
- data/ext/geos_c_impl/polygon.c +9 -9
- data/ext/geos_c_impl/polygon.h +7 -7
- data/ext/geos_c_impl/preface.h +7 -7
- data/ext/proj4_c_impl/extconf.rb +13 -13
- data/ext/proj4_c_impl/main.c +12 -12
- data/lib/rgeo.rb +26 -26
- data/lib/rgeo/cartesian.rb +12 -12
- data/lib/rgeo/cartesian/analysis.rb +26 -26
- data/lib/rgeo/cartesian/bounding_box.rb +83 -83
- data/lib/rgeo/cartesian/calculations.rb +36 -36
- data/lib/rgeo/cartesian/factory.rb +78 -78
- data/lib/rgeo/cartesian/feature_classes.rb +74 -74
- data/lib/rgeo/cartesian/feature_methods.rb +34 -34
- data/lib/rgeo/cartesian/interface.rb +33 -33
- data/lib/rgeo/coord_sys.rb +15 -15
- data/lib/rgeo/coord_sys/cs/entities.rb +533 -534
- data/lib/rgeo/coord_sys/cs/factories.rb +69 -69
- data/lib/rgeo/coord_sys/cs/wkt_parser.rb +44 -44
- data/lib/rgeo/coord_sys/proj4.rb +85 -85
- data/lib/rgeo/coord_sys/srs_database/active_record_table.rb +31 -31
- data/lib/rgeo/coord_sys/srs_database/interface.rb +44 -44
- data/lib/rgeo/coord_sys/srs_database/proj4_data.rb +31 -31
- data/lib/rgeo/coord_sys/srs_database/sr_org.rb +31 -31
- data/lib/rgeo/coord_sys/srs_database/url_reader.rb +29 -29
- data/lib/rgeo/error.rb +17 -17
- data/lib/rgeo/feature.rb +15 -15
- data/lib/rgeo/feature/curve.rb +58 -58
- data/lib/rgeo/feature/factory.rb +84 -84
- data/lib/rgeo/feature/factory_generator.rb +32 -32
- data/lib/rgeo/feature/geometry.rb +215 -215
- data/lib/rgeo/feature/geometry_collection.rb +46 -46
- data/lib/rgeo/feature/line.rb +21 -21
- data/lib/rgeo/feature/line_string.rb +35 -35
- data/lib/rgeo/feature/linear_ring.rb +20 -20
- data/lib/rgeo/feature/mixins.rb +61 -61
- data/lib/rgeo/feature/multi_curve.rb +37 -37
- data/lib/rgeo/feature/multi_line_string.rb +20 -20
- data/lib/rgeo/feature/multi_point.rb +22 -22
- data/lib/rgeo/feature/multi_polygon.rb +28 -28
- data/lib/rgeo/feature/multi_surface.rb +39 -39
- data/lib/rgeo/feature/point.rb +42 -42
- data/lib/rgeo/feature/polygon.rb +50 -50
- data/lib/rgeo/feature/surface.rb +42 -42
- data/lib/rgeo/feature/types.rb +58 -58
- data/lib/rgeo/geographic.rb +14 -14
- data/lib/rgeo/geographic/factory.rb +87 -87
- data/lib/rgeo/geographic/interface.rb +55 -55
- data/lib/rgeo/geographic/proj4_projector.rb +35 -35
- data/lib/rgeo/geographic/projected_feature_classes.rb +95 -95
- data/lib/rgeo/geographic/projected_feature_methods.rb +81 -81
- data/lib/rgeo/geographic/projected_window.rb +103 -103
- data/lib/rgeo/geographic/simple_mercator_projector.rb +32 -32
- data/lib/rgeo/geographic/spherical_feature_classes.rb +93 -93
- data/lib/rgeo/geographic/spherical_feature_methods.rb +25 -25
- data/lib/rgeo/geographic/spherical_math.rb +58 -58
- data/lib/rgeo/geos.rb +22 -17
- data/lib/rgeo/geos/factory.rb +93 -93
- data/lib/rgeo/geos/ffi_classes.rb +306 -231
- data/lib/rgeo/geos/ffi_factory.rb +100 -96
- data/lib/rgeo/geos/impl_additions.rb +22 -22
- data/lib/rgeo/geos/interface.rb +45 -45
- data/lib/rgeo/geos/zm_factory.rb +90 -90
- data/lib/rgeo/geos/zm_impl.rb +167 -167
- data/lib/rgeo/impl_helper.rb +11 -11
- data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +71 -71
- data/lib/rgeo/impl_helper/basic_geometry_methods.rb +29 -29
- data/lib/rgeo/impl_helper/basic_line_string_methods.rb +61 -61
- data/lib/rgeo/impl_helper/basic_point_methods.rb +43 -43
- data/lib/rgeo/impl_helper/basic_polygon_methods.rb +35 -35
- data/lib/rgeo/impl_helper/math.rb +13 -13
- data/lib/rgeo/version.rb +10 -10
- data/lib/rgeo/wkrep.rb +16 -16
- data/lib/rgeo/wkrep/wkb_generator.rb +51 -51
- data/lib/rgeo/wkrep/wkb_parser.rb +52 -52
- data/lib/rgeo/wkrep/wkt_generator.rb +51 -51
- data/lib/rgeo/wkrep/wkt_parser.rb +66 -66
- data/lib/rgeo/yaml.rb +14 -14
- data/test/common/geometry_collection_tests.rb +53 -53
- data/test/common/line_string_tests.rb +57 -57
- data/test/common/multi_line_string_tests.rb +43 -43
- data/test/common/multi_point_tests.rb +43 -43
- data/test/common/multi_polygon_tests.rb +43 -43
- data/test/common/point_tests.rb +75 -75
- data/test/common/polygon_tests.rb +37 -37
- data/test/coord_sys/tc_active_record_table.rb +25 -25
- data/test/coord_sys/tc_ogc_cs.rb +72 -72
- data/test/coord_sys/tc_proj4.rb +51 -51
- data/test/coord_sys/tc_proj4_srs_data.rb +17 -17
- data/test/coord_sys/tc_sr_org.rb +15 -15
- data/test/coord_sys/tc_url_reader.rb +19 -19
- data/test/geos_capi/tc_factory.rb +21 -21
- data/test/geos_capi/tc_geometry_collection.rb +15 -15
- data/test/geos_capi/tc_line_string.rb +15 -15
- data/test/geos_capi/tc_misc.rb +33 -22
- data/test/geos_capi/tc_multi_line_string.rb +15 -15
- data/test/geos_capi/tc_multi_point.rb +15 -15
- data/test/geos_capi/tc_multi_polygon.rb +15 -15
- data/test/geos_capi/tc_parsing_unparsing.rb +19 -19
- data/test/geos_capi/tc_point.rb +21 -21
- data/test/geos_capi/tc_polygon.rb +19 -19
- data/test/geos_capi/tc_zmfactory.rb +17 -17
- data/test/geos_ffi/tc_factory.rb +21 -21
- data/test/geos_ffi/tc_geometry_collection.rb +15 -15
- data/test/geos_ffi/tc_line_string.rb +15 -15
- data/test/geos_ffi/tc_misc.rb +49 -15
- data/test/geos_ffi/tc_multi_line_string.rb +15 -15
- data/test/geos_ffi/tc_multi_point.rb +15 -15
- data/test/geos_ffi/tc_multi_polygon.rb +15 -15
- data/test/geos_ffi/tc_parsing_unparsing.rb +19 -19
- data/test/geos_ffi/tc_point.rb +21 -21
- data/test/geos_ffi/tc_polygon.rb +19 -19
- data/test/geos_ffi/tc_zmfactory.rb +17 -17
- data/test/projected_geographic/tc_geometry_collection.rb +15 -15
- data/test/projected_geographic/tc_line_string.rb +15 -15
- data/test/projected_geographic/tc_multi_line_string.rb +15 -15
- data/test/projected_geographic/tc_multi_point.rb +15 -15
- data/test/projected_geographic/tc_multi_polygon.rb +15 -15
- data/test/projected_geographic/tc_point.rb +23 -23
- data/test/projected_geographic/tc_polygon.rb +15 -15
- data/test/simple_cartesian/tc_calculations.rb +31 -31
- data/test/simple_cartesian/tc_geometry_collection.rb +17 -17
- data/test/simple_cartesian/tc_line_string.rb +17 -17
- data/test/simple_cartesian/tc_multi_line_string.rb +17 -17
- data/test/simple_cartesian/tc_multi_point.rb +17 -17
- data/test/simple_cartesian/tc_multi_polygon.rb +17 -17
- data/test/simple_cartesian/tc_point.rb +21 -21
- data/test/simple_cartesian/tc_polygon.rb +17 -17
- data/test/simple_mercator/tc_geometry_collection.rb +15 -15
- data/test/simple_mercator/tc_line_string.rb +15 -15
- data/test/simple_mercator/tc_multi_line_string.rb +15 -15
- data/test/simple_mercator/tc_multi_point.rb +15 -15
- data/test/simple_mercator/tc_multi_polygon.rb +15 -15
- data/test/simple_mercator/tc_point.rb +23 -23
- data/test/simple_mercator/tc_polygon.rb +15 -15
- data/test/simple_mercator/tc_window.rb +50 -50
- data/test/spherical_geographic/tc_calculations.rb +47 -47
- data/test/spherical_geographic/tc_geometry_collection.rb +17 -17
- data/test/spherical_geographic/tc_line_string.rb +17 -17
- data/test/spherical_geographic/tc_multi_line_string.rb +17 -17
- data/test/spherical_geographic/tc_multi_point.rb +17 -17
- data/test/spherical_geographic/tc_multi_polygon.rb +17 -17
- data/test/spherical_geographic/tc_point.rb +23 -23
- data/test/spherical_geographic/tc_polygon.rb +17 -17
- data/test/tc_cartesian_analysis.rb +23 -23
- data/test/tc_mixins.rb +39 -39
- data/test/tc_oneoff.rb +15 -15
- data/test/tc_types.rb +17 -17
- data/test/wkrep/tc_wkb_generator.rb +67 -67
- data/test/wkrep/tc_wkb_parser.rb +73 -73
- data/test/wkrep/tc_wkt_generator.rb +75 -75
- data/test/wkrep/tc_wkt_parser.rb +97 -97
- metadata +3 -3
data/lib/rgeo/coord_sys/proj4.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# -----------------------------------------------------------------------------
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Proj4 wrapper for RGeo
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# -----------------------------------------------------------------------------
|
6
|
-
# Copyright 2010 Daniel Azuma
|
7
|
-
#
|
6
|
+
# Copyright 2010-2012 Daniel Azuma
|
7
|
+
#
|
8
8
|
# All rights reserved.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# Redistribution and use in source and binary forms, with or without
|
11
11
|
# modification, are permitted provided that the following conditions are met:
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# * Redistributions of source code must retain the above copyright notice,
|
14
14
|
# this list of conditions and the following disclaimer.
|
15
15
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
@@ -18,7 +18,7 @@
|
|
18
18
|
# * Neither the name of the copyright holder, nor the names of any other
|
19
19
|
# contributors to this software, may be used to endorse or promote products
|
20
20
|
# derived from this software without specific prior written permission.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
23
23
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
24
24
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
@@ -35,67 +35,67 @@
|
|
35
35
|
|
36
36
|
|
37
37
|
module RGeo
|
38
|
-
|
38
|
+
|
39
39
|
module CoordSys
|
40
|
-
|
41
|
-
|
40
|
+
|
41
|
+
|
42
42
|
# This is a Ruby wrapper around a Proj4 coordinate system.
|
43
43
|
# It represents a single geographic coordinate system, which may be
|
44
44
|
# a flat projection, a geocentric (3-dimensional) coordinate system,
|
45
45
|
# or a geographic (latitude-longitude) coordinate system.
|
46
|
-
#
|
46
|
+
#
|
47
47
|
# Generally, these are used to define the projection for a
|
48
48
|
# Feature::Factory. You can then convert between coordinate systems
|
49
49
|
# by casting geometries between such factories using the :project
|
50
50
|
# option. You may also use this object directly to perform low-level
|
51
51
|
# coordinate transformations.
|
52
|
-
|
52
|
+
|
53
53
|
class Proj4
|
54
|
-
|
55
|
-
|
54
|
+
|
55
|
+
|
56
56
|
def inspect # :nodoc:
|
57
57
|
"#<#{self.class}:0x#{object_id.to_s(16)} #{canonical_str.inspect}>"
|
58
58
|
end
|
59
|
-
|
60
|
-
|
59
|
+
|
60
|
+
|
61
61
|
def to_s # :nodoc:
|
62
62
|
canonical_str
|
63
63
|
end
|
64
|
-
|
65
|
-
|
64
|
+
|
65
|
+
|
66
66
|
def hash # :nodoc:
|
67
67
|
canonical_hash.hash
|
68
68
|
end
|
69
|
-
|
70
|
-
|
69
|
+
|
70
|
+
|
71
71
|
# Returns true if this Proj4 is equivalent to the given Proj4.
|
72
|
-
#
|
72
|
+
#
|
73
73
|
# Note: this tests for equivalence by comparing only the hash
|
74
74
|
# definitions of the Proj4 objects, and returning true if those
|
75
75
|
# definitions are equivalent. In some cases, this may still return
|
76
76
|
# false even if the actual coordinate systems are identical, since
|
77
77
|
# there are sometimes multiple ways to express a given coordinate
|
78
78
|
# system.
|
79
|
-
|
79
|
+
|
80
80
|
def eql?(rhs_)
|
81
81
|
rhs_.class == self.class && rhs_.canonical_hash == canonical_hash && rhs_._radians? == _radians?
|
82
82
|
end
|
83
83
|
alias_method :==, :eql?
|
84
|
-
|
85
|
-
|
84
|
+
|
85
|
+
|
86
86
|
# Marshal support
|
87
|
-
|
87
|
+
|
88
88
|
def marshal_dump # :nodoc:
|
89
89
|
{'rad' => radians?, 'str' => original_str || canonical_str}
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
def marshal_load(data_) # :nodoc:
|
93
93
|
_set_value(data_['str'], data_['rad'])
|
94
94
|
end
|
95
|
-
|
96
|
-
|
95
|
+
|
96
|
+
|
97
97
|
# Psych support
|
98
|
-
|
98
|
+
|
99
99
|
def init_with(coder_) # :nodoc:
|
100
100
|
if coder_.type == :scalar
|
101
101
|
_set_value(coder_.scalar, false)
|
@@ -103,29 +103,29 @@ module RGeo
|
|
103
103
|
_set_value(coder_['proj4'], coder_['radians'])
|
104
104
|
end
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
def encode_with(coder_) # :nodoc:
|
108
108
|
coder_['proj4'] = original_str || canonical_str
|
109
109
|
coder_['radians'] = radians?
|
110
110
|
end
|
111
|
-
|
112
|
-
|
111
|
+
|
112
|
+
|
113
113
|
# Returns the "canonical" string definition for this coordinate
|
114
114
|
# system, as reported by Proj4. This may be slightly different
|
115
115
|
# from the definition used to construct this object.
|
116
|
-
|
116
|
+
|
117
117
|
def canonical_str
|
118
118
|
unless defined?(@canonical_str)
|
119
119
|
@canonical_str = _canonical_str
|
120
120
|
end
|
121
121
|
@canonical_str
|
122
122
|
end
|
123
|
-
|
124
|
-
|
123
|
+
|
124
|
+
|
125
125
|
# Returns the "canonical" hash definition for this coordinate
|
126
126
|
# system, as reported by Proj4. This may be slightly different
|
127
127
|
# from the definition used to construct this object.
|
128
|
-
|
128
|
+
|
129
129
|
def canonical_hash
|
130
130
|
unless defined?(@canonical_hash)
|
131
131
|
@canonical_hash = {}
|
@@ -137,68 +137,68 @@ module RGeo
|
|
137
137
|
end
|
138
138
|
@canonical_hash
|
139
139
|
end
|
140
|
-
|
141
|
-
|
140
|
+
|
141
|
+
|
142
142
|
# Returns the string definition originally used to construct this
|
143
143
|
# object. Returns nil if this object wasn't created by a string
|
144
144
|
# definition; i.e. if it was created using get_geographic.
|
145
|
-
|
145
|
+
|
146
146
|
def original_str
|
147
147
|
_original_str
|
148
148
|
end
|
149
|
-
|
150
|
-
|
149
|
+
|
150
|
+
|
151
151
|
# Returns true if this Proj4 object is a geographic (lat-long)
|
152
152
|
# coordinate system.
|
153
|
-
|
153
|
+
|
154
154
|
def geographic?
|
155
155
|
_geographic?
|
156
156
|
end
|
157
|
-
|
158
|
-
|
157
|
+
|
158
|
+
|
159
159
|
# Returns true if this Proj4 object is a geocentric (3dz)
|
160
160
|
# coordinate system.
|
161
|
-
|
161
|
+
|
162
162
|
def geocentric?
|
163
163
|
_geocentric?
|
164
164
|
end
|
165
|
-
|
166
|
-
|
165
|
+
|
166
|
+
|
167
167
|
# Returns true if this Proj4 object uses radians rather than degrees
|
168
168
|
# if it is a geographic coordinate system.
|
169
|
-
|
169
|
+
|
170
170
|
def radians?
|
171
171
|
_radians?
|
172
172
|
end
|
173
|
-
|
174
|
-
|
173
|
+
|
174
|
+
|
175
175
|
# Get the geographic (unprojected lat-long) coordinate system
|
176
176
|
# corresponding to this coordinate system; i.e. the one that uses
|
177
177
|
# the same ellipsoid and datum.
|
178
|
-
|
178
|
+
|
179
179
|
def get_geographic
|
180
180
|
_get_geographic
|
181
181
|
end
|
182
|
-
|
183
|
-
|
182
|
+
|
183
|
+
|
184
184
|
class << self
|
185
|
-
|
186
|
-
|
185
|
+
|
186
|
+
|
187
187
|
# Returns true if Proj4 is supported in this installation.
|
188
188
|
# If this returns false, the other methods such as create
|
189
189
|
# will not work.
|
190
|
-
|
190
|
+
|
191
191
|
def supported?
|
192
192
|
respond_to?(:_create)
|
193
193
|
end
|
194
|
-
|
195
|
-
|
194
|
+
|
195
|
+
|
196
196
|
# Create a new Proj4 object, given a definition, which may be
|
197
197
|
# either a string or a hash. Returns nil if the given definition
|
198
198
|
# is invalid or Proj4 is not supported.
|
199
|
-
#
|
199
|
+
#
|
200
200
|
# Recognized options include:
|
201
|
-
#
|
201
|
+
#
|
202
202
|
# [<tt>:radians</tt>]
|
203
203
|
# If set to true, then this proj4 will represent geographic
|
204
204
|
# (latitude/longitude) coordinates in radians rather than
|
@@ -209,7 +209,7 @@ module RGeo
|
|
209
209
|
# radians as its units. If this is a geocentric or other type of
|
210
210
|
# coordinate system, this has no effect. Default is false.
|
211
211
|
# (That is all coordinates are in degrees by default.)
|
212
|
-
|
212
|
+
|
213
213
|
def create(defn_, opts_={})
|
214
214
|
result_ = nil
|
215
215
|
if supported?
|
@@ -224,14 +224,14 @@ module RGeo
|
|
224
224
|
end
|
225
225
|
result_
|
226
226
|
end
|
227
|
-
|
228
|
-
|
227
|
+
|
228
|
+
|
229
229
|
# Create a new Proj4 object, given a definition, which may be
|
230
230
|
# either a string or a hash. Raises Error::UnsupportedOperation
|
231
231
|
# if the given definition is invalid or Proj4 is not supported.
|
232
|
-
#
|
232
|
+
#
|
233
233
|
# Recognized options include:
|
234
|
-
#
|
234
|
+
#
|
235
235
|
# [<tt>:radians</tt>]
|
236
236
|
# If set to true, then this proj4 will represent geographic
|
237
237
|
# (latitude/longitude) coordinates in radians rather than
|
@@ -242,7 +242,7 @@ module RGeo
|
|
242
242
|
# radians as its units. If this is a geocentric or other type of
|
243
243
|
# coordinate system, this has no effect. Default is false.
|
244
244
|
# (That is all coordinates are in degrees by default.)
|
245
|
-
|
245
|
+
|
246
246
|
def new(defn_, opts_={})
|
247
247
|
result_ = create(defn_, opts_)
|
248
248
|
unless result_
|
@@ -250,13 +250,13 @@ module RGeo
|
|
250
250
|
end
|
251
251
|
result_
|
252
252
|
end
|
253
|
-
|
254
|
-
|
253
|
+
|
254
|
+
|
255
255
|
# Low-level coordinate transform method.
|
256
256
|
# Transforms the given coordinate (x, y, [z]) from one proj4
|
257
257
|
# coordinate system to another. Returns an array with either two
|
258
258
|
# or three elements.
|
259
|
-
|
259
|
+
|
260
260
|
def transform_coords(from_proj_, to_proj_, x_, y_, z_=nil)
|
261
261
|
if !from_proj_._radians? && from_proj_._geographic?
|
262
262
|
x_ *= ImplHelper::Math::RADIANS_PER_DEGREE
|
@@ -269,14 +269,14 @@ module RGeo
|
|
269
269
|
end
|
270
270
|
result_
|
271
271
|
end
|
272
|
-
|
273
|
-
|
272
|
+
|
273
|
+
|
274
274
|
# Low-level geometry transform method.
|
275
275
|
# Transforms the given geometry between the given two projections.
|
276
276
|
# The resulting geometry is constructed using the to_factory.
|
277
277
|
# Any projections associated with the factories themselves are
|
278
278
|
# ignored.
|
279
|
-
|
279
|
+
|
280
280
|
def transform(from_proj_, from_geometry_, to_proj_, to_factory_)
|
281
281
|
case from_geometry_
|
282
282
|
when Feature::Point
|
@@ -299,8 +299,8 @@ module RGeo
|
|
299
299
|
to_factory_.collection(from_geometry_.map{ |g_| transform(from_proj_, g_, to_proj_, to_factory_) })
|
300
300
|
end
|
301
301
|
end
|
302
|
-
|
303
|
-
|
302
|
+
|
303
|
+
|
304
304
|
def _transform_point(from_proj_, from_point_, to_proj_, to_factory_) # :nodoc:
|
305
305
|
from_factory_ = from_point_.factory
|
306
306
|
from_has_z_ = from_factory_.property(:has_z_coordinate)
|
@@ -327,26 +327,26 @@ module RGeo
|
|
327
327
|
nil
|
328
328
|
end
|
329
329
|
end
|
330
|
-
|
331
|
-
|
330
|
+
|
331
|
+
|
332
332
|
def _transform_linear_ring(from_proj_, from_ring_, to_proj_, to_factory_) # :nodoc:
|
333
333
|
to_factory_.linear_ring(from_ring_.points[0..-2].map{ |p_| _transform_point(from_proj_, p_, to_proj_, to_factory_) })
|
334
334
|
end
|
335
|
-
|
336
|
-
|
335
|
+
|
336
|
+
|
337
337
|
def _transform_polygon(from_proj_, from_polygon_, to_proj_, to_factory_) # :nodoc:
|
338
338
|
ext_ = _transform_linear_ring(from_proj_, from_polygon_.exterior_ring, to_proj_, to_factory_)
|
339
339
|
int_ = from_polygon_.interior_rings.map{ |r_| _transform_linear_ring(from_proj_, r_, to_proj_, to_factory_) }
|
340
340
|
to_factory_.polygon(ext_, int_)
|
341
341
|
end
|
342
|
-
|
343
|
-
|
342
|
+
|
343
|
+
|
344
344
|
end
|
345
|
-
|
346
|
-
|
345
|
+
|
346
|
+
|
347
347
|
end
|
348
|
-
|
349
|
-
|
348
|
+
|
349
|
+
|
350
350
|
end
|
351
|
-
|
351
|
+
|
352
352
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
# -----------------------------------------------------------------------------
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# SRS database interface
|
4
|
-
#
|
4
|
+
#
|
5
5
|
# -----------------------------------------------------------------------------
|
6
|
-
# Copyright 2010 Daniel Azuma
|
7
|
-
#
|
6
|
+
# Copyright 2010-2012 Daniel Azuma
|
7
|
+
#
|
8
8
|
# All rights reserved.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# Redistribution and use in source and binary forms, with or without
|
11
11
|
# modification, are permitted provided that the following conditions are met:
|
12
|
-
#
|
12
|
+
#
|
13
13
|
# * Redistributions of source code must retain the above copyright notice,
|
14
14
|
# this list of conditions and the following disclaimer.
|
15
15
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
@@ -18,7 +18,7 @@
|
|
18
18
|
# * Neither the name of the copyright holder, nor the names of any other
|
19
19
|
# contributors to this software, may be used to endorse or promote products
|
20
20
|
# derived from this software without specific prior written permission.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
23
23
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
24
24
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
@@ -35,26 +35,26 @@
|
|
35
35
|
|
36
36
|
|
37
37
|
module RGeo
|
38
|
-
|
38
|
+
|
39
39
|
module CoordSys
|
40
|
-
|
40
|
+
|
41
41
|
module SRSDatabase
|
42
|
-
|
43
|
-
|
42
|
+
|
43
|
+
|
44
44
|
# A spatial reference database implementation that uses ActiveRecord
|
45
45
|
# to access a spatial reference table provided by a spatial database
|
46
46
|
# implementation. You can use this class to obtain coordinate system
|
47
47
|
# information from your installation of, e.g. PostGIS.
|
48
|
-
|
48
|
+
|
49
49
|
class ActiveRecordTable
|
50
|
-
|
50
|
+
|
51
51
|
@@class_counter = 0
|
52
|
-
|
53
|
-
|
52
|
+
|
53
|
+
|
54
54
|
# Create a new ActiveRecord-backed database connection.
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# Options include:
|
57
|
-
#
|
57
|
+
#
|
58
58
|
# [<tt>:ar_class</tt>]
|
59
59
|
# An ActiveRecord class to use. You may provide this if you
|
60
60
|
# already have an ActiveRecord class that accesses the table.
|
@@ -109,7 +109,7 @@ module RGeo
|
|
109
109
|
# If set to true, entries are cached when first retrieved, so
|
110
110
|
# subsequent requests do not have to make a database round trip.
|
111
111
|
# Default is false.
|
112
|
-
#
|
112
|
+
#
|
113
113
|
# Some option settings may be provided by the ActiveRecord
|
114
114
|
# connection adapter, if the ActiveRecord class's connection uses
|
115
115
|
# an adapter that is RGeo-savvy. The "postgis" and "spatialite"
|
@@ -118,7 +118,7 @@ module RGeo
|
|
118
118
|
# the database-provided spatial reference table as defaults.
|
119
119
|
# However, you can still override those settings if you want to
|
120
120
|
# use a custom table.
|
121
|
-
|
121
|
+
|
122
122
|
def initialize(opts_={})
|
123
123
|
@cache = opts_[:cache] ? {} : nil
|
124
124
|
@ar_class = opts_[:ar_class]
|
@@ -148,10 +148,10 @@ module RGeo
|
|
148
148
|
@srtext_column = opts_[:srtext_column]
|
149
149
|
@proj4text_column = opts_[:proj4text_column]
|
150
150
|
end
|
151
|
-
|
152
|
-
|
151
|
+
|
152
|
+
|
153
153
|
# Retrieve an Entry given an integer SRID.
|
154
|
-
|
154
|
+
|
155
155
|
def get(ident_)
|
156
156
|
ident_ = ident_.to_i
|
157
157
|
return @cache[ident_] if @cache && @cache.include?(ident_)
|
@@ -175,20 +175,20 @@ module RGeo
|
|
175
175
|
@cache[ident_] = result_ if @cache
|
176
176
|
result_
|
177
177
|
end
|
178
|
-
|
179
|
-
|
178
|
+
|
179
|
+
|
180
180
|
# Clears the cache if a cache is active.
|
181
|
-
|
181
|
+
|
182
182
|
def clear_cache
|
183
183
|
@cache.clear if @cache
|
184
184
|
end
|
185
|
-
|
186
|
-
|
185
|
+
|
186
|
+
|
187
187
|
end
|
188
|
-
|
189
|
-
|
188
|
+
|
189
|
+
|
190
190
|
end
|
191
|
-
|
191
|
+
|
192
192
|
end
|
193
|
-
|
193
|
+
|
194
194
|
end
|