Class: RGeo::Geographic::SimpleMercatorProjector
- Inherits:
-
Object
- Object
- RGeo::Geographic::SimpleMercatorProjector
- Defined in:
- lib/rgeo/geographic/simple_mercator_projector.rb
Overview
:nodoc:
Constant Summary collapse
- EQUATORIAL_RADIUS =
6_378_137.0
Instance Attribute Summary collapse
-
#projection_factory ⇒ Object
readonly
Returns the value of attribute projection_factory.
Class Method Summary collapse
-
._coordsys_3857 ⇒ Object
:nodoc:.
-
._proj4_3857 ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#_set_factories(geography_factory_, projection_factory_) ⇒ Object
:nodoc:.
-
#initialize(geography_factory_, opts_ = {}) ⇒ SimpleMercatorProjector
constructor
A new instance of SimpleMercatorProjector.
- #limits_window ⇒ Object
- #project(geometry_) ⇒ Object
- #unproject(geometry_) ⇒ Object
- #wraps? ⇒ Boolean
Constructor Details
#initialize(geography_factory_, opts_ = {}) ⇒ SimpleMercatorProjector
Returns a new instance of SimpleMercatorProjector.
12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 12 def initialize(geography_factory_, opts_ = {}) @geography_factory = geography_factory_ @projection_factory = Cartesian.preferred_factory(srid: 3857, proj4: SimpleMercatorProjector._proj4_3857, coord_sys: SimpleMercatorProjector._coordsys_3857, buffer_resolution: opts_[:buffer_resolution], lenient_multi_polygon_assertions: opts_[:lenient_multi_polygon_assertions], uses_lenient_assertions: opts_[:uses_lenient_assertions], has_z_coordinate: opts_[:has_z_coordinate], has_m_coordinate: opts_[:has_m_coordinate]) end |
Instance Attribute Details
#projection_factory ⇒ Object (readonly)
Returns the value of attribute projection_factory.
29 30 31 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 29 def projection_factory @projection_factory end |
Class Method Details
._coordsys_3857 ⇒ Object
:nodoc:
102 103 104 105 106 107 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 102 def self._coordsys_3857 # :nodoc: unless defined?(@coordsys_3857) @coordsys_3857 = 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]]') end @coordsys_3857 end |
._proj4_3857 ⇒ Object
:nodoc:
95 96 97 98 99 100 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 95 def self._proj4_3857 # :nodoc: unless defined?(@proj4_3857) @proj4_3857 = 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") end @proj4_3857 end |
Instance Method Details
#_set_factories(geography_factory_, projection_factory_) ⇒ Object
:nodoc:
24 25 26 27 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 24 def _set_factories(geography_factory_, projection_factory_) # :nodoc: @geography_factory = geography_factory_ @projection_factory = projection_factory_ end |
#limits_window ⇒ Object
89 90 91 92 93 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 89 def limits_window @limits_window ||= ProjectedWindow.new(@geography_factory, -20_037_508.342789, -20_037_508.342789, 20_037_508.342789, 20_037_508.342789, is_limits: true) end |
#project(geometry_) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 31 def project(geometry_) case geometry_ when Feature::Point rpd_ = ImplHelper::Math::RADIANS_PER_DEGREE radius_ = EQUATORIAL_RADIUS @projection_factory.point(geometry_.x * rpd_ * radius_, ::Math.log(::Math.tan(::Math::PI / 4.0 + geometry_.y * rpd_ / 2.0)) * radius_) when Feature::Line @projection_factory.line(project(geometry_.start_point), project(geometry_.end_point)) when Feature::LinearRing @projection_factory.linear_ring(geometry_.points.map { |p_| project(p_) }) when Feature::LineString @projection_factory.line_string(geometry_.points.map { |p_| project(p_) }) when Feature::Polygon @projection_factory.polygon(project(geometry_.exterior_ring), geometry_.interior_rings.map { |p_| project(p_) }) when Feature::MultiPoint @projection_factory.multi_point(geometry_.map { |p_| project(p_) }) when Feature::MultiLineString @projection_factory.multi_line_string(geometry_.map { |p_| project(p_) }) when Feature::MultiPolygon @projection_factory.multi_polygon(geometry_.map { |p_| project(p_) }) when Feature::GeometryCollection @projection_factory.collection(geometry_.map { |p_| project(p_) }) end end |
#unproject(geometry_) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 58 def unproject(geometry_) case geometry_ when Feature::Point dpr_ = ImplHelper::Math::DEGREES_PER_RADIAN radius_ = EQUATORIAL_RADIUS @geography_factory.point(geometry_.x / radius_ * dpr_, (2.0 * ::Math.atan(::Math.exp(geometry_.y / radius_)) - ::Math::PI / 2.0) * dpr_) when Feature::Line @geography_factory.line(unproject(geometry_.start_point), unproject(geometry_.end_point)) when Feature::LinearRing @geography_factory.linear_ring(geometry_.points.map { |p_| unproject(p_) }) when Feature::LineString @geography_factory.line_string(geometry_.points.map { |p_| unproject(p_) }) when Feature::Polygon @geography_factory.polygon(unproject(geometry_.exterior_ring), geometry_.interior_rings.map { |p_| unproject(p_) }) when Feature::MultiPoint @geography_factory.multi_point(geometry_.map { |p_| unproject(p_) }) when Feature::MultiLineString @geography_factory.multi_line_string(geometry_.map { |p_| unproject(p_) }) when Feature::MultiPolygon @geography_factory.multi_polygon(geometry_.map { |p_| unproject(p_) }) when Feature::GeometryCollection @geography_factory.collection(geometry_.map { |p_| unproject(p_) }) end end |
#wraps? ⇒ Boolean
85 86 87 |
# File 'lib/rgeo/geographic/simple_mercator_projector.rb', line 85 def wraps? true end |