proj4rb 3.0.0 → 4.0.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 +4 -4
- data/ChangeLog +26 -15
- data/README.rdoc +82 -44
- data/Rakefile +27 -27
- data/lib/api/api.rb +96 -118
- data/lib/api/api_5_0.rb +331 -300
- data/lib/api/api_5_1.rb +6 -6
- data/lib/api/api_5_2.rb +4 -4
- data/lib/api/api_6_0.rb +116 -14
- data/lib/api/api_6_1.rb +4 -4
- data/lib/api/api_6_2.rb +9 -6
- data/lib/api/api_6_3.rb +6 -0
- data/lib/api/api_7_0.rb +68 -0
- data/lib/api/api_7_1.rb +73 -0
- data/lib/api/api_7_2.rb +14 -0
- data/lib/api/api_8_0.rb +6 -0
- data/lib/api/api_8_1.rb +24 -0
- data/lib/api/api_8_2.rb +6 -0
- data/lib/api/api_9_1.rb +7 -0
- data/lib/api/api_9_2.rb +9 -0
- data/lib/api/api_experimental.rb +196 -0
- data/lib/proj/area.rb +73 -32
- data/lib/proj/axis_info.rb +44 -0
- data/lib/proj/bounds.rb +13 -0
- data/lib/proj/context.rb +174 -28
- data/lib/proj/conversion.rb +92 -0
- data/lib/proj/coordinate.rb +281 -197
- data/lib/proj/coordinate_operation_mixin.rb +381 -0
- data/lib/proj/coordinate_system.rb +137 -0
- data/lib/proj/crs.rb +672 -204
- data/lib/proj/crs_info.rb +47 -0
- data/lib/proj/database.rb +305 -0
- data/lib/proj/datum.rb +32 -0
- data/lib/proj/datum_ensemble.rb +34 -0
- data/lib/proj/ellipsoid.rb +77 -41
- data/lib/proj/error.rb +62 -9
- data/lib/proj/file_api.rb +166 -0
- data/lib/proj/grid.rb +121 -0
- data/lib/proj/grid_cache.rb +64 -0
- data/lib/proj/grid_info.rb +19 -0
- data/lib/proj/network_api.rb +92 -0
- data/lib/proj/operation.rb +42 -42
- data/lib/proj/operation_factory_context.rb +136 -0
- data/lib/proj/parameter.rb +38 -0
- data/lib/proj/parameters.rb +106 -0
- data/lib/proj/pj_object.rb +670 -80
- data/lib/proj/pj_objects.rb +44 -0
- data/lib/proj/prime_meridian.rb +65 -39
- data/lib/proj/projection.rb +698 -207
- data/lib/proj/session.rb +46 -0
- data/lib/proj/strings.rb +32 -0
- data/lib/proj/transformation.rb +101 -60
- data/lib/proj/unit.rb +108 -53
- data/lib/proj.rb +110 -9
- data/proj4rb.gemspec +5 -5
- data/test/abstract_test.rb +23 -1
- data/test/context_test.rb +172 -82
- data/test/conversion_test.rb +368 -0
- data/test/coordinate_system_test.rb +144 -0
- data/test/crs_test.rb +770 -71
- data/test/database_test.rb +360 -0
- data/test/datum_ensemble_test.rb +65 -0
- data/test/datum_test.rb +55 -0
- data/test/ellipsoid_test.rb +64 -18
- data/test/file_api_test.rb +66 -0
- data/test/grid_cache_test.rb +72 -0
- data/test/grid_test.rb +141 -0
- data/test/network_api_test.rb +45 -0
- data/test/operation_factory_context_test.rb +201 -0
- data/test/parameters_test.rb +40 -0
- data/test/pj_object_test.rb +179 -0
- data/test/prime_meridian_test.rb +76 -0
- data/test/proj_test.rb +46 -4
- data/test/projection_test.rb +646 -222
- data/test/session_test.rb +78 -0
- data/test/transformation_test.rb +149 -7
- data/test/unit_test.rb +57 -28
- metadata +51 -13
- data/lib/api/api_4_9.rb +0 -31
- data/lib/proj/config.rb +0 -70
- data/lib/proj/point.rb +0 -72
- data/test/prime_meridians_test.rb +0 -33
    
        data/test/crs_test.rb
    CHANGED
    
    | @@ -47,12 +47,94 @@ class CrsTest < AbstractTest | |
| 47 47 | 
             
                assert_equal('+proj=longlat +datum=WGS84 +no_defs +type=crs', crs.to_proj_string)
         | 
| 48 48 | 
             
              end
         | 
| 49 49 |  | 
| 50 | 
            +
              def test_create_from_wkt_2
         | 
| 51 | 
            +
                wkt = <<~EOS
         | 
| 52 | 
            +
                  GEOGCRS["WGS 84",
         | 
| 53 | 
            +
                      DATUM["World Geodetic System 1984",
         | 
| 54 | 
            +
                          ELLIPSOID["WGS 84",6378137,298.257223563,
         | 
| 55 | 
            +
                              LENGTHUNIT["metre",1]]],
         | 
| 56 | 
            +
                      PRIMEM["Greenwich",0,
         | 
| 57 | 
            +
                          ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 58 | 
            +
                      CS[ellipsoidal,2],
         | 
| 59 | 
            +
                          AXIS["geodetic latitude (Lat)",north,
         | 
| 60 | 
            +
                              ORDER[1],
         | 
| 61 | 
            +
                              ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 62 | 
            +
                          AXIS["geodetic longitude (Lon)",east,
         | 
| 63 | 
            +
                              ORDER[2],
         | 
| 64 | 
            +
                              ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 65 | 
            +
                      USAGE[
         | 
| 66 | 
            +
                          SCOPE["unknown"],
         | 
| 67 | 
            +
                          AREA["World"],
         | 
| 68 | 
            +
                          BBOX[-90,-180,90,180]],
         | 
| 69 | 
            +
                      ID["EPSG",4326]]
         | 
| 70 | 
            +
                EOS
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                crs = Proj::Crs.create_from_wkt(wkt)
         | 
| 73 | 
            +
                assert_equal(:PJ_TYPE_GEOGRAPHIC_2D_CRS, crs.proj_type)
         | 
| 74 | 
            +
                assert_equal(wkt.strip, crs.to_wkt)
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
              def test_create_from_wkt_warning
         | 
| 78 | 
            +
                wkt = <<~EOS
         | 
| 79 | 
            +
                      PROJCS["test",
         | 
| 80 | 
            +
                        GEOGCS["WGS 84",
         | 
| 81 | 
            +
                          DATUM["WGS_1984",
         | 
| 82 | 
            +
                              SPHEROID["WGS 84",6378137,298.257223563]],
         | 
| 83 | 
            +
                          PRIMEM["Greenwich",0],
         | 
| 84 | 
            +
                          UNIT["degree",0.0174532925199433]],
         | 
| 85 | 
            +
                        PROJECTION["Transverse_Mercator"],
         | 
| 86 | 
            +
                        PARAMETER["latitude_of_origi",31],
         | 
| 87 | 
            +
                        UNIT["metre",1]]"
         | 
| 88 | 
            +
                      EOS
         | 
| 89 | 
            +
                wkt.strip!
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                crs = nil
         | 
| 92 | 
            +
                _, err = capture_io do
         | 
| 93 | 
            +
                  crs = Proj::Crs.create_from_wkt(wkt)
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                expected = "Cannot find expected parameter Latitude of natural origin. Cannot find expected parameter Longitude of natural origin. Cannot find expected parameter False easting. Cannot find expected parameter False northing. Parameter latitude_of_origi found but not expected for this method. The WKT string lacks a value for Scale factor at natural origin. Default it to 1."
         | 
| 97 | 
            +
                assert_equal(expected, err.strip)
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                assert_equal(:PJ_TYPE_PROJECTED_CRS, crs.proj_type)
         | 
| 100 | 
            +
              end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
              def test_create_from_wkt_error
         | 
| 103 | 
            +
                wkt = <<~EOS
         | 
| 104 | 
            +
                  GEOGCS[test,
         | 
| 105 | 
            +
                       DATUM[test,
         | 
| 106 | 
            +
                          SPHEROID[test,0,298.257223563,unused]],
         | 
| 107 | 
            +
                      PRIMEM[Greenwich,0],
         | 
| 108 | 
            +
                      UNIT[degree,0.0174532925199433]]
         | 
| 109 | 
            +
                EOS
         | 
| 110 | 
            +
                wkt.strip!
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                error = assert_raises(RuntimeError) do
         | 
| 113 | 
            +
                  Proj::Crs.create_from_wkt(wkt)
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                expected = <<~EOS
         | 
| 117 | 
            +
                             Parsing error : syntax error, unexpected identifier, expecting string. Error occurred around:
         | 
| 118 | 
            +
                             GEOGCS[test,
         | 
| 119 | 
            +
                                    ^
         | 
| 120 | 
            +
                           EOS
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                assert_equal(expected.strip, error.to_s)
         | 
| 123 | 
            +
              end
         | 
| 124 | 
            +
             | 
| 50 125 | 
             
              def test_create_from_proj4
         | 
| 51 126 | 
             
                crs = Proj::Crs.new('+proj=longlat +datum=WGS84 +no_defs +type=crs')
         | 
| 52 127 | 
             
                assert_equal(:PJ_TYPE_GEOGRAPHIC_2D_CRS, crs.proj_type)
         | 
| 53 128 | 
             
                assert_equal('+proj=longlat +datum=WGS84 +no_defs +type=crs', crs.to_proj_string)
         | 
| 54 129 | 
             
              end
         | 
| 55 130 |  | 
| 131 | 
            +
              def test_create_from_database
         | 
| 132 | 
            +
                crs = Proj::Crs.create_from_database("EPSG", "4326", :PJ_CATEGORY_CRS)
         | 
| 133 | 
            +
                assert_equal(:PJ_TYPE_GEOGRAPHIC_2D_CRS, crs.proj_type)
         | 
| 134 | 
            +
                assert_equal("4326", crs.id_code)
         | 
| 135 | 
            +
                assert_equal('+proj=longlat +datum=WGS84 +no_defs +type=crs', crs.to_proj_string)
         | 
| 136 | 
            +
              end
         | 
| 137 | 
            +
             | 
| 56 138 | 
             
              def test_compound
         | 
| 57 139 | 
             
                crs = Proj::Crs.new('EPSG:2393+5717')
         | 
| 58 140 | 
             
                assert_equal(:PJ_TYPE_COMPOUND_CRS, crs.proj_type)
         | 
| @@ -71,7 +153,7 @@ class CrsTest < AbstractTest | |
| 71 153 | 
             
              end
         | 
| 72 154 |  | 
| 73 155 | 
             
              def test_finalize
         | 
| 74 | 
            -
                 | 
| 156 | 
            +
                100.times do
         | 
| 75 157 | 
             
                  crs = Proj::Crs.new('EPSG:4326')
         | 
| 76 158 | 
             
                  assert(crs.to_ptr)
         | 
| 77 159 | 
             
                  GC.start
         | 
| @@ -87,82 +169,286 @@ class CrsTest < AbstractTest | |
| 87 169 | 
             
              end
         | 
| 88 170 |  | 
| 89 171 | 
             
              def test_datum
         | 
| 90 | 
            -
             | 
| 172 | 
            +
              wkt = <<~EOS
         | 
| 173 | 
            +
                    PROJCS["WGS 84 / UTM zone 31N",
         | 
| 174 | 
            +
                        GEOGCS["WGS 84",
         | 
| 175 | 
            +
                            DATUM["WGS_1984",
         | 
| 176 | 
            +
                                SPHEROID["WGS 84",6378137,298.257223563,
         | 
| 177 | 
            +
                                    AUTHORITY["EPSG","7030"]],
         | 
| 178 | 
            +
                                AUTHORITY["EPSG","6326"]],
         | 
| 179 | 
            +
                            PRIMEM["Greenwich",0,
         | 
| 180 | 
            +
                                AUTHORITY["EPSG","8901"]],
         | 
| 181 | 
            +
                            UNIT["degree",0.0174532925199433,
         | 
| 182 | 
            +
                                AUTHORITY["EPSG","9122"]],
         | 
| 183 | 
            +
                            AUTHORITY["EPSG","4326"]],
         | 
| 184 | 
            +
                        PROJECTION["Transverse_Mercator"],
         | 
| 185 | 
            +
                        PARAMETER["latitude_of_origin",0],
         | 
| 186 | 
            +
                        PARAMETER["central_meridian",3],
         | 
| 187 | 
            +
                        PARAMETER["scale_factor",0.9996],
         | 
| 188 | 
            +
                        PARAMETER["false_easting",500000],
         | 
| 189 | 
            +
                        PARAMETER["false_northing",0],
         | 
| 190 | 
            +
                        UNIT["metre",1,
         | 
| 191 | 
            +
                            AUTHORITY["EPSG","9001"]],
         | 
| 192 | 
            +
                        AXIS["Easting",EAST],
         | 
| 193 | 
            +
                        AXIS["Northing",NORTH],
         | 
| 194 | 
            +
                        AUTHORITY["EPSG","32631"]]
         | 
| 195 | 
            +
                  EOS
         | 
| 196 | 
            +
             | 
| 197 | 
            +
                crs = Proj::Crs.create_from_wkt(wkt)
         | 
| 91 198 | 
             
                datum = crs.datum
         | 
| 92 199 | 
             
                assert_equal(:PJ_TYPE_GEODETIC_REFERENCE_FRAME, datum.proj_type)
         | 
| 93 200 | 
             
              end
         | 
| 94 201 |  | 
| 95 | 
            -
              def  | 
| 96 | 
            -
                 | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 202 | 
            +
              def test_datum_forced
         | 
| 203 | 
            +
                wkt = <<~EOS
         | 
| 204 | 
            +
                       GEOGCRS["ETRS89",
         | 
| 205 | 
            +
                         ENSEMBLE["European Terrestrial Reference System 1989 ensemble",
         | 
| 206 | 
            +
                             MEMBER["European Terrestrial Reference Frame 1989"],
         | 
| 207 | 
            +
                             MEMBER["European Terrestrial Reference Frame 1990"],
         | 
| 208 | 
            +
                             MEMBER["European Terrestrial Reference Frame 1991"],
         | 
| 209 | 
            +
                             MEMBER["European Terrestrial Reference Frame 1992"],
         | 
| 210 | 
            +
                             MEMBER["European Terrestrial Reference Frame 1993"],
         | 
| 211 | 
            +
                             MEMBER["European Terrestrial Reference Frame 1994"],
         | 
| 212 | 
            +
                             MEMBER["European Terrestrial Reference Frame 1996"],
         | 
| 213 | 
            +
                             MEMBER["European Terrestrial Reference Frame 1997"],
         | 
| 214 | 
            +
                             MEMBER["European Terrestrial Reference Frame 2000"],
         | 
| 215 | 
            +
                             MEMBER["European Terrestrial Reference Frame 2005"],
         | 
| 216 | 
            +
                             MEMBER["European Terrestrial Reference Frame 2014"],
         | 
| 217 | 
            +
                             ELLIPSOID["GRS 1980",6378137,298.257222101,
         | 
| 218 | 
            +
                                 LENGTHUNIT["metre",1]],
         | 
| 219 | 
            +
                             ENSEMBLEACCURACY[0.1]],  
         | 
| 220 | 
            +
                         PRIMEM["Greenwich",0,
         | 
| 221 | 
            +
                             ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 222 | 
            +
                         CS[ellipsoidal,2],
         | 
| 223 | 
            +
                             AXIS["geodetic latitude (Lat)",north,
         | 
| 224 | 
            +
                                 ORDER[1],
         | 
| 225 | 
            +
                                 ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 226 | 
            +
                             AXIS["geodetic longitude (Lon)",east,
         | 
| 227 | 
            +
                                 ORDER[2],
         | 
| 228 | 
            +
                                 ANGLEUNIT["degree",0.0174532925199433]]]
         | 
| 229 | 
            +
                EOS
         | 
| 100 230 |  | 
| 101 | 
            -
             | 
| 102 | 
            -
                 | 
| 103 | 
            -
                 | 
| 104 | 
            -
                assert_equal(:PJ_TYPE_UNKNOWN, cs.proj_type)
         | 
| 231 | 
            +
                crs = Proj::Crs.create(wkt)
         | 
| 232 | 
            +
                datum = crs.datum_forced
         | 
| 233 | 
            +
                assert_equal("European Terrestrial Reference System 1989", datum.name)
         | 
| 105 234 | 
             
              end
         | 
| 106 235 |  | 
| 107 | 
            -
              def  | 
| 236 | 
            +
              def test_horizontal_datum
         | 
| 108 237 | 
             
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 109 | 
            -
                 | 
| 110 | 
            -
                assert_equal( | 
| 238 | 
            +
                datum = crs.horizontal_datum
         | 
| 239 | 
            +
                assert_equal(:PJ_TYPE_DATUM_ENSEMBLE, datum.proj_type)
         | 
| 240 | 
            +
                assert_equal("World Geodetic System 1984 ensemble", datum.name)
         | 
| 111 241 | 
             
              end
         | 
| 112 242 |  | 
| 113 | 
            -
              def  | 
| 114 | 
            -
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 115 | 
            -
                info = crs.axis_info
         | 
| 116 | 
            -
                expected = [{:name=>"Geodetic latitude",
         | 
| 117 | 
            -
                             :abbreviation=>"Lat",
         | 
| 118 | 
            -
                             :direction=>"north",
         | 
| 119 | 
            -
                             :unit_conv_factor=>0.017453292519943295,
         | 
| 120 | 
            -
                             :unit_name=>"degree",
         | 
| 121 | 
            -
                             :unit_auth_name=>"EPSG",
         | 
| 122 | 
            -
                             :unit_code=>"9122"},
         | 
| 123 | 
            -
                            {:name=>"Geodetic longitude",
         | 
| 124 | 
            -
                             :abbreviation=>"Lon",
         | 
| 125 | 
            -
                             :direction=>"east",
         | 
| 126 | 
            -
                             :unit_conv_factor=>0.017453292519943295,
         | 
| 127 | 
            -
                             :unit_name=>"degree",
         | 
| 128 | 
            -
                             :unit_auth_name=>"EPSG",
         | 
| 129 | 
            -
                             :unit_code=>"9122"}]
         | 
| 130 | 
            -
             | 
| 131 | 
            -
                assert_equal(expected, info)
         | 
| 132 | 
            -
              end
         | 
| 133 | 
            -
             | 
| 134 | 
            -
              def test_crs_type
         | 
| 243 | 
            +
              def test_coordinate_system
         | 
| 135 244 | 
             
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 136 | 
            -
                 | 
| 137 | 
            -
                assert_equal(:PJ_CS_TYPE_ELLIPSOIDAL, crs_type)
         | 
| 245 | 
            +
                assert(crs.coordinate_system)
         | 
| 138 246 | 
             
              end
         | 
| 139 247 |  | 
| 140 248 | 
             
              def test_ellipsoid
         | 
| 141 249 | 
             
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 142 250 | 
             
                ellipsoid = crs.ellipsoid
         | 
| 251 | 
            +
                assert_instance_of(Proj::Ellipsoid, ellipsoid)
         | 
| 143 252 | 
             
                assert_equal(:PJ_TYPE_ELLIPSOID, ellipsoid.proj_type)
         | 
| 144 253 | 
             
              end
         | 
| 145 254 |  | 
| 146 255 | 
             
              def test_prime_meridian
         | 
| 147 256 | 
             
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 148 257 | 
             
                prime_meridian = crs.prime_meridian
         | 
| 258 | 
            +
                assert_instance_of(Proj::PrimeMeridian, prime_meridian)
         | 
| 149 259 | 
             
                assert_equal('Greenwich', prime_meridian.name)
         | 
| 150 260 | 
             
              end
         | 
| 151 261 |  | 
| 152 | 
            -
               | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 262 | 
            +
              def test_coordinate_operation
         | 
| 263 | 
            +
                crs = Proj::Crs.create_from_database("EPSG", "32631", :PJ_CATEGORY_CRS)
         | 
| 264 | 
            +
             | 
| 265 | 
            +
                conversion_1 = crs.coordinate_operation
         | 
| 266 | 
            +
                assert_equal("UTM zone 31N", conversion_1.name)
         | 
| 267 | 
            +
              end
         | 
| 268 | 
            +
             | 
| 269 | 
            +
              def test_area_of_use
         | 
| 270 | 
            +
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 271 | 
            +
                assert_kind_of(Proj::Area, crs.area_of_use)
         | 
| 272 | 
            +
                assert_equal('World.', crs.area_of_use.name)
         | 
| 273 | 
            +
                assert_in_delta(-180.0, crs.area_of_use.west_lon_degree, 0.1)
         | 
| 274 | 
            +
                assert_in_delta(-90.0, crs.area_of_use.south_lat_degree, 0.1)
         | 
| 275 | 
            +
                assert_in_delta(180.0, crs.area_of_use.east_lon_degree, 0.1)
         | 
| 276 | 
            +
                assert_in_delta(90.0, crs.area_of_use.north_lat_degree, 0.1)
         | 
| 277 | 
            +
              end
         | 
| 157 278 |  | 
| 158 | 
            -
              def  | 
| 279 | 
            +
              def test_derived
         | 
| 159 280 | 
             
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 160 | 
            -
                 | 
| 161 | 
            -
             | 
| 162 | 
            -
             | 
| 163 | 
            -
             | 
| 164 | 
            -
                 | 
| 165 | 
            -
                 | 
| 281 | 
            +
                refute(crs.derived?)
         | 
| 282 | 
            +
              end
         | 
| 283 | 
            +
             | 
| 284 | 
            +
              def test_non_deprecated
         | 
| 285 | 
            +
                crs = Proj::Crs.new('EPSG:4226')
         | 
| 286 | 
            +
                objects = crs.non_deprecated
         | 
| 287 | 
            +
                assert_equal(2, objects.count)
         | 
| 288 | 
            +
             | 
| 289 | 
            +
                object = objects[0]
         | 
| 290 | 
            +
                assert_equal("#<Proj::Crs - Locodjo 1965, PJ_TYPE_GEOGRAPHIC_2D_CRS>", object.to_s)
         | 
| 291 | 
            +
             | 
| 292 | 
            +
                object = objects[1]
         | 
| 293 | 
            +
                assert_equal("#<Proj::Crs - Abidjan 1987, PJ_TYPE_GEOGRAPHIC_2D_CRS>", object.to_s)
         | 
| 294 | 
            +
              end
         | 
| 295 | 
            +
             | 
| 296 | 
            +
              def test_identify
         | 
| 297 | 
            +
                crs = Proj::Crs.new('OGC:CRS84')
         | 
| 298 | 
            +
                objects, confidences = crs.identify('OGC')
         | 
| 299 | 
            +
             | 
| 300 | 
            +
                assert_equal(1, objects.count)
         | 
| 301 | 
            +
                object = objects[0]
         | 
| 302 | 
            +
                assert_equal("#<Proj::Crs - WGS 84 (CRS84), PJ_TYPE_GEOGRAPHIC_2D_CRS>", object.to_s)
         | 
| 303 | 
            +
             | 
| 304 | 
            +
                assert_equal(1, confidences.count)
         | 
| 305 | 
            +
                confidence = confidences[0]
         | 
| 306 | 
            +
                assert_equal(100, confidence)
         | 
| 307 | 
            +
              end
         | 
| 308 | 
            +
             | 
| 309 | 
            +
              def test_lp_distance
         | 
| 310 | 
            +
                wkt = <<~EOS
         | 
| 311 | 
            +
                  GEODCRS["WGS 84",
         | 
| 312 | 
            +
                        DATUM["World Geodetic System 1984",
         | 
| 313 | 
            +
                              ELLIPSOID["WGS 84",6378137,298.257223563,
         | 
| 314 | 
            +
                                        LENGTHUNIT["metre",1]]],
         | 
| 315 | 
            +
                        PRIMEM["Greenwich",0,
         | 
| 316 | 
            +
                               ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 317 | 
            +
                        CS[ellipsoidal,2],
         | 
| 318 | 
            +
                        AXIS["latitude",north,
         | 
| 319 | 
            +
                             ORDER[1],
         | 
| 320 | 
            +
                             ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 321 | 
            +
                        AXIS["longitude",east,
         | 
| 322 | 
            +
                             ORDER[2],
         | 
| 323 | 
            +
                             ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 324 | 
            +
                        ID["EPSG",4326]]
         | 
| 325 | 
            +
                EOS
         | 
| 326 | 
            +
             | 
| 327 | 
            +
                crs = Proj::Crs.new(wkt)
         | 
| 328 | 
            +
                coord1 = Proj::Coordinate.new(x: Proj.degrees_to_radians(2),
         | 
| 329 | 
            +
                                              y: Proj.degrees_to_radians(49),
         | 
| 330 | 
            +
                                              z: 0, t:0)
         | 
| 331 | 
            +
                coord2 = Proj::Coordinate.new(x: Proj.degrees_to_radians(2),
         | 
| 332 | 
            +
                                              y: Proj.degrees_to_radians(50),
         | 
| 333 | 
            +
                                              z: 0, t:0)
         | 
| 334 | 
            +
             | 
| 335 | 
            +
                distance = crs.lp_distance(coord1, coord2)
         | 
| 336 | 
            +
                assert_in_delta(111219.409, distance, 1e-3)
         | 
| 337 | 
            +
              end
         | 
| 338 | 
            +
             | 
| 339 | 
            +
              def test_geod_distance
         | 
| 340 | 
            +
                wkt = <<~EOS
         | 
| 341 | 
            +
                  GEODCRS["WGS 84",
         | 
| 342 | 
            +
                        DATUM["World Geodetic System 1984",
         | 
| 343 | 
            +
                              ELLIPSOID["WGS 84",6378137,298.257223563,
         | 
| 344 | 
            +
                                        LENGTHUNIT["metre",1]]],
         | 
| 345 | 
            +
                        PRIMEM["Greenwich",0,
         | 
| 346 | 
            +
                               ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 347 | 
            +
                        CS[ellipsoidal,2],
         | 
| 348 | 
            +
                        AXIS["latitude",north,
         | 
| 349 | 
            +
                             ORDER[1],
         | 
| 350 | 
            +
                             ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 351 | 
            +
                        AXIS["longitude",east,
         | 
| 352 | 
            +
                             ORDER[2],
         | 
| 353 | 
            +
                             ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 354 | 
            +
                        ID["EPSG",4326]]
         | 
| 355 | 
            +
                EOS
         | 
| 356 | 
            +
             | 
| 357 | 
            +
                crs = Proj::Crs.new(wkt)
         | 
| 358 | 
            +
                coord1 = Proj::Coordinate.new(x: Proj.degrees_to_radians(2),
         | 
| 359 | 
            +
                                              y: Proj.degrees_to_radians(49),
         | 
| 360 | 
            +
                                              z: 0, t:0)
         | 
| 361 | 
            +
                coord2 = Proj::Coordinate.new(x: Proj.degrees_to_radians(2),
         | 
| 362 | 
            +
                                              y: Proj.degrees_to_radians(50),
         | 
| 363 | 
            +
                                              z: 0, t:0)
         | 
| 364 | 
            +
             | 
| 365 | 
            +
                coord3 = crs.geod_distance(coord1, coord2)
         | 
| 366 | 
            +
                assert_in_delta(111219.409, coord3.x, 1e-3)
         | 
| 367 | 
            +
              end
         | 
| 368 | 
            +
             | 
| 369 | 
            +
              def test_source_crs
         | 
| 370 | 
            +
                wkt = <<~EOS
         | 
| 371 | 
            +
                        PROJCRS["WGS 84 / UTM zone 31N",
         | 
| 372 | 
            +
                            BASEGEODCRS["WGS 84",
         | 
| 373 | 
            +
                                DATUM["World Geodetic System 1984",
         | 
| 374 | 
            +
                                    ELLIPSOID["WGS 84",6378137,298.257223563,
         | 
| 375 | 
            +
                                        LENGTHUNIT["metre",1]]],
         | 
| 376 | 
            +
                                PRIMEM["Greenwich",0,
         | 
| 377 | 
            +
                                    ANGLEUNIT["degree",0.0174532925199433]]],
         | 
| 378 | 
            +
                            CONVERSION["UTM zone 31N",
         | 
| 379 | 
            +
                                METHOD["Transverse Mercator",
         | 
| 380 | 
            +
                                    ID["EPSG",9807]],
         | 
| 381 | 
            +
                                PARAMETER["Latitude of natural origin",0,
         | 
| 382 | 
            +
                                    ANGLEUNIT["degree",0.0174532925199433],
         | 
| 383 | 
            +
                                    ID["EPSG",8801]],
         | 
| 384 | 
            +
                                PARAMETER["Longitude of natural origin",3,
         | 
| 385 | 
            +
                                    ANGLEUNIT["degree",0.0174532925199433],
         | 
| 386 | 
            +
                                    ID["EPSG",8802]],
         | 
| 387 | 
            +
                                PARAMETER["Scale factor at natural origin",0.9996,
         | 
| 388 | 
            +
                                    SCALEUNIT["unity",1],
         | 
| 389 | 
            +
                                    ID["EPSG",8805]],
         | 
| 390 | 
            +
                                PARAMETER["False easting",500000,
         | 
| 391 | 
            +
                                    LENGTHUNIT["metre",1],
         | 
| 392 | 
            +
                                    ID["EPSG",8806]],
         | 
| 393 | 
            +
                                PARAMETER["False northing",0,
         | 
| 394 | 
            +
                                    LENGTHUNIT["metre",1],
         | 
| 395 | 
            +
                                    ID["EPSG",8807]]],
         | 
| 396 | 
            +
                            CS[Cartesian,2],
         | 
| 397 | 
            +
                                AXIS["(E)",east,
         | 
| 398 | 
            +
                                    ORDER[1],
         | 
| 399 | 
            +
                                    LENGTHUNIT["metre",1]],
         | 
| 400 | 
            +
                                AXIS["(N)",north,
         | 
| 401 | 
            +
                                    ORDER[2],
         | 
| 402 | 
            +
                                    LENGTHUNIT["metre",1]],
         | 
| 403 | 
            +
                            ID["EPSG",32631]]
         | 
| 404 | 
            +
                EOS
         | 
| 405 | 
            +
             | 
| 406 | 
            +
                crs = Proj::Crs.new(wkt)
         | 
| 407 | 
            +
                source_crs = crs.source_crs
         | 
| 408 | 
            +
                assert_equal("WGS 84", source_crs.name)
         | 
| 409 | 
            +
              end
         | 
| 410 | 
            +
             | 
| 411 | 
            +
              def test_target_crs
         | 
| 412 | 
            +
                wkt = <<~EOS
         | 
| 413 | 
            +
                    BOUNDCRS[
         | 
| 414 | 
            +
                      SOURCECRS[
         | 
| 415 | 
            +
                        GEODCRS["NTF (Paris)",
         | 
| 416 | 
            +
                                DATUM["Nouvelle Triangulation Francaise (Paris)",
         | 
| 417 | 
            +
                                      ELLIPSOID["Clarke 1880 (IGN)",6378249.2,293.466021293627,
         | 
| 418 | 
            +
                                                LENGTHUNIT["metre",1]]],
         | 
| 419 | 
            +
                                PRIMEM["Paris",2.5969213,
         | 
| 420 | 
            +
                                       ANGLEUNIT["grad",0.015707963267949]],
         | 
| 421 | 
            +
                                CS[ellipsoidal,2],
         | 
| 422 | 
            +
                                AXIS["latitude",north,
         | 
| 423 | 
            +
                                     ORDER[1],
         | 
| 424 | 
            +
                                     ANGLEUNIT["grad",0.015707963267949]],
         | 
| 425 | 
            +
                                AXIS["longitude",east,
         | 
| 426 | 
            +
                                     ORDER[2],
         | 
| 427 | 
            +
                                     ANGLEUNIT["grad",0.015707963267949]],
         | 
| 428 | 
            +
                                ID["EPSG",4807]]],
         | 
| 429 | 
            +
                      TARGETCRS[
         | 
| 430 | 
            +
                        GEODCRS["WGS 84",
         | 
| 431 | 
            +
                                DATUM["World Geodetic System 1984",
         | 
| 432 | 
            +
                                      ELLIPSOID["WGS 84",6378137,298.257223563,
         | 
| 433 | 
            +
                                                LENGTHUNIT["metre",1]]],
         | 
| 434 | 
            +
                                PRIMEM["Greenwich",0,
         | 
| 435 | 
            +
                                       ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 436 | 
            +
                                CS[ellipsoidal,2],
         | 
| 437 | 
            +
                                AXIS["latitude",north,
         | 
| 438 | 
            +
                                     ORDER[1],
         | 
| 439 | 
            +
                                     ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 440 | 
            +
                                AXIS["longitude",east,
         | 
| 441 | 
            +
                                     ORDER[2],
         | 
| 442 | 
            +
                                     ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 443 | 
            +
                                ID["EPSG",4326]]],
         | 
| 444 | 
            +
                      ABRIDGEDTRANSFORMATION["",
         | 
| 445 | 
            +
                                             METHOD[""],
         | 
| 446 | 
            +
                                             PARAMETER["foo",1]]]
         | 
| 447 | 
            +
                EOS
         | 
| 448 | 
            +
             | 
| 449 | 
            +
                crs = Proj::Crs.new(wkt)
         | 
| 450 | 
            +
                target_crs = crs.target_crs
         | 
| 451 | 
            +
                assert_equal("WGS 84", target_crs.name)
         | 
| 166 452 | 
             
              end
         | 
| 167 453 |  | 
| 168 454 | 
             
              def test_to_proj_string
         | 
| @@ -208,8 +494,8 @@ class CrsTest < AbstractTest | |
| 208 494 | 
             
                              ORDER[2],
         | 
| 209 495 | 
             
                              LENGTHUNIT["metre",1]],
         | 
| 210 496 | 
             
                      USAGE[
         | 
| 211 | 
            -
                          SCOPE[" | 
| 212 | 
            -
                          AREA["North America - 96\xC2\xB0W  | 
| 497 | 
            +
                          SCOPE["Engineering survey, topographic mapping."],
         | 
| 498 | 
            +
                          AREA["North America - between 96\xC2\xB0W and 90\xC2\xB0W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin."],
         | 
| 213 499 | 
             
                          BBOX[25.61,-96,84,-90]],
         | 
| 214 500 | 
             
                      ID["EPSG",26915]]
         | 
| 215 501 | 
             
                  EOS
         | 
| @@ -221,7 +507,7 @@ class CrsTest < AbstractTest | |
| 221 507 | 
             
                crs = Proj::Crs.new('EPSG:26915')
         | 
| 222 508 | 
             
                expected = <<~EOS
         | 
| 223 509 | 
             
                  {
         | 
| 224 | 
            -
                    "$schema": "https://proj.org/schemas | 
| 510 | 
            +
                    "$schema": "https://proj.org/schemas/#{proj9? ? 'v0.5' : 'v0.4'}/projjson.schema.json",
         | 
| 225 511 | 
             
                    "type": "ProjectedCRS",
         | 
| 226 512 | 
             
                    "name": "NAD83 / UTM zone 15N",
         | 
| 227 513 | 
             
                    "base_crs": {
         | 
| @@ -331,7 +617,8 @@ class CrsTest < AbstractTest | |
| 331 617 | 
             
                        }
         | 
| 332 618 | 
             
                      ]
         | 
| 333 619 | 
             
                    },
         | 
| 334 | 
            -
                    " | 
| 620 | 
            +
                    "scope": "Engineering survey, topographic mapping.",
         | 
| 621 | 
            +
                    "area": "North America - between 96\xC2\xB0W and 90\xC2\xB0W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin.",
         | 
| 335 622 | 
             
                    "bbox": {
         | 
| 336 623 | 
             
                      "south_latitude": 25.61,
         | 
| 337 624 | 
             
                      "west_longitude": -96,
         | 
| @@ -348,26 +635,438 @@ class CrsTest < AbstractTest | |
| 348 635 | 
             
                assert_equal(expected.strip, crs.to_json)
         | 
| 349 636 | 
             
              end
         | 
| 350 637 |  | 
| 351 | 
            -
              def  | 
| 352 | 
            -
                 | 
| 638 | 
            +
              def test_to_wgs84
         | 
| 639 | 
            +
                wkt = <<~EOS
         | 
| 640 | 
            +
                  BOUNDCRS[
         | 
| 641 | 
            +
                      SOURCECRS[
         | 
| 642 | 
            +
                          GEOGCRS["NTF (Paris)",
         | 
| 643 | 
            +
                              DATUM["Nouvelle Triangulation Francaise (Paris)",
         | 
| 644 | 
            +
                                  ELLIPSOID["Clarke 1880 (IGN)",6378249.2,293.466021293627,
         | 
| 645 | 
            +
                                      LENGTHUNIT["metre",1]]],
         | 
| 646 | 
            +
                              PRIMEM["Paris",2.5969213,
         | 
| 647 | 
            +
                                  ANGLEUNIT["grad",0.0157079632679489]],
         | 
| 648 | 
            +
                              CS[ellipsoidal,2],
         | 
| 649 | 
            +
                                  AXIS["geodetic latitude (Lat)",north,
         | 
| 650 | 
            +
                                      ORDER[1],
         | 
| 651 | 
            +
                                      ANGLEUNIT["grad",0.0157079632679489]],
         | 
| 652 | 
            +
                                  AXIS["geodetic longitude (Lon)",east,
         | 
| 653 | 
            +
                                      ORDER[2],
         | 
| 654 | 
            +
                                      ANGLEUNIT["grad",0.0157079632679489]],
         | 
| 655 | 
            +
                              USAGE[
         | 
| 656 | 
            +
                                  SCOPE["Geodesy."],
         | 
| 657 | 
            +
                                  AREA["France - onshore - mainland and Corsica."],
         | 
| 658 | 
            +
                                  BBOX[41.31,-4.87,51.14,9.63]],
         | 
| 659 | 
            +
                              ID["EPSG",4807]]],
         | 
| 660 | 
            +
                      TARGETCRS[
         | 
| 661 | 
            +
                          GEOGCRS["WGS 84",
         | 
| 662 | 
            +
                              DATUM["World Geodetic System 1984",
         | 
| 663 | 
            +
                                  ELLIPSOID["WGS 84",6378137,298.257223563,
         | 
| 664 | 
            +
                                      LENGTHUNIT["metre",1]]],
         | 
| 665 | 
            +
                              PRIMEM["Greenwich",0,
         | 
| 666 | 
            +
                                  ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 667 | 
            +
                              CS[ellipsoidal,2],
         | 
| 668 | 
            +
                                  AXIS["latitude",north,
         | 
| 669 | 
            +
                                      ORDER[1],
         | 
| 670 | 
            +
                                      ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 671 | 
            +
                                  AXIS["longitude",east,
         | 
| 672 | 
            +
                                      ORDER[2],
         | 
| 673 | 
            +
                                      ANGLEUNIT["degree",0.0174532925199433]],
         | 
| 674 | 
            +
                              ID["EPSG",4326]]],
         | 
| 675 | 
            +
                      ABRIDGEDTRANSFORMATION["NTF to WGS 84 (1)",
         | 
| 676 | 
            +
                          VERSION["IGN-Fra"],
         | 
| 677 | 
            +
                          METHOD["Geocentric translations (geog2D domain)",
         | 
| 678 | 
            +
                              ID["EPSG",9603]],
         | 
| 679 | 
            +
                          PARAMETER["X-axis translation",-168,
         | 
| 680 | 
            +
                              ID["EPSG",8605]],
         | 
| 681 | 
            +
                          PARAMETER["Y-axis translation",-60,
         | 
| 682 | 
            +
                              ID["EPSG",8606]],
         | 
| 683 | 
            +
                          PARAMETER["Z-axis translation",320,
         | 
| 684 | 
            +
                              ID["EPSG",8607]],
         | 
| 685 | 
            +
                          USAGE[
         | 
| 686 | 
            +
                              SCOPE["(null/copy) Approximation for medium and low accuracy applications assuming equality between plate-fixed static and earth-fixed dynamic CRSs, ignoring static/dynamic CRS differences."],
         | 
| 687 | 
            +
                              AREA["France - onshore - mainland and Corsica."],
         | 
| 688 | 
            +
                              BBOX[41.31,-4.87,51.14,9.63]],
         | 
| 689 | 
            +
                          ID["EPSG",1193],
         | 
| 690 | 
            +
                          REMARK["These same parameter values are used to transform to ETRS89. See NTF to ETRS89 (1) (code 1651)."]]]
         | 
| 691 | 
            +
                EOS
         | 
| 692 | 
            +
             | 
| 693 | 
            +
                crs = Proj::Crs.new(wkt)
         | 
| 694 | 
            +
                operation = crs.coordinate_operation
         | 
| 695 | 
            +
                values = operation.to_wgs84
         | 
| 696 | 
            +
             | 
| 697 | 
            +
                expected = [-168.0, -60.0, 320.0, 0.0, 0.0, 0.0, 0.0]
         | 
| 698 | 
            +
                assert_equal(expected, values)
         | 
| 699 | 
            +
              end
         | 
| 700 | 
            +
             | 
| 701 | 
            +
              def test_geographic
         | 
| 702 | 
            +
                context = Proj::Context.new
         | 
| 703 | 
            +
                coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LATITUDE_LONGITUDE, context)
         | 
| 704 | 
            +
             | 
| 705 | 
            +
                crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellps_name: "WGS 84",
         | 
| 706 | 
            +
                                                  semi_major_meter: 6378137, inv_flattening: 298.257223563,
         | 
| 707 | 
            +
                                                  prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_units_conv: 0.0174532925199433,
         | 
| 708 | 
            +
                                                  coordinate_system: coordinate_system)
         | 
| 709 | 
            +
             | 
| 710 | 
            +
                crs_2 = Proj::Crs.create_from_database("EPSG", "4326", :PJ_CATEGORY_CRS)
         | 
| 711 | 
            +
                assert(crs.equivalent_to?(crs_2, :PJ_COMP_EQUIVALENT))
         | 
| 712 | 
            +
              end
         | 
| 713 | 
            +
             | 
| 714 | 
            +
              def test_geographic_datum
         | 
| 715 | 
            +
                context = Proj::Context.new
         | 
| 716 | 
            +
                coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LONGITUDE_LATITUDE, context)
         | 
| 717 | 
            +
                datum = Proj::PjObject.create_from_database("EPSG", "1061", :PJ_CATEGORY_DATUM)
         | 
| 718 | 
            +
                crs = Proj::Crs.create_geographic_from_datum(context, name: "WGS 84", datum: datum, coordinate_system: coordinate_system)
         | 
| 719 | 
            +
              end
         | 
| 720 | 
            +
             | 
| 721 | 
            +
              def test_geocentric
         | 
| 722 | 
            +
                context = Proj::Context.new
         | 
| 723 | 
            +
                crs = Proj::Crs.create_geocentric(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellps_name: "WGS 84",
         | 
| 724 | 
            +
                                                  semi_major_meter: 6378137, inv_flattening: 298.257223563,
         | 
| 725 | 
            +
                                                  prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0,
         | 
| 726 | 
            +
                                                  angular_units: "Degree", angular_units_conv: 0.0174532925199433,
         | 
| 727 | 
            +
                                                  linear_units: "Metre", linear_units_conv: 1.0)
         | 
| 728 | 
            +
             | 
| 729 | 
            +
                crs_2 = Proj::Crs.create_from_database("EPSG", "4978", :PJ_CATEGORY_CRS)
         | 
| 730 | 
            +
                assert(crs.equivalent_to?(crs_2, :PJ_COMP_EQUIVALENT))
         | 
| 731 | 
            +
              end
         | 
| 732 | 
            +
             | 
| 733 | 
            +
              def test_geocentric_datum
         | 
| 734 | 
            +
                context = Proj::Context.new
         | 
| 735 | 
            +
                crs = Proj::Crs.create_geocentric(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellps_name: "WGS 84",
         | 
| 736 | 
            +
                                                  semi_major_meter: 6378137, inv_flattening: 298.257223563,
         | 
| 737 | 
            +
                                                  prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0,
         | 
| 738 | 
            +
                                                  angular_units: "Degree", angular_units_conv: 0.0174532925199433,
         | 
| 739 | 
            +
                                                  linear_units: "Metre", linear_units_conv: 1.0)
         | 
| 740 | 
            +
                datum = crs.datum
         | 
| 741 | 
            +
             | 
| 742 | 
            +
                geocentric_crs = Proj::Crs.create_geocentric_from_datum(context, name: "WGS 84", datum: datum,
         | 
| 743 | 
            +
                                                                        linear_units: "Metre", linear_units_conv: 1.0)
         | 
| 744 | 
            +
             | 
| 745 | 
            +
                assert(crs.equivalent_to?(geocentric_crs, :PJ_COMP_STRICT))
         | 
| 746 | 
            +
              end
         | 
| 747 | 
            +
             | 
| 748 | 
            +
              def test_vertical_crs_ex
         | 
| 749 | 
            +
                context = Proj::Context.new
         | 
| 750 | 
            +
             | 
| 751 | 
            +
                vertical_crs = Proj::Crs.create_vertical_ex(context, name: "myVertCRS (ftUS)",
         | 
| 752 | 
            +
                                                            datum_name: "myVertDatum",
         | 
| 753 | 
            +
                                                            linear_units: "US survey foot", linear_units_conv: 0.304800609601219,
         | 
| 754 | 
            +
                                                            geoid_model_name: "PROJ @foo.gtx",
         | 
| 755 | 
            +
                                                            accuracy: 123)
         | 
| 756 | 
            +
                assert(vertical_crs)
         | 
| 757 | 
            +
                assert_equal(:PJ_TYPE_VERTICAL_CRS, vertical_crs.proj_type)
         | 
| 758 | 
            +
              end
         | 
| 759 | 
            +
             | 
| 760 | 
            +
              def test_vertical_crs_ex_with_geog_crs
         | 
| 761 | 
            +
                context = Proj::Context.new
         | 
| 762 | 
            +
                # NAD83(2011) / UTM zone 11N
         | 
| 763 | 
            +
                horizontal_crs = Proj::Crs.create_from_database("EPSG", "6340", :PJ_CATEGORY_CRS)
         | 
| 764 | 
            +
             | 
| 765 | 
            +
                # WGS84
         | 
| 766 | 
            +
                wgs84 = Proj::Crs.new("EPSG:4979", context)
         | 
| 767 | 
            +
             | 
| 768 | 
            +
                vertical_crs = Proj::Crs.create_vertical_ex(context, name: "myVertCRS",
         | 
| 769 | 
            +
                                                            datum_name: "myVertDatum",
         | 
| 770 | 
            +
                                                            linear_units: "US survey foot", linear_units_conv: 0.304800609601219,
         | 
| 771 | 
            +
                                                            geoid_model_name: "PROJ @foo.gtx",
         | 
| 772 | 
            +
                                                            geoid_geog_crs: wgs84)
         | 
| 773 | 
            +
                assert(vertical_crs)
         | 
| 774 | 
            +
                assert_equal(:PJ_TYPE_VERTICAL_CRS, vertical_crs.proj_type)
         | 
| 775 | 
            +
              end
         | 
| 776 | 
            +
             | 
| 777 | 
            +
              def test_bound_vertical
         | 
| 778 | 
            +
                context = Proj::Context.new
         | 
| 779 | 
            +
                vertical_crs = Proj::Crs.create_vertical_ex(context, name: "myVertCRS",
         | 
| 780 | 
            +
                                                            datum_name: "myVertDatum")
         | 
| 781 | 
            +
             | 
| 782 | 
            +
                crs_4979 = Proj::Crs.create_from_database("EPSG", "4979", :PJ_CATEGORY_CRS)
         | 
| 783 | 
            +
                bound = Proj::Crs.create_bound_vertical(context, vertical_crs: vertical_crs,
         | 
| 784 | 
            +
                                                        hub_crs: crs_4979, grid_name: "foo.gtx")
         | 
| 785 | 
            +
             | 
| 786 | 
            +
                assert_equal(:PJ_TYPE_BOUND_CRS, bound.proj_type)
         | 
| 787 | 
            +
                assert_equal("myVertCRS", bound.name)
         | 
| 788 | 
            +
              end
         | 
| 789 | 
            +
             | 
| 790 | 
            +
              def test_compound
         | 
| 791 | 
            +
                context = Proj::Context.new
         | 
| 792 | 
            +
                coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LONGITUDE_LATITUDE, context)
         | 
| 793 | 
            +
             | 
| 794 | 
            +
                horizontal_crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellps_name: "WGS 84",
         | 
| 795 | 
            +
                                                             semi_major_meter: 6378137, inv_flattening: 298.257223563,
         | 
| 796 | 
            +
                                                             prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_units_conv: 0.0174532925199433,
         | 
| 797 | 
            +
                                                             coordinate_system: coordinate_system)
         | 
| 798 | 
            +
             | 
| 799 | 
            +
                vertical_crs = Proj::Crs.create_vertical(context, name: "myVertCRS",
         | 
| 800 | 
            +
                                                         datum_name: "myVertDatum",
         | 
| 801 | 
            +
                                                         linear_units: "US survey foot", linear_units_conv: 0.304800609601219)
         | 
| 802 | 
            +
             | 
| 803 | 
            +
                assert(vertical_crs)
         | 
| 804 | 
            +
                assert_equal(:PJ_TYPE_VERTICAL_CRS, vertical_crs.proj_type)
         | 
| 805 | 
            +
                assert_equal("myVertCRS", vertical_crs.name)
         | 
| 806 | 
            +
             | 
| 807 | 
            +
                compound_crs = Proj::Crs.create_compound(context, name: "myCompoundCRS",
         | 
| 808 | 
            +
                                                         horizontal_crs: horizontal_crs, vertical_crs: vertical_crs);
         | 
| 809 | 
            +
                assert(compound_crs)
         | 
| 810 | 
            +
                assert_equal(:PJ_TYPE_COMPOUND_CRS, compound_crs.proj_type)
         | 
| 811 | 
            +
                assert_equal("myCompoundCRS", compound_crs.name)
         | 
| 812 | 
            +
             | 
| 813 | 
            +
                crs = compound_crs.sub_crs(0)
         | 
| 814 | 
            +
                assert(crs.equivalent_to?(horizontal_crs, :PJ_COMP_STRICT))
         | 
| 815 | 
            +
             | 
| 816 | 
            +
                crs = compound_crs.sub_crs(1)
         | 
| 817 | 
            +
                assert(crs.equivalent_to?(vertical_crs, :PJ_COMP_STRICT))
         | 
| 818 | 
            +
              end
         | 
| 819 | 
            +
             | 
| 820 | 
            +
              def test_derived_geographic
         | 
| 821 | 
            +
                context = Proj::Context.new
         | 
| 822 | 
            +
                crs = Proj::Crs.create("EPSG:4326", context)
         | 
| 823 | 
            +
             | 
| 824 | 
            +
                conversion = Proj::Projection.pole_rotation_grib_convention(context, south_pole_lat_in_unrotated_crs: 2, south_pole_long_in_unrotated_crs: 3,
         | 
| 825 | 
            +
                                                                            axis_rotation: 4, ang_unit_name: "Degree", ang_unit_conv_factor: 0.0174532925199433)
         | 
| 826 | 
            +
             | 
| 827 | 
            +
                coordinate_system = crs.coordinate_system
         | 
| 828 | 
            +
             | 
| 829 | 
            +
                # Wrong type of base_geographic_crs
         | 
| 830 | 
            +
                derived_crs = Proj::Crs.create_derived_geographic(context, name: "my rotated CRS",
         | 
| 831 | 
            +
                                                                  base_geographic_crs: conversion, conversion: conversion,
         | 
| 832 | 
            +
                                                                  coordinate_system: coordinate_system)
         | 
| 833 | 
            +
                refute(derived_crs)
         | 
| 834 | 
            +
             | 
| 835 | 
            +
                # Wrong type of conversion
         | 
| 836 | 
            +
                derived_crs = Proj::Crs.create_derived_geographic(context, name: "my rotated CRS",
         | 
| 837 | 
            +
                                                                  base_geographic_crs: crs, conversion: crs,
         | 
| 838 | 
            +
                                                                  coordinate_system: coordinate_system)
         | 
| 839 | 
            +
                refute(derived_crs)
         | 
| 840 | 
            +
             | 
| 841 | 
            +
                derived_crs = Proj::Crs.create_derived_geographic(context, name: "my rotated CRS",
         | 
| 842 | 
            +
                                                                  base_geographic_crs: crs, conversion: conversion,
         | 
| 843 | 
            +
                                                                  coordinate_system: coordinate_system)
         | 
| 844 | 
            +
                refute(crs.derived?)
         | 
| 845 | 
            +
                assert(derived_crs.derived?)
         | 
| 846 | 
            +
             | 
| 847 | 
            +
                expected = "+proj=ob_tran +o_proj=longlat +o_lon_p=-4 +o_lat_p=-2 +lon_0=3 +datum=WGS84 +no_defs +type=crs"
         | 
| 848 | 
            +
                assert_equal(expected, derived_crs.to_proj_string)
         | 
| 849 | 
            +
              end
         | 
| 850 | 
            +
             | 
| 851 | 
            +
              def test_projected
         | 
| 852 | 
            +
                context = Proj::Context.new
         | 
| 853 | 
            +
                param = Proj::Parameter.new(name: "param name", value: 0.99,
         | 
| 854 | 
            +
                                            unit_conv_factor: 1.0, unit_type: :PJ_UT_SCALE)
         | 
| 855 | 
            +
             | 
| 856 | 
            +
                conversion = Proj::Conversion.create_conversion(context, name: "conv",
         | 
| 857 | 
            +
                                                                auth_name: "conv auth", code: "conv code",
         | 
| 858 | 
            +
                                                                method_name: "method", method_auth_name: "method auth", method_code: "method code",
         | 
| 859 | 
            +
                                                                params: [param])
         | 
| 860 | 
            +
             | 
| 861 | 
            +
                coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LONGITUDE_LATITUDE, context)
         | 
| 862 | 
            +
                crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984",
         | 
| 863 | 
            +
                                                  ellps_name: "WGS 84", semi_major_meter: 6378137, inv_flattening: 298.257223563,
         | 
| 864 | 
            +
                                                  prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0,
         | 
| 865 | 
            +
                                                  pm_angular_units: "Degree", pm_units_conv: 0.0174532925199433,
         | 
| 866 | 
            +
                                                  coordinate_system: coordinate_system)
         | 
| 867 | 
            +
             | 
| 868 | 
            +
                cartesian = Proj::CoordinateSystem.create_cartesian_2d(context, :PJ_CART2D_EASTING_NORTHING)
         | 
| 869 | 
            +
             | 
| 870 | 
            +
                projected = Proj::Crs.create_projected(context, name: "My Projected CRS", geodetic_crs: crs,
         | 
| 871 | 
            +
                                                       conversion: conversion, coordinate_system: cartesian)
         | 
| 872 | 
            +
                assert_equal(:PJ_TYPE_PROJECTED_CRS, projected.proj_type)
         | 
| 873 | 
            +
                assert_equal("My Projected CRS", projected.name)
         | 
| 874 | 
            +
              end
         | 
| 875 | 
            +
             | 
| 876 | 
            +
              def test_create_bound_crs_to_wgs84
         | 
| 877 | 
            +
                context = Proj::Context.new
         | 
| 878 | 
            +
                crs = Proj::Crs.create_from_database("EPSG", "4807", :PJ_CATEGORY_CRS)
         | 
| 879 | 
            +
             | 
| 880 | 
            +
                bounded = Proj::Crs.create_bound_to_wgs84(context, crs: crs)
         | 
| 881 | 
            +
                expected = "+proj=longlat +ellps=clrk80ign +pm=paris +towgs84=-168,-60,320,0,0,0,0 +no_defs +type=crs"
         | 
| 882 | 
            +
                assert_equal(expected, bounded.to_proj_string)
         | 
| 883 | 
            +
             | 
| 884 | 
            +
                base_crs = bounded.source_crs
         | 
| 885 | 
            +
                assert(base_crs.equivalent_to?(crs, :PJ_COMP_EQUIVALENT))
         | 
| 886 | 
            +
             | 
| 887 | 
            +
                hub_crs = bounded.target_crs
         | 
| 888 | 
            +
                wgs84_crs = Proj::Crs.create_from_database("EPSG", "4326", :PJ_CATEGORY_CRS)
         | 
| 889 | 
            +
                assert(hub_crs.equivalent_to?(wgs84_crs, :PJ_COMP_EQUIVALENT))
         | 
| 890 | 
            +
             | 
| 891 | 
            +
                transform = bounded.coordinate_operation
         | 
| 892 | 
            +
                values = transform.to_wgs84(true)
         | 
| 893 | 
            +
                expected = [-168, -60, 320, 0, 0, 0, 0]
         | 
| 894 | 
            +
                assert_equal(expected, values)
         | 
| 895 | 
            +
             | 
| 896 | 
            +
                bounded_2 = Proj::Crs.create_bound(context, base_crs: base_crs, hub_crs: hub_crs, transformation: transform)
         | 
| 897 | 
            +
                assert_equal(:PJ_TYPE_BOUND_CRS, bounded_2.proj_type)
         | 
| 898 | 
            +
                expected = "+proj=longlat +ellps=clrk80ign +pm=paris +towgs84=-168,-60,320,0,0,0,0 +no_defs +type=crs"
         | 
| 899 | 
            +
                assert_equal(expected, bounded_2.to_proj_string)
         | 
| 900 | 
            +
              end
         | 
| 901 | 
            +
             | 
| 902 | 
            +
              def test_create_engineering
         | 
| 903 | 
            +
                context = Proj::Context.new
         | 
| 904 | 
            +
                crs = Proj::Crs.create_engineering("EPSG", name: "4807")
         | 
| 905 | 
            +
                assert_equal("4807", crs.name)
         | 
| 906 | 
            +
                assert_equal(:PJ_TYPE_ENGINEERING_CRS, crs.proj_type)
         | 
| 353 907 |  | 
| 354 908 | 
             
                expected = <<~EOS
         | 
| 355 | 
            -
             | 
| 356 | 
            -
             | 
| 357 | 
            -
             | 
| 358 | 
            -
             | 
| 359 | 
            -
             | 
| 360 | 
            -
                  Area of Use:
         | 
| 361 | 
            -
                  - name: North America - 96°W to 90°W and NAD83 by country
         | 
| 362 | 
            -
                  - bounds: (-96.0, 25.61, -90.0, 84.0)
         | 
| 363 | 
            -
                  Coordinate operation:
         | 
| 364 | 
            -
                  - name: ?
         | 
| 365 | 
            -
                  - method: ?
         | 
| 366 | 
            -
                  Datum: North American Datum 1983
         | 
| 367 | 
            -
                  - Ellipsoid: GRS 1980
         | 
| 368 | 
            -
                  - Prime Meridian: Greenwich
         | 
| 909 | 
            +
                    LOCAL_CS["name",
         | 
| 910 | 
            +
                        UNIT["metre",1,
         | 
| 911 | 
            +
                            AUTHORITY["EPSG","9001"]],
         | 
| 912 | 
            +
                        AXIS["Easting",EAST],
         | 
| 913 | 
            +
                        AXIS["Northing",NORTH]]
         | 
| 369 914 | 
             
                EOS
         | 
| 370 915 |  | 
| 371 | 
            -
                 | 
| 916 | 
            +
                # This crashes proj
         | 
| 917 | 
            +
                #assert_equal(expected, crs.to_wkt(:PJ_WKT1_GDAL))
         | 
| 918 | 
            +
              end
         | 
| 919 | 
            +
             | 
| 920 | 
            +
              def test_query_geodetic_from_datum
         | 
| 921 | 
            +
                context = Proj::Context.new
         | 
| 922 | 
            +
                crses = Proj::Crs.query_geodetic_from_datum(context, datum_auth_name: "EPSG", datum_code: "6326")
         | 
| 923 | 
            +
             | 
| 924 | 
            +
                expected = case
         | 
| 925 | 
            +
                           when proj9?
         | 
| 926 | 
            +
                             12
         | 
| 927 | 
            +
                           else
         | 
| 928 | 
            +
                             11
         | 
| 929 | 
            +
                           end
         | 
| 930 | 
            +
             | 
| 931 | 
            +
                assert_equal(expected, crses.size)
         | 
| 932 | 
            +
             | 
| 933 | 
            +
                crses = Proj::Crs.query_geodetic_from_datum(context, auth_name: "EPSG",
         | 
| 934 | 
            +
                                                            datum_auth_name: "EPSG", datum_code: "6326",
         | 
| 935 | 
            +
                                                            crs_type: "geographic 2D")
         | 
| 936 | 
            +
                assert_equal(1, crses.size)
         | 
| 937 | 
            +
              end
         | 
| 938 | 
            +
             | 
| 939 | 
            +
              def test_alter_name
         | 
| 940 | 
            +
                context = Proj::Context.new
         | 
| 941 | 
            +
                coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LATITUDE_LONGITUDE, context)
         | 
| 942 | 
            +
             | 
| 943 | 
            +
                crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellps_name: "WGS 84",
         | 
| 944 | 
            +
                                                  semi_major_meter: 6378137, inv_flattening: 298.257223563,
         | 
| 945 | 
            +
                                                  prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_units_conv: 0.0174532925199433,
         | 
| 946 | 
            +
                                                  coordinate_system: coordinate_system)
         | 
| 947 | 
            +
                assert_equal("WGS 84", crs.name)
         | 
| 948 | 
            +
             | 
| 949 | 
            +
                altered = crs.alter_name("new name")
         | 
| 950 | 
            +
                assert_equal("WGS 84", crs.name)
         | 
| 951 | 
            +
                assert_equal("new name", altered.name)
         | 
| 952 | 
            +
              end
         | 
| 953 | 
            +
             | 
| 954 | 
            +
              def test_alter_id
         | 
| 955 | 
            +
                context = Proj::Context.new
         | 
| 956 | 
            +
                coordinate_system = Proj::CoordinateSystem.create_ellipsoidal_2d(:PJ_ELLPS2D_LATITUDE_LONGITUDE, context)
         | 
| 957 | 
            +
             | 
| 958 | 
            +
                crs = Proj::Crs.create_geographic(context, name: "WGS 84", datum_name: "World Geodetic System 1984", ellps_name: "WGS 84",
         | 
| 959 | 
            +
                                                  semi_major_meter: 6378137, inv_flattening: 298.257223563,
         | 
| 960 | 
            +
                                                  prime_meridian_name: "Greenwich", prime_meridian_offset: 0.0, pm_angular_units: "Degree", pm_units_conv: 0.0174532925199433,
         | 
| 961 | 
            +
                                                  coordinate_system: coordinate_system)
         | 
| 962 | 
            +
                refute(crs.auth)
         | 
| 963 | 
            +
             | 
| 964 | 
            +
                altered = crs.alter_id("auth", "code")
         | 
| 965 | 
            +
                refute(crs.auth)
         | 
| 966 | 
            +
                assert_equal("auth:code", altered.auth)
         | 
| 967 | 
            +
              end
         | 
| 968 | 
            +
             | 
| 969 | 
            +
              def test_alter_geodetic_crs
         | 
| 970 | 
            +
                context = Proj::Context.new
         | 
| 971 | 
            +
                projected = Proj::Crs.create_from_database("EPSG", "32631", :PJ_CATEGORY_CRS)
         | 
| 972 | 
            +
                geod_crs = projected.geodetic_crs
         | 
| 973 | 
            +
                new_geod_crs = Proj::Crs.new("+proj=longlat +type=crs", context)
         | 
| 974 | 
            +
             | 
| 975 | 
            +
                altered = geod_crs.alter_geodetic_crs(new_geod_crs)
         | 
| 976 | 
            +
                assert(altered.equivalent_to?(new_geod_crs, :PJ_COMP_STRICT))
         | 
| 977 | 
            +
             | 
| 978 | 
            +
                altered = projected.alter_geodetic_crs(new_geod_crs)
         | 
| 979 | 
            +
                assert_equal(:PJ_TYPE_PROJECTED_CRS, altered.proj_type)
         | 
| 980 | 
            +
                assert(altered.geodetic_crs.equivalent_to?(new_geod_crs, :PJ_COMP_STRICT))
         | 
| 981 | 
            +
              end
         | 
| 982 | 
            +
             | 
| 983 | 
            +
              def test_alter_cs_angular_unit
         | 
| 984 | 
            +
                context = Proj::Context.new
         | 
| 985 | 
            +
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 986 | 
            +
                altered = crs.alter_cs_angular_unit(angular_units: "my unit", angular_units_conv: 2,
         | 
| 987 | 
            +
                                                    unit_auth_name: "my auth", unit_code: "my code")
         | 
| 988 | 
            +
             | 
| 989 | 
            +
                cs = altered.coordinate_system
         | 
| 990 | 
            +
                assert_equal(2, cs.axis_count)
         | 
| 991 | 
            +
             | 
| 992 | 
            +
                axis = cs.axis_info(0)
         | 
| 993 | 
            +
                assert_equal("my unit", axis.unit_name)
         | 
| 994 | 
            +
                assert_equal(2, axis.unit_conv_factor)
         | 
| 995 | 
            +
                assert_equal("my auth", axis.unit_auth_name)
         | 
| 996 | 
            +
                assert_equal("my code", axis.unit_code)
         | 
| 997 | 
            +
              end
         | 
| 998 | 
            +
             | 
| 999 | 
            +
              def test_alter_alter_cs_linear_unit
         | 
| 1000 | 
            +
                context = Proj::Context.new
         | 
| 1001 | 
            +
                projected = Proj::Crs.create_from_database("EPSG", "32631", :PJ_CATEGORY_CRS)
         | 
| 1002 | 
            +
                altered = projected.alter_cs_linear_unit(linear_units: "my unit", linear_units_conv: 2,
         | 
| 1003 | 
            +
                                                         unit_auth_name: "my auth", unit_code: "my code")
         | 
| 1004 | 
            +
             | 
| 1005 | 
            +
                cs = altered.coordinate_system
         | 
| 1006 | 
            +
                assert_equal(2, cs.axis_count)
         | 
| 1007 | 
            +
             | 
| 1008 | 
            +
                axis = cs.axis_info(0)
         | 
| 1009 | 
            +
                assert_equal("my unit", axis.unit_name)
         | 
| 1010 | 
            +
                assert_equal(2, axis.unit_conv_factor)
         | 
| 1011 | 
            +
                assert_equal("my auth", axis.unit_auth_name)
         | 
| 1012 | 
            +
                assert_equal("my code", axis.unit_code)
         | 
| 1013 | 
            +
              end
         | 
| 1014 | 
            +
             | 
| 1015 | 
            +
              def test_alter_parameters_linear_unit
         | 
| 1016 | 
            +
                context = Proj::Context.new
         | 
| 1017 | 
            +
                projected = Proj::Crs.create_from_database("EPSG", "32631", :PJ_CATEGORY_CRS)
         | 
| 1018 | 
            +
                altered = projected.alter_parameters_linear_unit(linear_units: "my unit", linear_units_conv: 2,
         | 
| 1019 | 
            +
                                                                 convert_to_new_unit: false)
         | 
| 1020 | 
            +
             | 
| 1021 | 
            +
                wkt = altered.to_wkt
         | 
| 1022 | 
            +
                assert_match(/500000/, wkt)
         | 
| 1023 | 
            +
                assert_match(/"my unit",2/, wkt)
         | 
| 1024 | 
            +
              end
         | 
| 1025 | 
            +
             | 
| 1026 | 
            +
              def test_promote_to_3d
         | 
| 1027 | 
            +
                context = Proj::Context.new
         | 
| 1028 | 
            +
                crs = Proj::Crs.new('EPSG:4326')
         | 
| 1029 | 
            +
             | 
| 1030 | 
            +
                crs_3d = crs.promote_to_3d
         | 
| 1031 | 
            +
                assert_equal("4979", crs_3d.id_code)
         | 
| 1032 | 
            +
             | 
| 1033 | 
            +
                cs = crs_3d.coordinate_system
         | 
| 1034 | 
            +
                assert_equal(3, cs.axis_count)
         | 
| 1035 | 
            +
              end
         | 
| 1036 | 
            +
             | 
| 1037 | 
            +
              def test_demote_to_3d
         | 
| 1038 | 
            +
                context = Proj::Context.new
         | 
| 1039 | 
            +
                crs = Proj::Crs.new('EPSG:4979')
         | 
| 1040 | 
            +
             | 
| 1041 | 
            +
                crs_2d = crs.demote_to_2d
         | 
| 1042 | 
            +
                assert_equal("4326", crs_2d.id_code)
         | 
| 1043 | 
            +
             | 
| 1044 | 
            +
                cs = crs_2d.coordinate_system
         | 
| 1045 | 
            +
                assert_equal(2, cs.axis_count)
         | 
| 1046 | 
            +
              end
         | 
| 1047 | 
            +
             | 
| 1048 | 
            +
              def test_projected_3d_with_base
         | 
| 1049 | 
            +
                context = Proj::Context.new
         | 
| 1050 | 
            +
                projected = Proj::Crs.new('EPSG:32631')
         | 
| 1051 | 
            +
                base_crs_3d = Proj::Crs.create_from_database("EPSG", "4979", :PJ_CATEGORY_CRS)
         | 
| 1052 | 
            +
             | 
| 1053 | 
            +
                crs_3d = projected.projected_3d(geog_3d_crs: base_crs_3d)
         | 
| 1054 | 
            +
                assert_equal(:PJ_TYPE_PROJECTED_CRS, crs_3d.proj_type)
         | 
| 1055 | 
            +
                assert_equal(crs_3d.name, projected.name)
         | 
| 1056 | 
            +
             | 
| 1057 | 
            +
                cs = crs_3d.coordinate_system
         | 
| 1058 | 
            +
                assert_equal(3, cs.axis_count)
         | 
| 1059 | 
            +
              end
         | 
| 1060 | 
            +
             | 
| 1061 | 
            +
              def test_projected_3d_without_base
         | 
| 1062 | 
            +
                context = Proj::Context.new
         | 
| 1063 | 
            +
                projected = Proj::Crs.new('EPSG:32631')
         | 
| 1064 | 
            +
             | 
| 1065 | 
            +
                crs_3d = projected.projected_3d
         | 
| 1066 | 
            +
                assert_equal(:PJ_TYPE_PROJECTED_CRS, crs_3d.proj_type)
         | 
| 1067 | 
            +
                assert_equal(crs_3d.name, projected.name)
         | 
| 1068 | 
            +
             | 
| 1069 | 
            +
                cs = crs_3d.coordinate_system
         | 
| 1070 | 
            +
                assert_equal(3, cs.axis_count)
         | 
| 372 1071 | 
             
              end
         | 
| 373 1072 | 
             
            end
         |