module Proj::Api

Constants

PJ_CARTESIAN_CS_2D_TYPE

@return [Symbol]

PJ_CATEGORY

Object category @return [Symbol]

PJ_COMPARISON_CRITERION

Comparison criteria @return [Symbol]

PJ_COORDINATE_SYSTEM_TYPE

@return [Symbol]

PJ_DIRECTION

Apply transformation to observation - in forward or inverse direction @return [Symbol]

PJ_ELLIPSOIDAL_CS_2D_TYPE

@return [Symbol]

PJ_ELLIPSOIDAL_CS_3D_TYPE

@return [Symbol]

PJ_GUESSED_WKT_DIALECT

Guessed WKT “dialect”

@return [Symbol]
PJ_LOG_LEVEL

@return [Symbol]

PJ_PROJ_STRING_TYPE

@return [Symbol]

PJ_TYPE

@return [Symbol]

PJ_UNIT_TYPE

@return [Symbol]

PJ_WKT_TYPE

@return [Symbol]

PROJ_OPEN_ACCESS

@return [Symbol]

Public Class Methods

library_versions() click to toggle source

List of knows PROJ library versions

@return [Array<String>]

# 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() click to toggle source

Linux search paths for PROJ library

@return [Array<String>]

# 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() click to toggle source

Load API files based on PROJ version

@return [nil]

# 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']

  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() click to toggle source

Load PROJ library

@return [FFI::DynamicLibrary]

# 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() click to toggle source

MacOS search paths for PROJ library

@return [Array<String>]

# 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() click to toggle source

Search paths to use when looking for PROJ library

@return [Array<String>]

# 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() click to toggle source

Windows search paths for PROJ library

@return [Array<String>]

# 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