Class: StTools::Fias

Inherits:
Object
  • Object
show all
Defined in:
lib/st_tools/fias.rb

Class Method Summary collapse

Class Method Details

.baikonur?(aoguid) ⇒ Boolean

Метод проверяет, является ли aoguid городом федерального значения Байконур

Parameters:

  • aoguid (String)

    адресного объекта из таблицы addrobj ФИАС

Returns:

  • (Boolean)

    true, если объект - Байконур



79
80
81
82
83
84
# File 'lib/st_tools/fias.rb', line 79

def self.baikonur?(aoguid)
  if self.federal_cities['bai'] == aoguid
    return true
  end
  return false
end

.baikonur_aoguidString

Функция возвращает aoguid города федерального значения Байконура в системе ФИАС

Returns:

  • (String)

    aoguid г. Байконур



34
35
36
# File 'lib/st_tools/fias.rb', line 34

def self.baikonur_aoguid
  return self.federal_cities['bai']
end

.distance(from_lat, from_long, to_lat, to_long) ⇒ Float

Метод расчитывает расстояние в метрах между двумя географическими точками

Examples:

Примеры использования

# Москва - Санкт-Петербург
StTools::Fias.distance(55.75583, 37.61778, 59.95000, 30.31667)    #=> 634 988 м (635 км)
# Москва - Киев
StTools::Fias.distance(55.75583, 37.61778, 50.450500, 30.523000)  #=> 755 744 м (756 км)
# Москва - Пермь
StTools::Fias.distance(55.75583, 37.61778, 58.01389, 56.24889)    #=> 1 155 328 м (1 155 км)
# Москва - Сан-Франциско
StTools::Fias.distance(55.75583, 37.61778, 37.76667, -122.43333)  #=> 9 445 325 м (9 445 км)

Parameters:

  • from_lat (Float)
    • широта первой точки

  • from_long (Float)
    • долгота первой точки

  • to_lat (Float)
    • широта второй точки

  • to_long (Float)
    • долгота второй точки

Returns:

  • (Float)

    расстояние в метрах между двумя точками



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/st_tools/fias.rb', line 149

def self.distance(from_lat, from_long, to_lat, to_long)
  # coord - координата километровой отметки мкад
  rad_per_deg = Math::PI/180  # PI / 180
  rkm = 6371                  # Earth radius in kilometers
  rm = rkm * 1000             # Radius in meters

  dlat_rad = (to_lat.to_f - from_lat.to_f) * rad_per_deg  # Delta, converted to rad
  dlon_rad = (to_long.to_f - from_long.to_f) * rad_per_deg

  lat1_rad = from_lat.to_f * rad_per_deg
  lon1_rad = from_long.to_f * rad_per_deg

  lat2_rad = to_lat * rad_per_deg
  lon2_rad = to_long * rad_per_deg

  a = Math.sin(dlat_rad/2)**2 + Math.cos(lat1_rad) * Math.cos(lat2_rad) * Math.sin(dlon_rad/2)**2
  c = 2 * Math::atan2(Math::sqrt(a), Math::sqrt(1-a))

  (rm * c).to_i # Delta in meters
end

.federal?(aoguid) ⇒ Boolean

Метод проверяет, является ли aoguid городом федерального значения

Parameters:

  • aoguid (String)

    адресного объекта из таблицы addrobj ФИАС

Returns:

  • (Boolean)

    true, если объект - любой из городов федерального значения



43
44
45
46
# File 'lib/st_tools/fias.rb', line 43

def self.federal?(aoguid)
  return true if self.federal_cities.values.include?(aoguid)
  return false
end

.moscow?(aoguid) ⇒ Boolean

Метод проверяет, является ли aoguid городом федерального значения Москва

Parameters:

  • aoguid (String)

    адресного объекта из таблицы addrobj ФИАС

Returns:

  • (Boolean)

    true, если объект - Москва



52
53
54
55
# File 'lib/st_tools/fias.rb', line 52

def self.moscow?(aoguid)
  return true if self.federal_cities['msk'] == aoguid
  return false
end

.moscow_aoguidString

Функция возвращает aoguid города федерального значения Москва в системе ФИАС

Returns:

  • (String)

    aoguid г. Москва



13
14
15
# File 'lib/st_tools/fias.rb', line 13

def self.moscow_aoguid
  return self.federal_cities['msk']
end

.other?(aoguid) ⇒ Boolean

Метод проверяет, является ли aoguid неизвестным городом или страной

Parameters:

  • aoguid (String)

    адресного объекта

Returns:

  • (Boolean)

    true, если объект - прочий адресный объект, вне ФИАС



90
91
92
# File 'lib/st_tools/fias.rb', line 90

def self.other?(aoguid)
  self.other_aoguid == aoguid ? true : false
end

.other_aoguidString

Функция возвращает aoguid города населенного пункта вне системы ФИАС

Returns:

  • (String)

    aoguid неизвестного пункта



97
98
99
# File 'lib/st_tools/fias.rb', line 97

def self.other_aoguid
  "a074418e-41da-49dd-ad44-9f7909e91675"
end

.postalcode?(text) ⇒ Boolean

Метод проверяет, яаляется строка почтовым индексом

Examples:

Примеры использования

StTools::Fias.postalcode?('111141') #=> true
StTools::Fias.postalcode?('   141207') #=> true
StTools::Fias.postalcode?('Hello') #=> false
StTools::Fias.postalcode?('1234') #=> false

Parameters:

  • text (String)

    исходная строка

Returns:

  • (Boolean)

    true, если строка является почтовым индексом



125
126
127
128
129
130
131
# File 'lib/st_tools/fias.rb', line 125

def self.postalcode?(text)
  return nil if text.nil?
  if text.to_s.strip.match(/\A\d{6}\z/)
    return true
  end
  return false
end

.sevastopol?(aoguid) ⇒ Boolean

Метод проверяет, является ли aoguid городом федерального значения Севастополь

Parameters:

  • aoguid (String)

    адресного объекта из таблицы addrobj ФИАС

Returns:

  • (Boolean)

    true, если объект - Севастополь



70
71
72
73
# File 'lib/st_tools/fias.rb', line 70

def self.sevastopol?(aoguid)
  return true if self.federal_cities['svs'] == aoguid
  return false
end

.sevastopol_aoguidString

Функция возвращает aoguid города федерального значения Севастополя в системе ФИАС

Returns:

  • (String)

    aoguid г. Севастополь



27
28
29
# File 'lib/st_tools/fias.rb', line 27

def self.sevastopol_aoguid
  return self.federal_cities['svs']
end

.spb?(aoguid) ⇒ Boolean

Метод проверяет, является ли aoguid городом федерального значения Санкт-Петербург

Parameters:

  • aoguid (String)

    адресного объекта из таблицы addrobj ФИАС

Returns:

  • (Boolean)

    true, если объект - Санкт-Петербург



61
62
63
64
# File 'lib/st_tools/fias.rb', line 61

def self.spb?(aoguid)
  return true if self.federal_cities['spb'] == aoguid
  return false
end

.spb_aoguidString

Функция возвращает aoguid города федерального значения Санкт-Питербурга в системе ФИАС

Returns:

  • (String)

    aoguid г. Санкт-Питербурга



20
21
22
# File 'lib/st_tools/fias.rb', line 20

def self.spb_aoguid
  return self.federal_cities['spb']
end

.uuid?(text) ⇒ Boolean

Метод проверяет, имеет ли переданная строка тип UUID

Examples:

Примеры использования

StTools::Fias.uuid?('0c5b2444-70a0-4932-980c-b4dc0d3f02b5') #=> true
StTools::Fias.uuid?('Hello, word!') #=> false

Parameters:

  • text (String)

    исходная строка

Returns:

  • (Boolean)

    true, если строка имеет тип UUID



108
109
110
111
112
113
114
# File 'lib/st_tools/fias.rb', line 108

def self.uuid?(text)
  return nil if text.nil?
  if text.match(/[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}/i)
    return true
  end
  return false
end