Module: Proj::Api
- Extended by:
- FFI::Library
- Defined in:
- lib/api/api.rb,
lib/api/api_5_0.rb,
lib/api/api_5_1.rb,
lib/api/api_5_2.rb,
lib/api/api_6_0.rb,
lib/api/api_6_1.rb,
lib/api/api_6_2.rb,
lib/api/api_6_3.rb,
lib/api/api_7_0.rb,
lib/api/api_7_1.rb,
lib/api/api_7_2.rb,
lib/api/api_8_0.rb,
lib/api/api_8_1.rb,
lib/api/api_8_2.rb,
lib/api/api_9_1.rb,
lib/api/api_9_2.rb,
lib/api/api_9_4.rb,
lib/api/api_experimental.rb
Defined Under Namespace
Classes: PJ_AXIS_DESCRIPTION, PJ_COORD, PJ_ELLPS, PJ_ENU, PJ_FACTORS, PJ_GEOD, PJ_GRID_INFO, PJ_INFO, PJ_INIT_INFO, PJ_LIST, PJ_LP, PJ_LPZ, PJ_LPZT, PJ_OPK, PJ_PARAM_DESCRIPTION, PJ_PRIME_MERIDIANS, PJ_PROJ_INFO, PJ_UNITS, PJ_UV, PJ_UVW, PJ_UVWT, PJ_XY, PJ_XYZ, PJ_XYZT, PROJ_CRS_INFO, PROJ_CRS_LIST_PARAMETERS, PROJ_FILE_API, PROJ_UNIT_INFO, ProjCelestialBodyInfo
Constant Summary collapse
- PJ_LOG_LEVEL =
enum(:PJ_LOG_NONE , 0, :PJ_LOG_ERROR, 1, :PJ_LOG_DEBUG, 2, :PJ_LOG_TRACE, 3, :PJ_LOG_TELL , 4, :PJ_LOG_DEBUG_MAJOR, 2, # for proj_api.h compatibility :PJ_LOG_DEBUG_MINOR, 3)
- PJ_DIRECTION =
Apply transformation to observation - in forward or inverse direction
enum(:PJ_FWD, 1, # Forward :PJ_IDENT, 0, # Do nothing :PJ_INV, -1)
- PJ_CATEGORY =
Object category
enum(:PJ_CATEGORY_ELLIPSOID, :PJ_CATEGORY_PRIME_MERIDIAN, :PJ_CATEGORY_DATUM, :PJ_CATEGORY_CRS, :PJ_CATEGORY_COORDINATE_OPERATION, :PJ_CATEGORY_DATUM_ENSEMBLE)
- PJ_TYPE =
enum(:PJ_TYPE_UNKNOWN, :PJ_TYPE_ELLIPSOID, :PJ_TYPE_PRIME_MERIDIAN, :PJ_TYPE_GEODETIC_REFERENCE_FRAME, :PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME, :PJ_TYPE_VERTICAL_REFERENCE_FRAME, :PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME, :PJ_TYPE_DATUM_ENSEMBLE, # Abstract type, not returned by proj_get_type() :PJ_TYPE_CRS, :PJ_TYPE_GEODETIC_CRS, :PJ_TYPE_GEOCENTRIC_CRS, :PJ_TYPE_GEOGRAPHIC_CRS, :PJ_TYPE_GEOGRAPHIC_2D_CRS, :PJ_TYPE_GEOGRAPHIC_3D_CRS, :PJ_TYPE_VERTICAL_CRS, :PJ_TYPE_PROJECTED_CRS, :PJ_TYPE_COMPOUND_CRS, :PJ_TYPE_TEMPORAL_CRS, :PJ_TYPE_ENGINEERING_CRS, :PJ_TYPE_BOUND_CRS, :PJ_TYPE_OTHER_CRS, :PJ_TYPE_CONVERSION, :PJ_TYPE_TRANSFORMATION, :PJ_TYPE_CONCATENATED_OPERATION, :PJ_TYPE_OTHER_COORDINATE_OPERATION, :PJ_TYPE_TEMPORAL_DATUM, :PJ_TYPE_ENGINEERING_DATUM, :PJ_TYPE_PARAMETRIC_DATUM, :PJ_TYPE_DERIVED_PROJECTED_CRS, :PJ_TYPE_COORDINATE_METADATA)
- PJ_PROJ_STRING_TYPE =
enum(:PJ_PROJ_5, :PJ_PROJ_4)
- PJ_COORDINATE_SYSTEM_TYPE =
enum(:PJ_CS_TYPE_UNKNOWN, :PJ_CS_TYPE_CARTESIAN, :PJ_CS_TYPE_ELLIPSOIDAL, :PJ_CS_TYPE_VERTICAL, :PJ_CS_TYPE_SPHERICAL, :PJ_CS_TYPE_ORDINAL, :PJ_CS_TYPE_PARAMETRIC, :PJ_CS_TYPE_DATETIMETEMPORAL, :PJ_CS_TYPE_TEMPORALCOUNT, :PJ_CS_TYPE_TEMPORALMEASURE)
- PJ_WKT_TYPE =
enum(:PJ_WKT2_2015, :PJ_WKT2_2015_SIMPLIFIED, :PJ_WKT2_2019, :PJ_WKT2_2018, # Deprecated alias for PJ_WKT2_2019 :PJ_WKT2_2018_SIMPLIFIED, # Deprecated alias for PJ_WKT2_2019 :PJ_WKT1_GDAL, :PJ_WKT1_ESRI)
- PJ_COMPARISON_CRITERION =
Comparison criteria
enum(:PJ_COMP_STRICT, # All properties are identical :PJ_COMP_EQUIVALENT, # The objects are equivalent for the purpose of coordinate operations. They can differ by the name of their objects, identifiers, other metadata. Parameters may be expressed in different units, provided that the value is (with some tolerance) the same once expressed in a common unit. :PJ_COMP_EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)
- PJ_GUESSED_WKT_DIALECT =
Guessed WKT “dialect”
enum(:PJ_GUESSED_WKT2_2019, :PJ_GUESSED_WKT2_2018, :PJ_GUESSED_WKT2_2015, :PJ_GUESSED_WKT1_GDAL, :PJ_GUESSED_WKT1_ESRI, :PJ_GUESSED_NOT_WKT)
- PROJ_OPEN_ACCESS =
enum(:PROJ_OPEN_ACCESS_READ_ONLY, # Read-only access. Equivalent to "rb" :PROJ_OPEN_ACCESS_READ_UPDATE, # Read-update access. File should be created if not existing. Equivalent to "r+b :PROJ_OPEN_ACCESS_CREATE)
- PJ_UNIT_TYPE =
enum(:PJ_UT_ANGULAR, :PJ_UT_LINEAR, :PJ_UT_SCALE, :PJ_UT_TIME)
- PJ_CARTESIAN_CS_2D_TYPE =
enum(:PJ_CART2D_EASTING_NORTHING, :PJ_CART2D_NORTHING_EASTING, :PJ_CART2D_NORTH_POLE_EASTING_SOUTH_NORTHING_SOUTH, :PJ_CART2D_SOUTH_POLE_EASTING_NORTH_NORTHING_NORTH, :PJ_CART2D_WESTING_SOUTHING)
- PJ_ELLIPSOIDAL_CS_2D_TYPE =
enum(:PJ_ELLPS2D_LONGITUDE_LATITUDE, :PJ_ELLPS2D_LATITUDE_LONGITUDE)
- PJ_ELLIPSOIDAL_CS_3D_TYPE =
enum(:PJ_ELLPS3D_LONGITUDE_LATITUDE_HEIGHT, :PJ_ELLPS3D_LATITUDE_LONGITUDE_HEIGHT)
Class Method Summary collapse
-
.library_versions ⇒ Array<String>
List of knows PROJ library versions.
-
.linux_search_paths ⇒ Array<String>
Linux search paths for PROJ library.
-
.load_api ⇒ nil
Load API files based on PROJ version.
-
.load_library ⇒ FFI::DynamicLibrary
Load PROJ library.
-
.macos_search_paths ⇒ Array<String>
MacOS search paths for PROJ library.
-
.search_paths ⇒ Array<String>
Search paths to use when looking for PROJ library.
-
.windows_search_paths ⇒ Array<String>
Windows search paths for PROJ library.
Class Method Details
.library_versions ⇒ Array<String>
List of knows PROJ library versions
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/api/api.rb', line 11 def self.library_versions ["25", # 9.2 "9_1", # 9.1 "22", # 8.0 and 8.1 "19", # 7.x "17", # 6.1 *and* 6.2 "15", # 6.0 "14", # 5.2 "13", # 5.0 "12", # 4.9 "11"] # 4.9 end |
.linux_search_paths ⇒ Array<String>
Linux search paths for PROJ library
54 55 56 57 58 |
# File 'lib/api/api.rb', line 54 def self.linux_search_paths self.library_versions.map do |version| "libproj.so.#{version}" end end |
.load_api ⇒ nil
Load API files based on PROJ version
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/api/api.rb', line 86 def self.load_api # First load the base 5.0 api so we can determine the Proj Version require_relative './api_5_0' Api.const_set('PROJ_VERSION', Gem::Version.new(self.proj_info[:version])) # Now load the rest of the apis based on the proj version versions = ['5.1.0', '5.2.0', '6.0.0', '6.1.0', '6.2.0', '6.3.0', '7.0.0', '7.1.0', '7.2.0', '8.0.0', '8.1.0', '8.2.0', '9.1.0', '9.2.0', '9.4.0'] versions.each do |version| api_version = Gem::Version.new(version) if PROJ_VERSION >= api_version require_relative "./api_#{api_version.segments[0]}_#{api_version.segments[1]}" end end # Add in the experimental api require_relative "./api_experimental" end |
.load_library ⇒ FFI::DynamicLibrary
Load PROJ library
73 74 75 76 77 78 79 80 81 |
# File 'lib/api/api.rb', line 73 def self.load_library if ENV["PROJ_LIB_PATH"] ffi_lib ENV["PROJ_LIB_PATH"] else ffi_lib self.search_paths end ffi_libraries.first end |
.macos_search_paths ⇒ Array<String>
MacOS search paths for PROJ library
63 64 65 66 67 68 |
# File 'lib/api/api.rb', line 63 def self.macos_search_paths # On MacOS only support HomeBrew since the MacPort is unsupported and ancient (5.2). self.library_versions.map do |version| "libproj.#{version}.dylib" end end |
.search_paths ⇒ Array<String>
Search paths to use when looking for PROJ library
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/api/api.rb', line 27 def self.search_paths result = case RbConfig::CONFIG['host_os'] when /mswin|msys|mingw|cygwin|bccwin|wince|emc/ self.windows_search_paths when /darwin|mac os/ self.macos_search_paths else self.linux_search_paths end # Try libproj as catch all result << 'libproj' result end |
.windows_search_paths ⇒ Array<String>
Windows search paths for PROJ library
45 46 47 48 49 |
# File 'lib/api/api.rb', line 45 def self.windows_search_paths self.library_versions.map do |version| ["libproj-#{version}", "libproj_#{version}"] end.flatten end |