Class: When::CalendarNote::Ephemeris

Inherits:
When::CalendarNote show all
Defined in:
lib/when_exe/ephemeris/notes.rb

Overview

天体暦の暦注

Constant Summary collapse

Notes =
[When::BasicTypes::M17n, [
  "locale:[=en:, ja=ja:, alias=ja:]",
  "names:[Ephemeris]",

  # 年の暦注 ----------------------------
  [When::BasicTypes::M17n,
    "names:[year, 年]"
  ],

  # 月の暦注 ----------------------------
  [When::BasicTypes::M17n,
    "names:[month, 月]",
    [When::BasicTypes::M17n,
      "names:[Month]"
    ]
  ],

  # 日の暦注 ----------------------------
  [When::BasicTypes::M17n,
    "names:[day, 日]",
      "[Sunrise,   日の出          ]", # 日の出
      "[Sunset,    日の入り        ]", # 日の入り
      [When::Coordinates::Residue,
        "label:[Moon_Age=, 正午月齢=ja:%%<月齢>]",
        "divisor:60",
        "format:[%s(%4.1f)=]"
      ],
      "[Moonrise,  月の出          ]", # 月の出
      "[Moonset=,  月の入り        ]", # 月の入り
      [When::BasicTypes::M17n,
        "names:[Tide, 潮汐]",            # 満潮干潮日時
        "[High_Tide=en:Tide, 満潮=ja:%%<潮汐>]",
        "[Low_Tide=en:Tide,  干潮=ja:%%<潮汐>]"
      ],
      "[SolarTerm=,  二十四節気    ]", # 二十四節気
      "[LunarPhase=, 月の位相      ]"  # 月の位相
  ]
]]

Constants inherited from When::CalendarNote

Bahai, CalendarDepend, Chinese, CommonWithRokuyo, CommonWithSovietFiveDay, CommonWithSovietSixDay, Default, HashProperty, Javanese, JulianDay, Mayan, Tibetan, Yis

Constants included from Parts::Resource

Parts::Resource::ConstList, Parts::Resource::ConstTypes, Parts::Resource::IRIDecode, Parts::Resource::IRIDecodeTable, Parts::Resource::IRIEncode, Parts::Resource::IRIEncodeTable, Parts::Resource::IRIHeader, Parts::Resource::LabelProperty

Constants included from Namespace

Namespace::DC, Namespace::DCQ, Namespace::DCT, Namespace::FOAF, Namespace::OWL, Namespace::RDF, Namespace::RDFC, Namespace::RDFS, Namespace::RSS, Namespace::XSD

Instance Attribute Summary

Attributes inherited from When::CalendarNote

#event

Attributes inherited from TM::ReferenceSystem

#domain_of_validity, #position

Attributes inherited from BasicTypes::Object

#label

Attributes included from Parts::Resource

#_pool, #child, #keys, #locale, #namespace

Instance Method Summary collapse

Methods inherited from When::CalendarNote

#copy, #day, #duration, #enum_for, #include?, #month, #note?, #notes, #year

Methods inherited from TM::ReferenceSystem

#domain, #name

Methods included from Parts::Resource

#[], #^, _abbreviation_to_iri, _decode, _encode, _extract_prefix, _instance, _instantiate, _parse, _path_with_prefix, _replace_tags, _setup_, _setup_info, _simplify_path, base_uri, #each, #enum_for, #hierarchy, #include?, #included?, #iri, #leaf?, #m17n, #map, #parent, #registered?, root_dir

Methods included from Parts::Resource::Pool

#[], #[]=, #_pool, #_setup_, #pool_keys

Methods included from Parts::Resource::Synchronize

#synchronize

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class When::Parts::Resource

Instance Method Details

#lunarphase(date, options = {}) ⇒ When::Coordinates::Residue

月の位相

Parameters:

Returns:



409
410
411
412
413
414
415
# File 'lib/when_exe/ephemeris/notes.rb', line 409

def lunarphase(date, options={})
  @phase ||= When.CalendarNote('LunarPhases')
  longitude, metsu = @phase.position(date)
  div, mod = longitude.divmod(90)
  return nil unless mod == 0
  When.Resource('_co:Common::月相::*')[div]
end

#moon_age(date, options = {}) ⇒ Numeric

正午月齢

Parameters:

Returns:

  • (Numeric)

    正午における朔からの経過日数



297
298
299
300
301
302
# File 'lib/when_exe/ephemeris/notes.rb', line 297

def moon_age(date, options={})
  @phase ||= When.CalendarNote('LunarPhases')
  noon  = date.floor(When::DAY,When::SYSTEM)
  noon += 0.5 if noon.kind_of?(When::TM::DateAndTime)
  @root['Moon_Age'][noon.to_f - @phase.phase(noon, [-30.0,30.0]).to_f]
end

#moonrise(date, options = {}) ⇒ When::TM::TemporalPosition

月の出

Parameters:

Returns:



312
313
314
315
316
317
318
# File 'lib/when_exe/ephemeris/notes.rb', line 312

def moonrise(date, options={})
  event = formula(date.location.iri).moonrise(date)
  event.events = [@root['Moonrise']]
  event
rescue
  nil
end

#moonset(date, options = {}) ⇒ When::TM::TemporalPosition

月の入り

Parameters:

Returns:



328
329
330
331
332
333
334
# File 'lib/when_exe/ephemeris/notes.rb', line 328

def moonset(date, options={})
  event = formula(date.location.iri).moonset(date)
  event.events = [@root['Moonset']]
  event
rescue
  nil
end

#solarterm(date, options = {}) ⇒ When::Coordinates::Residue

太陽黄経

Parameters:

Returns:



392
393
394
395
396
397
398
399
# File 'lib/when_exe/ephemeris/notes.rb', line 392

def solarterm(date, options={})
  @term ||= When.CalendarNote('SolarTerms')
  longitude, motsu = @term.position(date)
  return nil if motsu == 0
  div, mod = longitude.divmod(15)
  return nil unless mod == 0
  When.Resource('_co:Common::二十四節気::*')[div]
end

#sunrise(date, options = {}) ⇒ When::TM::TemporalPosition

日の出

Parameters:

Returns:



265
266
267
268
269
270
271
# File 'lib/when_exe/ephemeris/notes.rb', line 265

def sunrise(date, options={})
  event = formula(date.location.iri).sunrise(date)
  event.events = [@root['Sunrise']]
  event
rescue
  nil
end

#sunset(date, options = {}) ⇒ When::TM::TemporalPosition

日の入り

Parameters:

Returns:



281
282
283
284
285
286
287
# File 'lib/when_exe/ephemeris/notes.rb', line 281

def sunset(date, options={})
  event = formula(date.location.iri).sunset(date)
  event.events = [@root['Sunset']]
  event
rescue
  nil
end

#tide(date, options = {}) ⇒ Array<Array<Integer, When::TM::TemporalPosotion>>

干潮・満潮の日時

Parameters:

Options Hash (options):

  • tide (String)

    潮汐計算方式 ‘Horizontal’ - 地平高度基準, ‘Equatorial’ - 子午線通過基準(デフォルト)

Returns:

  • (Array<Array<Integer, When::TM::TemporalPosotion>>)

    干潮・満潮の日時の Array

    Integer

    +1:満潮, -1:干潮

    When::TM::TemporalPosotion

    干潮・満潮の日時



349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
# File 'lib/when_exe/ephemeris/notes.rb', line 349

def tide(date, options={})
  return nil unless @interval
  @target  ||= When.Resource('_ep:Moon')
  events     = @root['Tide']
  form       = formula(date.location.iri)
  type       = options[:tide] =~ /\Ahorizon/i ? nil : 0

  now        = +date
  high_tides = []
  5.times do |i|
    high_tide = form.day_event(now + i - 2, type, @target) + @interval
    high_tides << high_tide if high_tides.size == 0 || high_tide > high_tides[-1] + 0.5
  end
  tides = []

  (high_tides.size-1).times do |i|
    tides << [0, high_tides[i]]
    tides << [1, 0.75*high_tides[i] + 0.25*high_tides[i+1]]
    tides << [0, 0.50*high_tides[i] + 0.50*high_tides[i+1]]
    tides << [1, 0.25*high_tides[i] + 0.75*high_tides[i+1]]
  end
  tides << [0, high_tides[-1]]

  today = +date.floor(When::DAY)...+date.ceil(When::DAY)
  seed  = date._attr
  seed[:clock] ||= When::TM::Clock.local_time
  tides.select {|x| today.include?(x[1])}.map {|x|
    d = form._to_seed_type(x[1], seed)
    d.events = [events[x[0]]]
    d
  }
rescue
  nil
end