Search in sources :

Example 1 with MoonDistance

use of org.eclipse.smarthome.binding.astro.internal.model.MoonDistance in project smarthome by eclipse.

the class MoonCalc method setPositionalInfo.

/**
 * Calculates the moon illumination and distance.
 */
public void setPositionalInfo(Calendar calendar, double latitude, double longitude, Moon moon) {
    double julianDate = DateTimeUtils.dateToJulianDate(calendar);
    setMoonPhase(calendar, moon);
    setAzimuthElevationZodiac(julianDate, latitude, longitude, moon);
    MoonDistance distance = moon.getDistance();
    distance.setDate(Calendar.getInstance());
    distance.setKilometer(getDistance(julianDate));
}
Also used : MoonDistance(org.eclipse.smarthome.binding.astro.internal.model.MoonDistance)

Example 2 with MoonDistance

use of org.eclipse.smarthome.binding.astro.internal.model.MoonDistance in project smarthome by eclipse.

the class MoonCalc method getMoonInfo.

/**
 * Calculates all moon data at the specified coordinates
 */
public Moon getMoonInfo(Calendar calendar, double latitude, double longitude) {
    Moon moon = new Moon();
    double julianDate = DateTimeUtils.dateToJulianDate(calendar);
    double julianDateMidnight = DateTimeUtils.midnightDateToJulianDate(calendar);
    double[] riseSet = getRiseSet(calendar, latitude, longitude);
    Calendar rise = DateTimeUtils.timeToCalendar(calendar, riseSet[0]);
    Calendar set = DateTimeUtils.timeToCalendar(calendar, riseSet[1]);
    if (rise == null || set == null) {
        Calendar tomorrow = (Calendar) calendar.clone();
        tomorrow.add(Calendar.DAY_OF_MONTH, 1);
        double[] riseSeTomorrow = getRiseSet(tomorrow, latitude, longitude);
        if (rise == null) {
            rise = DateTimeUtils.timeToCalendar(tomorrow, riseSeTomorrow[0]);
        }
        if (set == null) {
            set = DateTimeUtils.timeToCalendar(tomorrow, riseSeTomorrow[1]);
        }
    }
    moon.setRise(new Range(rise, rise));
    moon.setSet(new Range(set, set));
    MoonPhase phase = moon.getPhase();
    phase.setNew(DateTimeUtils.toCalendar(getNextPhase(calendar, julianDateMidnight, NEW_MOON)));
    phase.setFirstQuarter(DateTimeUtils.toCalendar(getNextPhase(calendar, julianDateMidnight, FIRST_QUARTER)));
    phase.setFull(DateTimeUtils.toCalendar(getNextPhase(calendar, julianDateMidnight, FULL_MOON)));
    phase.setThirdQuarter(DateTimeUtils.toCalendar(getNextPhase(calendar, julianDateMidnight, LAST_QUARTER)));
    Eclipse eclipse = moon.getEclipse();
    double eclipseJd = getEclipse(calendar, ECLIPSE_TYPE_MOON, julianDateMidnight, ECLIPSE_MODE_PARTIAL);
    eclipse.setPartial(DateTimeUtils.toCalendar(eclipseJd));
    eclipseJd = getEclipse(calendar, ECLIPSE_TYPE_MOON, julianDateMidnight, ECLIPSE_MODE_TOTAL);
    eclipse.setTotal(DateTimeUtils.toCalendar(eclipseJd));
    double decimalYear = DateTimeUtils.getDecimalYear(calendar);
    MoonDistance apogee = moon.getApogee();
    double apogeeJd = getApogee(julianDate, decimalYear);
    apogee.setDate(DateTimeUtils.toCalendar(apogeeJd));
    apogee.setKilometer(getDistance(apogeeJd));
    MoonDistance perigee = moon.getPerigee();
    double perigeeJd = getPerigee(julianDate, decimalYear);
    perigee.setDate(DateTimeUtils.toCalendar(perigeeJd));
    perigee.setKilometer(getDistance(perigeeJd));
    return moon;
}
Also used : MoonPhase(org.eclipse.smarthome.binding.astro.internal.model.MoonPhase) Moon(org.eclipse.smarthome.binding.astro.internal.model.Moon) MoonDistance(org.eclipse.smarthome.binding.astro.internal.model.MoonDistance) Eclipse(org.eclipse.smarthome.binding.astro.internal.model.Eclipse) Calendar(java.util.Calendar) Range(org.eclipse.smarthome.binding.astro.internal.model.Range)

Aggregations

MoonDistance (org.eclipse.smarthome.binding.astro.internal.model.MoonDistance)2 Calendar (java.util.Calendar)1 Eclipse (org.eclipse.smarthome.binding.astro.internal.model.Eclipse)1 Moon (org.eclipse.smarthome.binding.astro.internal.model.Moon)1 MoonPhase (org.eclipse.smarthome.binding.astro.internal.model.MoonPhase)1 Range (org.eclipse.smarthome.binding.astro.internal.model.Range)1