rgeo 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -82,7 +82,7 @@ module RGeo
82
82
 
83
83
 
84
84
  def create_from_proj4(geography_factory_, proj4_, opts_={})
85
- projection_factory_ = Cartesian.preferred_factory(:proj4 => proj4_, :srid => opts_[:srid], :buffer_resolution => opts_[:buffer_resolution], :lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions], :has_z_coordinate => opts_[:has_z_coordinate], :has_m_coordinate => opts_[:has_m_coordinate])
85
+ projection_factory_ = Cartesian.preferred_factory(:proj4 => proj4_, :coord_sys => opts_[:coord_sys], :srid => opts_[:srid], :buffer_resolution => opts_[:buffer_resolution], :lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions], :has_z_coordinate => opts_[:has_z_coordinate], :has_m_coordinate => opts_[:has_m_coordinate])
86
86
  new(geography_factory_, projection_factory_)
87
87
  end
88
88
 
@@ -46,7 +46,7 @@ module RGeo
46
46
 
47
47
  def initialize(geography_factory_, opts_={})
48
48
  @geography_factory = geography_factory_
49
- @projection_factory = Cartesian.preferred_factory(:srid => 3857, :proj4 => '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', :buffer_resolution => opts_[:buffer_resolution], :lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions], :has_z_coordinate => opts_[:has_z_coordinate], :has_m_coordinate => opts_[:has_m_coordinate])
49
+ @projection_factory = Cartesian.preferred_factory(:srid => 3785, :proj4 => SimpleMercatorProjector._proj4_3785, :coord_sys => SimpleMercatorProjector._coordsys_3785, :buffer_resolution => opts_[:buffer_resolution], :lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions], :has_z_coordinate => opts_[:has_z_coordinate], :has_m_coordinate => opts_[:has_m_coordinate])
50
50
  end
51
51
 
52
52
 
@@ -125,6 +125,22 @@ module RGeo
125
125
  end
126
126
 
127
127
 
128
+ def self._proj4_3785 # :nodoc:
129
+ unless defined?(@proj4_3785)
130
+ @proj4_3785 = CoordSys::Proj4.create('+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs')
131
+ end
132
+ @proj4_3785
133
+ end
134
+
135
+
136
+ def self._coordsys_3785 # :nodoc:
137
+ unless defined?(@coordsys_3785)
138
+ @coordsys_3785 = CoordSys::CS.create_from_wkt('PROJCS["Popular Visualisation CRS / Mercator",GEOGCS["Popular Visualisation CRS",DATUM["Popular_Visualisation_Datum",SPHEROID["Popular Visualisation Sphere",6378137,0,AUTHORITY["EPSG","7059"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6055"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4055"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],AUTHORITY["EPSG","3785"],AXIS["X",EAST],AXIS["Y",NORTH]]')
139
+ end
140
+ @coordsys_3785
141
+ end
142
+
143
+
128
144
  end
129
145
 
130
146
 
@@ -66,6 +66,7 @@ module RGeo
66
66
  end
67
67
  buffer_resolution_ = opts_[:buffer_resolution].to_i
68
68
  buffer_resolution_ = 1 if buffer_resolution_ < 1
69
+ srid_ = opts_[:srid]
69
70
  proj4_ = opts_[:proj4]
70
71
  if CoordSys::Proj4.supported?
71
72
  if proj4_.kind_of?(::String) || proj4_.kind_of?(::Hash)
@@ -78,7 +79,15 @@ module RGeo
78
79
  if coord_sys_.kind_of?(::String)
79
80
  coord_sys_ = CoordSys::CS.create_from_wkt(coord_sys_) rescue nil
80
81
  end
81
- result_ = _create(flags_, opts_[:srid].to_i, buffer_resolution_)
82
+ if (!proj4_ || !coord_sys_) && srid_ && (db_ = opts_[:srs_database])
83
+ entry_ = db_.get(srid_.to_i)
84
+ if entry_
85
+ proj4_ ||= entry_.proj4
86
+ coord_sys_ ||= entry_.coord_sys
87
+ end
88
+ end
89
+ srid_ ||= coord_sys_.authority_code if coord_sys_
90
+ result_ = _create(flags_, srid_.to_i, buffer_resolution_)
82
91
  result_.instance_variable_set(:@proj4, proj4_)
83
92
  result_.instance_variable_set(:@coord_sys, coord_sys_)
84
93
  result_
@@ -88,6 +88,19 @@ module RGeo
88
88
  # <tt>:srid</tt>::
89
89
  # Set the SRID returned by geometries created by this factory.
90
90
  # Default is 0.
91
+ # <tt>:proj4</tt>::
92
+ # The coordinate system in Proj4 format, either as a
93
+ # CoordSys::Proj4 object or as a string or hash representing the
94
+ # proj4 format. Optional.
95
+ # <tt>:coord_sys</tt>::
96
+ # The coordinate system in OGC form, either as a subclass of
97
+ # CoordSys::CS::CoordinateSystem, or as a string in WKT format.
98
+ # Optional.
99
+ # <tt>:srs_database</tt>::
100
+ # Optional. If provided, the value should be an implementation of
101
+ # CoordSys::SRSDatabase::Interface. If both this and an SRID are
102
+ # provided, they are used to look up the proj4 and coord_sys
103
+ # objects from a spatial reference system database.
91
104
  # <tt>:has_z_coordinate</tt>::
92
105
  # Support <tt>z_coordinate</tt>. Default is false.
93
106
  # <tt>:has_m_coordinate</tt>::
@@ -106,6 +119,19 @@ module RGeo
106
119
  end
107
120
 
108
121
 
122
+ # Returns a Feature::FactoryGenerator that creates Geos-backed
123
+ # factories. The given options are used as the default options.
124
+ #
125
+ # A common case for this is to provide the <tt>:srs_database</tt>
126
+ # as a default. Then, the factory generator need only be passed
127
+ # an SRID and it will automatically fetch the appropriate Proj4
128
+ # and CoordSys objects.
129
+
130
+ def factory_generator(defaults_={})
131
+ ::Proc.new{ |c_| factory(defaults_.merge(c_)) }
132
+ end
133
+
134
+
109
135
  end
110
136
 
111
137
  end
@@ -62,8 +62,24 @@ module RGeo
62
62
 
63
63
 
64
64
  def initialize(opts_={}) # :nodoc:
65
- @zfactory = Factory.create(:has_z_coordinate => true, :lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions], :buffer_resolution => opts_[:buffer_resolution], :srid => opts_[:srid], :proj4 => opts_[:proj4])
66
- @mfactory = Factory.create(:has_m_coordinate => true, :lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions], :buffer_resolution => opts_[:buffer_resolution], :srid => opts_[:srid], :proj4 => opts_[:proj4])
65
+ proj4_ = opts_[:proj4]
66
+ coord_sys_ = opts_[:coord_sys]
67
+ srid_ = opts_[:srid]
68
+ if (!proj4_ || !coord_sys_) && srid_ && (db_ = opts_[:srs_database])
69
+ entry_ = db_.get(srid_.to_i)
70
+ if entry_
71
+ proj4_ ||= entry_.proj4
72
+ coord_sys_ ||= entry_.coord_sys
73
+ end
74
+ end
75
+ srid_ ||= coord_sys_.authority_code if coord_sys_
76
+ config_ = {
77
+ :lenient_multi_polygon_assertions => opts_[:lenient_multi_polygon_assertions],
78
+ :buffer_resolution => opts_[:buffer_resolution],
79
+ :srid => srid_.to_i, :proj4 => proj4_, :coord_sys => coord_sys_,
80
+ }
81
+ @zfactory = Factory.create(config_.merge(:has_z_coordinate => true))
82
+ @mfactory = Factory.create(config_.merge(:has_m_coordinate => true))
67
83
  end
68
84
 
69
85
 
@@ -45,11 +45,16 @@ module RGeo
45
45
  module ActiveRecordTableTests # :nodoc:
46
46
 
47
47
  database_configs_ = ::YAML.load_file(::File.dirname(__FILE__)+'/database.yml') rescue nil
48
+ if database_configs_
49
+ begin
50
+ require 'active_record'
51
+ rescue ::LoadError
52
+ database_configs_ = nil
53
+ end
54
+ end
48
55
 
49
56
  if database_configs_
50
57
 
51
- require 'active_record'
52
-
53
58
  PostGIS_CONFIG = database_configs_['postgis'] rescue nil
54
59
 
55
60
 
@@ -88,7 +93,7 @@ module RGeo
88
93
 
89
94
 
90
95
  else
91
- puts "WARNING: Couldn't find database.yml; skipping ActiveRecord tests."
96
+ puts "WARNING: Couldn't find database.yml or ActiveRecord gem is not present; skipping ActiveRecord tests."
92
97
  end
93
98
 
94
99
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 2
9
- version: 0.2.2
8
+ - 3
9
+ version: 0.2.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Daniel Azuma
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-15 00:00:00 -08:00
17
+ date: 2010-12-19 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies: []
20
20